以前用DMA实现接收不定长数据,DMA的方法接收串口助手的数据,全部没问题,不过如果接收模块返回的数据,而这些数据如果包含回车换行的话就会停止接收,例如接收:AT\r\nOK\r\n,就只能接收到AT\r,导致没有接收完成,具体原因还没搞懂,有了解的,希望可以告知一下,DMA不定长接收方法传输门:https://www.cnblogs.com/xingboy/p/9714907.html。
好了,不多说了,现在进入正文。首先建立一个STM32Cumebx的工程,打开串口中断,完成配置,具体的配置流程就不细说了,没什么难度就只是打开串口跟中断而已。
生成工程代码后,先定义好一些变量:
//串口4中断接收定义 #define MAX_RECV_LEN 1024 //设定可以接收的最大字节 uint8_t msg_buff[MAX_RECV_LEN] = { 0}; //接收缓存区 uint8_t * msg = msg_buff; //定义一个指针指向接收缓存区 int flag = 0; //接收完成标志 int len_u4=0; //数据长度记录
接着重写串口接收回调函数
/*重写串口接收回调函数*/ void HAL_UART_RxCpltCallback(UART_HandleTypeDef*