HAL UART发送接收死锁

2019-07-14 14:51发布

STM32F105S使用中断接收,触发UART_Receive_IT()中的   ......

   if(--huart->RxXferCount == 0)
    {
      __HAL_UART_DISABLE_IT(huart, UART_IT_RXNE);

      /* Check if a transmit process is ongoing or not */
      if(huart->State == HAL_UART_STATE_BUSY_TX_RX)
      {
        huart->State = HAL_UART_STATE_BUSY_TX;
      }
      else
      {
        /* Disable the UART Parity Error Interrupt */
        __HAL_UART_DISABLE_IT(huart, UART_IT_PE);

        /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */
        __HAL_UART_DISABLE_IT(huart, UART_IT_ERR);

       huart->State = HAL_UART_STATE_READY;
      }
      HAL_UART_RxCpltCallback(huart);


      ......

     进入HAL_UART_RxCpltCallback(huart);后,判断huart->State 尽然不是上面的2个中的一个,然后返回HAL_BUSY状态,导致死锁


    请问哪位遇到过这种情况吗?请指点下,系统使用了FREERTOS.


    现象:
    串口发送(没用中断发送),---->有接收,又触发发送,导致死锁
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
13条回答
rstech_rd
2019-07-15 00:49
7762642422d 发表于 2019-1-2 17:22
你这不是CUBE导致的“死锁”,而是RTOS线程之间没有同步好导致的。
不能靠应用级别的标识来判断线程之间的同步和运行,而是要靠RTOS自身的信号量、事件等等来判断和同步线程。
你可以不用RTOS测试下,先保证应用可用,再调RTOS吧。 ...

感谢回复,!~~~~
当前UART中断确实不是RTOS的,但是相对于来说比RTOS的中断级别要优先吧?
从当前的现在来看就是进入串口中断后,还是触发了串口发送,这个可能是RTOS引起的,因为这个中断接收串口里面没有LOCK,导致可以串口继续发送

一周热门 更多>