医疗机构网站以患者做宣传,网络培训思想汇报大学生,做汽车微信广告视频网站有哪些,东莞住房建设网站的网知不足而奋进 望远山而前行 目录
文章目录
前言
学习目标
学习内容
开发流程
串口功能配置
串口功能开启
串口中断配置
串口参数配置
查询配置结果
发送功能测试
中断接收功能测试
printf配置
DMA收发
配置
DMA发送
DMA接收(方式1)
DMA接收(方式2)
总结 前言…知不足而奋进 望远山而前行 目录
文章目录
前言
学习目标
学习内容
开发流程
串口功能配置
串口功能开启
串口中断配置
串口参数配置
查询配置结果
发送功能测试
中断接收功能测试
printf配置
DMA收发
配置
DMA发送
DMA接收(方式1)
DMA接收(方式2)
总结 前言
在嵌入式系统开发中掌握串口通信是至关重要的一环。串口通信作为微控制器与外部设备或其他微控制器之间的主要通信方式在各种嵌入式应用中起着重要作用。本文将介绍如何通过STM32CubeMX配置串口功能并掌握串口发送、接收以及使用DMA进行数据传输的方法。同时我们还将讨论如何配置printf函数使其能够在串口上输出调试信息以及如何处理串口接收中断。通过学习这些内容读者将能够在嵌入式系统开发中更加灵活地应用串口通信功能。 学习目标
熟悉STM32CubeMX配置流程掌握串口发送和接收掌握串口DMA发送和DMA接收掌握printf配置
学习内容
开发流程
配置芯片串口功能编写串口代码调试
串口功能配置
串口功能开启 在Connectivity下选择合适的串口这里选择USART1配置模式为异步Asynchronous
串口中断配置 在NVIC Settings下打开串口中断。
串口参数配置 Parameter Settings中根据情况配置串口的参数。
查询配置结果 在GPIO Setting中可以显示默认的IO引脚 右侧芯片引脚部分会显示配置的结果。 发送功能测试
/* USER CODE BEGIN WHILE */
uint8_t cnt 0;
while (1)
{HAL_UART_Transmit(huart1, cnt, 1, HAL_MAX_DELAY);cnt;HAL_Delay(1000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */
}
通过HAL_UART_Transmit函数发送数据。
中断接收功能测试
/* USER CODE BEGIN WHILE */
HAL_UART_Receive_IT(huart1, usart1_buffer, USART1_BUFFER_LEN);
while (1)
{/* USER CODE END WHILE *//* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
/* USER CODE BEGIN 0 */
#define USART1_BUFFER_LEN 1
uint8_t usart1_buffer[USART1_BUFFER_LEN];void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {HAL_UART_Transmit(huart1, (const uint8_t *)usart1_buffer, USART1_BUFFER_LEN, HAL_MAX_DELAY);// 开启中断接收HAL_UART_Receive_IT(huart1, usart1_buffer, USART1_BUFFER_LEN);
}
/* USER CODE END 0 */接收任意个字节
触发空闲中断接收
HAL_UARTEx_ReceiveToIdle_IT(huart1, usart_buffer, RX_BUF_LEN); // 常用
使用Idle空闲中断回调
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){usart_buffer[Size] \0;printf(callback2: %s\n, usart_buffer);HAL_UARTEx_ReceiveToIdle_IT(huart1, usart_buffer, RX_BUF_LEN); // 常用
}printf配置
#include stdio.h
int fputc(int ch, FILE* f) {HAL_UART_Transmit(huart1, (uint8_t *)ch,1, 0xFFFF);return ch;
} 注意如果加了printf无法打印日志记得在 options 里勾选 MicroLIB DMA收发
配置 DMA发送
/* USER CODE BEGIN WHILE */
uint8_t cnt 0;
while (1)
{HAL_UART_Transmit_DMA(huart1, cnt, 1);cnt;HAL_Delay(1000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */
}
DMA接收(方式1)
触发接收
HAL_UART_Receive_DMA(huart1, usart_buffer, RX_BUF_LEN); // 常用
接收回调函数
#define RX_BUF_LEN 12
uint8_t usart_buffer[RX_BUF_LEN 1];void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){// 为了打印字符串usart_buffer[RX_BUF_LEN] \0;printf(callback1: %s\n, usart_buffer);// 再次启用中断接收(收到指定个字节才执行)HAL_UART_Receive_DMA(huart1, usart_buffer, RX_BUF_LEN); // 常用}
DMA接收(方式2)
通过空闲中断事件接收即发生空闲了才进行数据处理
触发接收
HAL_UARTEx_ReceiveToIdle_DMA(huart1, usart_buffer, RX_BUF_LEN); // 常用
接收回调函数
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){// 为了打印字符串usart_buffer[Size] \0;printf(callback2[%d]: %s\n, Size, usart_buffer);// 再次启用接收(RX_BUF_LEN为最大接收数量)HAL_UARTEx_ReceiveToIdle_DMA(huart1, usart_buffer, RX_BUF_LEN); // 常用} 总结
通过本文的学习内容读者可以熟悉STM32CubeMX的串口配置流程掌握串口发送和接收的基本方法并了解如何使用DMA进行串口数据传输。在串口发送功能测试中通过HAL_UART_Transmit函数实现了简单的数据发送在中断接收功能测试中通过HAL_UART_Receive_IT函数实现了中断接收并介绍了触发空闲中断接收的方法。此外还讨论了如何配置printf函数使其能够在串口上输出调试信息。最后通过DMA收发部分的介绍读者可以了解如何配置DMA进行高效的串口数据传输包括DMA发送和DMA接收的两种方式。通过这些学习内容读者将能够在嵌入式系统开发中灵活运用串口通信功能为实际应用开发提供技术支持。