• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

stm32串口接受不等长数据的方法?

huihui163 2020-07-16 浏览量:804
stm32串口接受不等长数据的方法?那些最好?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 不等长数据即每次发送的数据帧长度不固定,对应单片机来说,就需要判断帧开始和帧结束,帧开始自动发送起始位,接收端也可以自动判断出帧起始。那么接下来对于发送端就是依次发送出要发送的数据(完整一帧数据),对于接收端,中间的数据很简单,接收到后保存就可以,最后什么时候结束,以及数据的长度,比较简单的办法是使用stm32 uart的空闲中断来判断帧结束,两个数据帧的发送之间必然是有时间间隔的,通过空闲中断可以去判断数据帧的结束。

    想要数据更加完整,可以参考modbus的协议,每个字节赋予不同的含义,在结束的时候增加数据校验字节,最后空闲中断后,把接收到的本次数据进行校验验证即可。

    • 发布于 2020-07-16
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:6
  • 如果是ascii字符可以用回车换行判断,如果是16进制的数据可以用超时检测机制判断,类似于mosbus协议的数据帧判断方式
    • 发布于2020-07-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 1.超时判断,类似于modbus协议;

    2.协议判断,增加帧头,通过帧头判断;

    • 发布于2020-07-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 目前最简单的方法就是用空闲中断,但空闲中断是STM32自带的一个功能,后面不好移植到别的硬件平台

    第二种方法是弄个定时器,然后设好定时器定时,超过这个时间没收到数据,就认为一帧数据已经结束

    • 发布于2020-07-17
    • 举报
    • 评论 0
    • 0
    • 0

  • stm32的不定长用空闲加DMA传送是最好的,不过要注意,要是发送方也是单片机的话,最好也是dma的方式发送,不然很容判定不是一帧了。
    • 发布于2020-07-17
    • 举报
    • 评论 0
    • 0
    • 0

  • 现在用的是超时判断,感觉还行。
    • 发布于2020-07-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 使用STM32自有的空闲中断;类似的做法就是自己设计一个超时判断,预设要接收较大长度的时间,超过这个时间就认为接收完了。
    • 发布于2020-07-18
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

stm32串口接受不等长数据的方法?