此項目源碼下載地址:https://github.com/lizhiqiang0204/STM32CubeIDE_Uart
串口與中斷配置如下
在生成的main函數中,添加開啟串口接收中斷
HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ LED2(OFF); HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRx1Buffer, 1);//使能串口接收中斷 printf("************FreeRTOS********************\r\n"); /* USER CODE END 2 */
然后在接收中斷回調函數中寫接收過程
/* USER CODE BEGIN 4 */ /** * @brief Rx Transfer completed callbacks. * @param huart pointer to a UART_HandleTypeDef structure that contains * the configuration information for the specified UART module. * @retval None */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { /* Prevent unused argument(s) compilation warning */ UNUSED(huart); /* NOTE: This function Should not be modified, when the callback is needed, the HAL_UART_TxCpltCallback could be implemented in the user file */ if(huart->Instance == huart1.Instance) { if(bRx1_complete != 0) return; if(Uart1_Rx_Cnt >= 255) { Uart1_Rx_Cnt = 0; memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff)); } else { Uart1_RxBuff[Uart1_Rx_Cnt] = aRx1Buffer; Uart1_Rx_Cnt++; if((Uart1_RxBuff[Uart1_Rx_Cnt-1] == 0x0A)&&(Uart1_RxBuff[Uart1_Rx_Cnt-2] == 0x0D)) { Uart1_Rx_Cnt= 0; bRx1_complete = 0; } } } HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRx1Buffer, 1); } /* USER CODE END 4 */
調試結果如下: