C1460 2022-02-09 15:36 采纳率: 100%
浏览 997
已结题

stm32串口如何连续接收帧数据并提取所需数据

如下图所示为设备通信指令解析

img

当发送启动测距指令“01 10 00 28 00 01 02 00 04 A1 BB”之后,设备开始启动测距,并不断发送测距数据。

接收到的数据如下图所示

img

当发送“01 10 00 28 00 01 02 00 04 A1 BB”后
设备会发送一次回复指令和n次测距数据直到收到停止命令 ,窗口助手接收到回复指令“01 10 00 28 00 01 81 C1”,然后就不断地发送测距数据帧 总共有47个字节,每个字符的含义在第一张图的数据解析。我想取出数据帧中的 第15个字节和第17个字节,也就是A基站和B基站的测量数据。

串口接收数据格式为 “一次回复指令+n次测距数据帧”

我使用了中断和IDLE中断,结合判断帧头为 “01 03 2A”的方法没能成功,请教各位实现。

  • 写回答

1条回答 默认 最新

  • 心跳包 2021年博客之星嵌入式领域TOP1 2022-02-09 16:18
    关注

    1.首先确定你的板子收到了串口数据,从串口工具来看,是收到了。
    2.每次发送了测距指令之后,就开始判断是否接收到“01 10 00 28 00 01 81 C1,一个字节一个字节比对。全部正确后,再开始把剩下的所有数据导入你的解析函数
    3.这个时候你应该可以拿到剩下的数据字节数的,除以47,就是你收到了n次测距数据,如果n不是整数,说明是串口接收的后面不是完整帧。
    4.假设n是整数,那么你就可以一个帧一一个帧判断了。再开始判断到“01 03 2A ,这个三个字节没问题,就去判断CRC 就是第46个字节和第47个字节是否正确,正确的话,就去14 15 16 17。然后把它存到一个数组里面,接下来就kiss第二个帧同样的道理。只有一个条件不满足就丢弃,去判断下一帧,第N帧提前成功后,你就可以发送01 10 00 28 00 01 02 00 04 A1 BB。
    5.重复上面的操作。
    注意,串口打印出来了数据,但是你的程序没有完整拿到全部数据,可以适当的加合适的延时。
    (可以多加点打印,可以优化你的打印,不用HEX,代码里面转换为字符串打印等等。)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月17日
  • 已采纳回答 2月9日
  • 创建了问题 2月9日

悬赏问题

  • ¥15 如何删除这个虚拟音频
  • ¥50 hyper默认的default switch
  • ¥15 网站打不开,提示502 Bad Gateway
  • ¥20 基于MATLAB的绝热压缩空气储能系统代码咨询
  • ¥15 R语言建立随机森林模型出现的问题
  • ¥20 unity内置语言切换的按钮设置
  • ¥15 中级微观经济学,生产可能性边界问题
  • ¥15 TCP传输时不同网卡传输用时差异过大
  • ¥15 请各位看看我写的属于什么算法,或者有更正确的写法?
  • ¥15 html5 qrcode 扫描器