STM32的串口使用DMA实现任意字节的接收功能

STM32的串口使用DMA实现任意字节的接收功能

注意事项:
1.本例程由STM32CubeMX V5.6.1生成,并在STM32/GD32上验证过可行。
2.我的板子是GD32F103C8T6,HSE为12MHz不是8MHz,所以大家参考时注意一下。
3.程序中使用的是USART2(PA2-TX和PA3-RX),打开了串口接收中断RXNE和串口空闲中断IDLE。

说明:
1.CubeMX里的关键配置如下图
STM32的串口使用DMA实现任意字节的接收功能
2.主函数里打开串口接收中断RXNE和串口空闲中断IDLE,最后使用HAL_UART_Receive_DMA函数开启DMA接收,如下图。
STM32的串口使用DMA实现任意字节的接收功能
3.串口中断服务函数里加入如下代码,注意DMA使用的是正常接收不是循环,所以每次在中断结束时都要再调用HAL_UART_Receive_DMA函数开启DMA接收
STM32的串口使用DMA实现任意字节的接收功能
4.实际效果如下图,向USART2发数据,从USART1打印出来了
STM32的串口使用DMA实现任意字节的接收功能
最后留下程序:
链接:https://pan.baidu.com/s/1anZosyT8tWaFxQelRhuilQ
提取码:gg1d