爲什麼在串口接收中斷函數中打印數據(串口輸出數據)會導致出錯?

在用華大單片機HC32L110操作時,會出現標題所示的錯誤,下面是數據手冊中的一句話:

then,看下實際工程中的代碼(無關代碼已經刪除,保留關鍵代碼),串口配置爲接收中斷,輸出不用中斷方式

串口發送:

en_result_t Uart_SendData(uint8_t u8Idx, uint8_t u8Data)
{
    Uart_ClrStatus(u8Idx,UartTxEmpty);   //發送完成標誌位清零=FALSE
    pstcData->pstcInstance->SBUF =u8Data;//要發送的字節
    while(FALSE == Uart_GetStatus(u8Idx,UartTxEmpty))//等待發送完成,標誌位置位=TRUE
    {}

    Uart_ClrStatus(u8Idx,UartTxEmpty);  //發送完成標誌位清零=FALSE
    return Ok;
}

接收中斷函數:

void UART1_IRQHandler(void)
{
     
     Uart_ClrStatus(1,UartRxFull);//清除接收中斷
        UartRecvBuff[UartRecvWrite++] = M0P_UART1->SBUF;   //保存數據 

        Uart_SendData(UARTCH1,0x06);//在接收中斷後發送一個字節
}

主函數:

      while(1)
      {          
         Uart_SendData(UARTCH1,0x02);      
      }

軟件發生錯誤的過程:主函數發送一個字節時,還未完成就被中斷,跳轉到中斷函數,然後在接收中斷函數中又進行了一個字節的發送操作,就會導致出錯(如數據手冊所言,當一個發送字節還未完成時,又發送了一個字節),結果就是主函數一直在這裏等待數據發送成功while(FALSE == Uart_GetStatus(u8Idx,UartTxEmpty)),而它已經發生了錯誤永遠都不可能成功發送了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章