STM32L4系列串口接收不定长数据HAL库

序言

由于毕设需要用到STM32L4系列的单片机,而网上关于这款单片机的资料较少,把串口这块完全弄好着实费了我一大把力气,在此将自己的成果与大家分享一波,希望大家能够借此少踩一些坑。同时很感谢前辈们提供的一些资料。下面进入正题。

概述

在网上查找资料的时候发现接收不定长数据的方式有挺多的,主要有以下几种:

  1. 通过检测特殊的标志符来确定数据接收完成。
    例如在接收的数据尾端添加一个“0X4A”,如果检测到“0X4A”就说明接收完成,可以进行后续的操作。但该方法的缺点是无法适用于未知的接收数据,因为你不可能在未知的接收数据后面加一个特殊的标识符。
  2. 通过设置定时器来强制结束接收过程。
    例如设置一个10ms的定时,当定时器溢出时,强制退出接收过程。一般来说接收不定长的数据这种方法是可以用的,但缺点是当接受未知长度数据时,该方法就显得很鸡肋,设置多长时间的定时才能够完整接收全部数据呢?难道对于不同的数据长度还要i计算不同的时长?
  3. 通过设置IDLE中断来确定一帧数据接收完成。
    这个方法也是我所使用和推荐的方法。STM32L4系列是有IDLE功能的,但是它的库函数里边没有写上这个中断的判断函数,需要我们自己加上(在下文会有叙述)。一帧数据是由许多个字节所组成的,对于字节的接收需要用到RXNE这个接收中断。接收到一个字节后,将在中断函数HAL_UART_RxCpltCallback中进行相应处理。接收完一帧数据后,将在中断函数HAL_UART_IdleCpltCallback中进行相应处理。这样,一帧数据就接收完了,下面是具体细节。

详细步骤<

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值