1. 程式人生 > >STM32CubeMx配置USART注意的一個問題

STM32CubeMx配置USART注意的一個問題

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,接收完就進入上面那個中斷回撥。