前面文章已经知道STM32串口DMA接收不定长数据包
那么接下来就需要对数据包内数据进行解析
数据包我们一般放在主循环中来解析,解析过程中,我们不希望新的数据更新影响解析(接收速度快,而且内容重复情况下),我们需要对内容上锁。
1,首先定义变量与数组
我们需要把DMA接收的数据存储到数组,同时需要标志位来判断接收、解析等是否完毕
/* USER CODE BEGIN PV */
uint8_t receiveData[50];
uint8_t rxflag = 0,Databuff_Size = 0;
/* USER CODE END PV */
定义了一个可以存放50个变量的数组,一个状态标志,一个Size用来传递接收长度
2,DMA不定长接受串口中断
2.1初始化
HAL_UARTEx_ReceiveToIdle_DMA(&huart1,receiveData, 50);
//初始化打开串口DMA不定长接收,指定串口和存放数组、大小
__HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT);
//关闭串口接收过半中断
2.2中断回调函数
void HAL