在用華大單片機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)),而它已經發生了錯誤永遠都不可能成功發送了。