1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在很多使用STM32,HAL的例子中,通过中断接收UART数据,代码如下所示: 最初(开始接收):
中断接收完成后:
我想知道,是否有可能在实际接收和再次启动中断的(接收完成)回调之后丢失字节。 或者假设上面的中断处理程序太短,数据仍然在UART缓冲区中? |
|
相关推荐
9个回答
|
|
串行通信速度比代码执行速度慢几个数量级。因此,如果两者之间没有进行大量处理,您不必担心这一点。典型的UART通常具有一些FIFO缓冲区,因此如果在一个处理批次中遗漏了某些东西,它将在下一个处理批次中被拾取
|
|
|
|
但是我打算将它存储在环形缓冲区中,让主控制循环(在中断之外)处理它,在某些情况下可能需要更长时间。
|
|
|
|
除非您使用UART进行流量控制,否则理论上可能会比处理数据更快地到达。但是,接收UART上的下一个字节需要一些时间。DMA可能比中断成本更低,也可以使用环形缓冲区。
|
|
|
|
UART的RTS / CTS与16字节Rx缓冲器之间的H / W流控制旨在防止溢出。但是,在流量控制延迟太长的情况下,包括奇偶校验以提高信号完整性很有用。
当通过软件重试或数据过滤要求低错误率或在嘈杂环境中测试最大数据速率时,启用奇偶校验非常有用。 检查也是有益的; 停止位错误,缓冲区溢出错误并使用模拟环境噪声进行测试。(ESD,RF脉冲,SMPS CM噪声等缺少接地等) |
|
|
|
非常感谢,我正在使用MIDI,因此无法更改奇偶校验(关闭)或停止位。对于ESD,我有铁氧体磁珠,我没有RF脉冲的经验,SMPS CM噪声和接地是通过MIDI连接器的默认引脚)。
|
|
|
|
中断驱动的UART通信可能使用寄存器大约50-60行代码。HAL是一个巨大的黑洞 - 谁知道里面是什么?
对于MIDI,你没有太多的选择,但一般来说,在每个数据包的末尾都有一些带CRC的协议是很好的(许多STM微处理器内置了CRC硬件)。 |
|
|
|
据我所知,你可以直接浏览整个HAL代码,所以我认为这不是一个黑洞。我完全同意你的最后一部分。
|
|
|
|
但是如果你开始介绍一些更复杂的外围设备,你会发现代码有多糟糕 - “bin”图标开始是唯一可行的解决方案。IMO - 留下黑洞 - 做正确的uC编程。
|
|
|
|
问题是我对微处理器没有多少经验...只是使用STM32和Arduino(使用默认库,可能与你所谓的膨胀软件相同)。顺便说一句,我确信HAL库包含许多通用代码,这些代码可以在为特定目标制作代码时不需要。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2105 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1941 浏览 3 评论
4537 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2084 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2599 浏览 1 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 14:48 , Processed in 0.763467 second(s), Total 57, Slave 51 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号