STM32
直播中

李星童

7年用户 1061经验值
私信 关注
[问答]

求助,关于串口数据解析疑问求解

现在手上有一个串口模块要开发,比较复杂,

功能:接收各种类型不定长度的 字符串,然后解析做出反馈

字符串基本规格:
单条命令 : CMD(X,Y,'ABC或者中文字符不定长',W);
结束符号: rn

最终串口接收字符串是: 命令+结束符  ======》 CMD(X,Y,'ABC或者中文字符不定长',W); rn

特殊情况1:
有时是几条命令一起过来, 如: CMD(X,Y,'aaaa',W);CMD(X,Y,'bbb',W);CMD(X,Y,'啊啊啊啊',W); rn


特殊情况2:
发送端是不定时发送,可能突然发送连续两条
CMD(X,Y,'1111',W);

rn CMD(X,Y,'22222',W);rn

问题:

对于以上两种特殊情况,
1. 请问串口设置为中断模式 接收数据 可行么?
2. 串口中断的条件是什么? 比如一条
CMD(X,Y,'ggg',W);

rn  ,串口是收到 “C” 第一字符之后 就中断吗? 还是整句接收完才中断?

3. 中断后,串口还接收数据吗? 比如CMD(X,Y,'ggg',W); rn 发送过来,正在中断里面接收数据,此时又来一条,那么串口会不会继续接数据进来?


4. 接收数据时 是在串口中断中边接收 边解析好呢?  还是直接读空串口, 存在buffer, 到主程序 外面进行解析 好呢?

5. 是否需要 用DMA 方式进行接收?

6. 接收到数据之后,主程序 需要进行反馈(可能包括一些IO 操作,读取flash 等等),如果在此期间,串口又来数据了,但是不想被接收动作打断同时又能把数据 接过来,等这些反馈动作完成后, 再去分析这些数据(不错过它)  可能吗?如何实现?

回帖(1)

李颜

2024-4-29 15:02:57
可以分两种情况处理:
1,不考虑头尾只要来数据都接收存储,然后在慢慢分析接收到的数据。这种接收方式的话不用判断数据,用时间卡,比较只要串口中断进来就接收数据,并且开始计时,如果在指定时间内比如10ms内有数据进来,就计数器清零。如果计时器的值超过10ms,则认为本次串口接收数据结束。然后统一区分析处理接收到的数据。
2,根据协议通过头尾接收数据,如果接收到C则标记准备接收数据,并且开始计数接收到1个字节,然后依次判断第2个字节是M,第3个字节是D,如果前三个字符是CMD则开始正式接收数据,将接收到的数据存储起来,如果接收到了r 则标记准备结束,如果接收到n则标记结束完成。本次数据存储结束,清空所有标志位。然后置接收结束标志位,主程序判断接收结束后就去处理本次接收到的数据,然后中断中继续接收下一组数据。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分