ST意法半导体
直播中

王越建

7年用户 1442经验值
私信 关注
[问答]

HAL_UART_RECEIVE只接收一次,然后总是超时怎么处理?


我目前正在为 universtiy 做一个项目,我对 STM32 还很陌生。
我的板上有一个通过 UART 通信的传感器,如果它每秒转储一次数据。我的问题是第一个 HAL_UART_RECEIVE 按预期工作,但之后它总是立即超时,似乎甚至在设置的超时结束之前。
我的 MCU 是 STM32WL55
我的代码是:
  1. /* USER CODE BEGIN Header */
  2. /**
  3.   ******************************************************************************
  4.   *  

    您可以在执行第二次接收(失败的接收)时检查 UART 实例的 ISR。可能寄存器中已经存在一些错误,导致无法正确处理接收。我在考虑 Overrun 标志(表示收到了一些数据但没有及时从 RDR 读取)。如果在第一次接收完成后接收到附加数据,则可能会发生这种情况。当这个标志被设置时(一些数据已经丢失),但是在错误被清除的情况下接收被冻结。
    如果您遇到这种情况,您可以在重新启动第二次接收之前通过重置 ICR 中的标志来清除标志,例如使用专用宏:
    __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) 以 UART_CLEAR_OREF 作为标志。

更多回帖

×
20
完善资料,
赚取积分