打印
[STM32F1]

AT指令用rs232串口,但它的回复包中多个换行和回车,串口接收时如何判断接收完毕?

[复制链接]
2817|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
electronictech|  楼主 | 2021-6-19 16:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
例如:AT+?R这是一个读数据指令,其回复是?R\r\nACK\r\ndata1,data2...\r\n;格式大致是这样,其中回复的data有的指令有,有的指令里没有,即使有data的个数也不确定,这个在用串口接收时,程序应该如何写,如何判定数据包接收完毕

使用特权

评论回复
沙发
LcwSwust| | 2021-6-19 16:54 | 只看该作者
空闲中断用起来?

使用特权

评论回复
板凳
caoenq| | 2021-6-21 08:34 | 只看该作者
LcwSwust 发表于 2021-6-19 16:54
空闲中断用起来?

也不行,因为AT指令数据内容之前也不是连续的,误触发的概率很高

使用特权

评论回复
地板
LcwSwust| | 2021-6-21 08:37 | 只看该作者
本帖最后由 LcwSwust 于 2021-6-21 08:38 编辑
caoenq 发表于 2021-6-21 08:34
也不行,因为AT指令数据内容之前也不是连续的,误触发的概率很高

哦,那就用\r吧,串口收到的东西先放进数组,遇到\r就认为一帧结束,然后作处理,遇到\n则丢弃.

使用特权

评论回复
5
dalarang| | 2021-6-21 09:22 | 只看该作者
AT指令如果简单解析的话就以超时时间内捕获OK\r作为结束

使用特权

评论回复
6
weiwei4dk| | 2021-6-21 09:36 | 只看该作者
之间间隔大概多少?取一个时间,超过这个时间未再接收到有数据则超时,认为已经完成收数据,类似空闲的方法

使用特权

评论回复
7
electronictech|  楼主 | 2021-6-24 14:01 | 只看该作者
LcwSwust 发表于 2021-6-19 16:54
空闲中断用起来?

用了,同时也用了DMA

使用特权

评论回复
8
electronictech|  楼主 | 2021-6-24 14:02 | 只看该作者
caoenq 发表于 2021-6-21 08:34
也不行,因为AT指令数据内容之前也不是连续的,误触发的概率很高

我用的是查找字符串中的“\r\n”,如果接收到两个,说明是不带参数的回复包,如果接收到三个,这是带参数的回复包

使用特权

评论回复
9
electronictech|  楼主 | 2021-6-24 14:03 | 只看该作者
weiwei4dk 发表于 2021-6-21 09:36
之间间隔大概多少?取一个时间,超过这个时间未再接收到有数据则超时,认为已经完成收数据,类似空闲的方法 ...

用过超时,但似乎不太好,因为他的回复包的格式是不确定的

使用特权

评论回复
10
sadicy| | 2021-6-30 11:24 | 只看该作者
用一部分的话,就简单取巧,
全部AT指令的话,就老老实实的,都做好。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

27

帖子

0

粉丝