问题现象:STM32L432单片机MCU程序串口1,接收中断方式,发送采用查询方式。当使用SSCOM定时发送数据给MCU时,正常情况下,MCU收到什么就会回什么数据。如果使用100ms发送,MCU长时间测试都正常。如果使用1ms或者5ms发送数据给MCU,会出现MCU出现异常,MCU无法再接收到数据,接收中断也进不去。发送数据也无效。通过设置断点,发现接收中断设置不成功的原因是gState值HAL_UART_STATE_BUSY_TX,正常的时候应该是HAL_UART_STATE_READY。
问题原因:串口溢出中断(ORE),导致程序进步了接收中断
解决办法:(贴代码如下)
/**
* @brief Rx Transfer completed callback
* @param UartHandle: UART handle
* @note This example shows a simple way to report end of DMA Rx transfer, and
* you can add your own implementation.
* @retval None
*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
HAL_StatusTypeDef ret = 0;
/* Set transmission flag: transfer complete */
if(UartHandle->Instance==USART1)
{
ring_queue_in(&uart_ring_queue, (queue_type_point)&gRxBuffer, 1, RQ_OPTIO