完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
现在手上有一个串口模块要开发,比较复杂,
功能:接收各种类型不定长度的 字符串,然后解析做出反馈 字符串基本规格: 单条命令 : 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个回答
|
|
可以分两种情况处理:
1,不考虑头尾只要来数据都接收存储,然后在慢慢分析接收到的数据。这种接收方式的话不用判断数据,用时间卡,比较只要串口中断进来就接收数据,并且开始计时,如果在指定时间内比如10ms内有数据进来,就计数器清零。如果计时器的值超过10ms,则认为本次串口接收数据结束。然后统一区分析处理接收到的数据。 2,根据协议通过头尾接收数据,如果接收到C则标记准备接收数据,并且开始计数接收到1个字节,然后依次判断第2个字节是M,第3个字节是D,如果前三个字符是CMD则开始正式接收数据,将接收到的数据存储起来,如果接收到了r 则标记准备结束,如果接收到n则标记结束完成。本次数据存储结束,清空所有标志位。然后置接收结束标志位,主程序判断接收结束后就去处理本次接收到的数据,然后中断中继续接收下一组数据。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 20:15 , Processed in 0.672690 second(s), Total 50, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号