【发布时间】:2015-08-26 00:58:09
【问题描述】:
我正在尝试使用 DMA 与 UART 外设进行 RX 和 TX 通信。 我正在使用 ST 提供的 HAL 库(使用 STCubeMX 生成)。
我正在处理一个 1.5MBaud 的 UART 通道 - 所以为了不丢失任何数据,我将 DMA 配置为直接模式,带有循环缓冲区,并处理半传输中断以处理数据,并保持 DMA 在线以获取更多数据。
问题是有时我可以在 UART 的状态寄存器中看到 Frame Error 位打开,有时 Overrun Error 标志也打开。
我可以处理丢失的字节(在结构化数据包上使用 crc),但问题是外围设备停止接收数据 - 但 DMA 不会引发错误或停止传输。
因此,如果我尝试接收数据,而系统挂起的标志。
我看到 HAL 提供了一个应该处理 UART_Error 的 __weak 函数,但它从未被调用 - 并且 HAL 句柄中的状态保持正常。 只看寄存器就知道有问题了。
我应该如何检测/处理这些错误?
谢谢
【问题讨论】:
标签: embedded microcontroller uart dma stm32f4discovery