1、简介
在日常通信过程中,串口通信时常要接收不定长数据,接收不定长数据实现的方法很多种。本次使用的是空闲中断接收(不使用DMA)。
DMA接收的缺点:使用DMA接收时,当串口接收到的数据长度很长时,会导致DMA忽略超出范围的数据,使得数据接收不完整,甚至导致DMA卡死。
中断接收的缺点:中断接收时,由于需要接收不定长数据,如果数据帧没有指定的帧头或帧尾,那么中断接收无法知道一次数据是否结束接收,可能会和下一次的数据叠加在一起。
2、Cubemx配置
串口配置波特率、校验位等参数。
并选择开启串口中断
3、代码编写
在串口初始化下面开启串口接收中断和空闲中断
void MX_USART1_UART_Init(void)
{
...
/* USER CODE BEGIN USART1_Init 2 */
__HAL_UART_ENABLE_IT(&huart1, UART_IT