串口接收无协议判断,在接收整包数据后再统一进行处理的软件算法实现框架。

本文介绍了在STM32环境下,如何实现一个串口接收无协议的框架,通过初始化串口和定时器,结合中断处理函数,实现接收到完整数据包后再进行处理。在中断中,接收到的数据会被存储到缓冲区,定时器超时则触发处理完整的数据包。
摘要由CSDN通过智能技术生成

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

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万能之王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值