我目前正在为 univers
tiy 做一个项目,我对
STM32 还很陌生。
我的板上有一个通过 UART
通信的传感器,如果它每秒转储一次数据。我的问题是第一个 HAL_UART_RECEIVE 按预期工作,但之后它总是立即超时,似乎甚至在设置的超时结束之前。
我的 MCU 是 STM32WL55
我的代码是:
- /* USER CODE BEGIN Header */
- /**
- ******************************************************************************
- * 您可以在执行第二次接收(失败的接收)时检查 UART 实例的 ISR。可能寄存器中已经存在一些错误,导致无法正确处理接收。我在考虑 Overrun 标志(表示收到了一些数据但没有及时从 RDR 读取)。如果在第一次接收完成后接收到附加数据,则可能会发生这种情况。当这个标志被设置时(一些数据已经丢失),但是在错误被清除的情况下接收被冻结。
如果您遇到这种情况,您可以在重新启动第二次接收之前通过重置 ICR 中的标志来清除标志,例如使用专用宏:
__HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) 以 UART_CLEAR_OREF 作为标志。