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

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日

悬赏问题

  • ¥30 vb net 使用 sendMessage 如何输入鼠标坐标
  • ¥200 求能开发抖音自动回复卡片的软件
  • ¥15 关于freesurfer使用freeview可视化的问题
  • ¥100 谁能在荣耀自带系统MagicOS版本下,隐藏手机桌面图标?
  • ¥15 求SC-LIWC词典!
  • ¥20 有关esp8266连接阿里云
  • ¥15 C# 调用Bartender打印机打印
  • ¥15 我这个代码哪里有问题 acm 平台上显示错误 90%,我自己运行好像没什么问题
  • ¥50 C#编程中使用printDocument类实现文字排版打印问题
  • ¥15 找会编程的帅哥美女 可以用MATLAB里面的simulink编程,用Keil5编也可以。