UART的可能性会导致数据丢失吗?

2019-07-14 17:30发布

在很多使用STM32,HAL的例子中,通过中断接收UART数据,代码如下所示:最初(开始接收):
  1. <font size="4">HAL_UART_Receive_IT(&huart1, Rx_data, 1); </font>
复制代码

中断接收完成后:
  1. <font size="4">//Interrupt callback routine
  2. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)  
  3. {
  4.     ...
  5.     HAL_UART_Receive_IT(&huart, Rx_data, 1);            
  6. }</font>
复制代码我想知道,是否有可能在实际接收和再次启动中断的(接收完成)回调之后丢失字节。或者假设上面的中断处理程序太短,数据仍然在UART缓冲区中?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
Lucia_nie
1楼-- · 2019-07-15 01:17
 精彩回答 2  元偷偷看……
tutu304725938
2楼-- · 2019-07-15 04:27
除非您使用UART进行流量控制,否则理论上可能会比处理数据更快地到达。但是,接收UART上的下一个字节需要一些时间。DMA可能比中断成本更低,也可以使用环形缓冲区。
kingnet_520888
3楼-- · 2019-07-15 09:04
UART的RTS / CTS与16字节Rx缓冲器之间的H / W流控制旨在防止溢出。但是,在流量控制延迟太长的情况下,包括奇偶校验以提高信号完整性很有用。

当通过软件重试或数据过滤要求低错误率或在嘈杂环境中测试最大数据速率时,启用奇偶校验非常有用。

检查也是有益的; 停止位错误,缓冲区溢出错误并使用模拟环境噪声进行测试。(ESD,RF脉冲,SMPS CM噪声等缺少接地等)
Lucia_nie
4楼-- · 2019-07-15 12:47
非常感谢,我正在使用MIDI,因此无法更改奇偶校验(关闭)或停止位。对于ESD,我有铁氧体磁珠,我没有RF脉冲的经验,SMPS CM噪声和接地是通过MIDI连接器的默认引脚)。
huangdajiang
5楼-- · 2019-07-15 15:21
中断驱动的UART通信可能使用寄存器大约50-60行代码。HAL是一个巨大的黑洞 - 谁知道里面是什么?
对于MIDI,你没有太多的选择,但一般来说,在每个数据包的末尾都有一些带CRC的协议是很好的(许多STM微处理器内置了CRC硬件)。
Lucia_nie
6楼-- · 2019-07-15 15:44
 精彩回答 2  元偷偷看……

一周热门 更多>