1、背景
在串口数据编程中,由于存在不同的协议,通常多采用状态机解决方案,但是不同帧格式不同,最好的方式是在接收时不进行协议和接收数据长度的判断,实现无协议接收,串口接收不定长数据,且没有特定的协议来标识数据包的开始和结束,通常需要定义一些规则或者条件来识别数据的完整性。常用的解决方式是假设数据在一段时间内没有新的字节接收就认为是完整的,或者可以设定一个特定的超时时间。
2、基于STM32进行该编程模型的框架实现方案
(1)初始化串口和定时器
首先,我们需要初始化串口和定时器。定时器用于检测数据接收的超时
void UART_Init(void)
{
/* 初始化USART,例如USART1 */
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart1);
/* 使能USART接收中断 */
HAL_UA