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