HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, Number);意思是接收到Number個字節后,觸發HAL_UART_RxCpltCallback,沒收滿是不會觸發的。而且HAL_UART_Receive_IT是一次性的,觸發完后需要時要再調用一下。條件允許的話,用DMA+空閑中斷實現不定長接收。
所以在接收處理函數中寫成這樣:
/**
* 函數功能: 串口接收完成回調函數
* 輸入參數: 無
* 返 回 值: 無
* 說 明:無
*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
AddReceivedUartDataNoCode(aRxBuffer&0x00ff,&g_UartRecBuff[0]);
HAL_UART_Receive_IT(&huart1,&aRxBuffer,1);
}
當然,要想進入這個中斷,第一次配置串口完成后,在主函數的While(1)前面也要加上HAL_UART_Receive_IT(&huart1,&aRxBuffer,1);
意思是開啟接收中斷,只接收1個字節放到aRxBuffer,接收完就進入上面那個中斷回調。