完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
背景:
小弟最近在用103C8处理一个串口的通信问题,需要在200ms以内的时间区间上不断接受并处理均次约200字节的上位机数据,并反馈上位机接受结果(逻辑流水位 + OK or ER)。 数据格式: 逻辑流水位:若干数据项[parm=value&parm=value][结束标志] 作了简单的测试,如果使用HAL库的HAL_UART_Receive处理,当字符超过250字节后,频率达到150ms后会死机,应该是过载了。 我大概有一个方案: 1:Receive依旧是中断触发,批量接受的方式,不过改写一下HAL库的接受过程。逐字识别出几个关键字的index,放在数组里即可,不再进一步处理。 2:之后对数据内容的识别、配对、计算、反馈异步放在中断外面,用两套buffer应对。 /////////////我的问题////////////// 1:我的方案可行否? 2:关于HAL_UART_Receive函数的while部分逻辑有疑问,想咨询一下大家。 2-1:以下摘取了HAL_UART_Receive 函数部分主干代码,重点展示while部分
2-2:我的疑惑是建立在批量读取数据的基础上,即——如何保证每次恰好都能接到正确的数据? 按照波特率115200在PCLK1为源的情况下,我记得好像是几百K的频率,可MCU的主频72MHz,远大于传输频率。 按我的理解这里的while会在MCU的频率下持续执行,如果是这样的话,串口接受到的数据除了正确的数据外,应该会有大量空数据。但是实际上没有这些空数据,有人可以帮我解释一下原因吗? |
|
相关推荐
2个回答
|
|
|
仔细看了一下函数UART_WaitOnFlagUntilTimeout做的就是这个等待的动作。它会持续等到需要的标志位出现,除非超时。
|
|
|
|
|
|
代理稀缺电子料QQ:1453177745
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
2961 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
2463 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2331 浏览 0 评论
2455 浏览 1 评论
1674 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 11:40 , Processed in 0.610314 second(s), Total 77, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1266