串口接收不定长数据的解析问题

发表在 UART2019-12-6 14:49 [复制链接] 5 288

1.目前在做一个通过LoRa模块把传感器的数据经过LoRa网关向阿里云服务器上传数据并WEB可视化的项目,数据上行部分已经完成,目前实现的效果可以看这个连接:https://www.rt-thread.org/qa/thread-422826-1-1.html6 P. u, J: [. \0 {3 }
2.把传感器数据上传到阿里云服务器只是这个项目的一部分,获取阿里云平台下发的指令并响应更是重点,但是目前在做下行数据解析的时候遇到一些问题,还请大家帮忙解决。) e) P- |; v2 G  L9 b& w$ E; J
数据解析.png . t: M3 J' z* j) \2 _
3.如上图所示,整个的数据分为3部分:分别为LoRa模块发给MCU的信息,平台回复给MCU的信息,和平台下发的指令,可以看到这个LoRa模块并不像我们使用的ESP8266那样回复简单的OK或者错误码,而是有很多别的信息比如说信号强度等,我的目的就是想从这些不必要的信息中,提取关键的信息,比如OK+SEND=24  OK+SENT=1 OK+RECV:00,0a,08,0c0c0d0332085a0a,
% Z4 ^6 I# t5 _7 v# ^我尝试过通过判断消息的长度来区分消息,但是有问题,各位大神有没有更好的方法?
5 G4 V9 P$ n  y/ i7 u( u
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-12-7 15:31:57 | 显示全部楼层
不定长数据的话需要自己定义协议的,例如只接收 OK + 开头的数据,这些都是可以自己定义的
使用道具 举报 回复
发表于 2019-12-7 17:30:42 | 显示全部楼层
tyustli 发表于 2019-12-7 15:31
$ K6 Z5 d( ^% k+ q! v8 T不定长数据的话需要自己定义协议的,例如只接收 OK + 开头的数据,这些都是可以自己定义的 ...

8 ~0 A; J5 B! V, E" n1 ^我不能定义这个,数据都是自动发的,我改不了,只能想办法接收
使用道具 举报 回复
发表于 2019-12-9 19:50:40 | 显示全部楼层
tyustli 发表于 2019-12-7 15:31
; p# K, [" x, Q0 B不定长数据的话需要自己定义协议的,例如只接收 OK + 开头的数据,这些都是可以自己定义的 ...

& \% K9 G: D' G: G0 q, X前辈你说的这个具体怎么做啊,能详细的说一下吗?我被这个问题搞了两天了
使用道具 举报 回复
发表于 2019-12-16 10:25:48 | 显示全部楼层
本帖最后由 tyustli 于 2019-12-16 10:26 编辑 4 n; ]+ Z) Y/ D1 d+ E3 |# k0 |
coulson 发表于 2019-12-9 19:50' b5 o& v- `% n7 Y5 T6 i$ A! D2 ^
前辈你说的这个具体怎么做啊,能详细的说一下吗?我被这个问题搞了两天了  ...

2 x7 E9 v/ H7 z9 m3 m* w- \% ]比如第一个接受的数据是 O 就继续接收,不是就开始下一次接收,接收到 OK 后后面的才是真正的数据
使用道具 举报 回复
发表于 2019-12-16 10:53:50 | 显示全部楼层
用串口的空闲中断+串口的DMA接收,可以很完美的实现串口动态接收不定长数据。用这种方法我处理过2G模块和串口wifi的数据接收,还没出现问题过。
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表