STM32串口接收小結

STM32串口接收數據

稍微理一下思路,一個數據從電腦發送到STM32,而後在從STM32返回到電腦顯示出來。函數

 

 

如上圖所示,發送(1所示的路線)前,STM32的淳口須要初始化的設置。包括:波特率,字長,硬件流,中止位,奇偶校驗位,模式(接收,發送,接收和發送),串口的基地址(Instance)。在初始化串口的函數裏面,須要調用到HAL_UART_MspInit(),這是一個虛函數(_weak),HAL_UART_MspInit()會調用到HAL_GPIO_Init(),把IO口進行配置。(模式,上下拉,速度,複用)spa

 

3.接收中斷優先級的配置

HAL_NVIC_EnableIRQ(USART1_IRQn);          //接收中斷使能 
HAL_NVIC_SetPriority(USART1_IRQn,2,2);    // 中斷優先級的配置 

 

以上兩個函數能夠放在HAL_UART_MspInit()裏面進行

code

 

4.使能串口接收中斷

HAL_UART_Receive_IT(&usart1_handler,rdula,1);

blog

這個函數能夠寫在主函數裏面,由於在uart.c的文件中是有的。同時能夠寫在串口配置函數的後面。回調函數

 

5.編寫中斷服務函數

/***中斷服務函數***/
void USART1_IRQHandler() { HAL_UART_IRQHandler(&usart1_handler);      //中斷處理函數

   HAL_UART_Receive_IT(&usart1_handler,rdula,1);//使能接收中斷。爲何放在這裏,由於是處理完中斷處理函數,而接受中斷關閉,不在處理相關的接收數據,爲了可以再次接收數據,能夠把接收中斷函數放在中斷服務函數逇裏面。
 }

 

6.編寫中斷回調函數

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { u8 temp; if(huart->Instance == USART1)            //判斷是否是串口一,要對串口一進行回調函數。
 { temp=*((huart->pRxBuffPtr)-1); HAL_UART_Transmit(&usart1_handler,&temp,1,1000); } }

 

上圖所示的代碼中,void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)是一個虛函數(_weak),因此須要從新定義。其中if是判斷這個基地址是否是串口一。it

 

 

 

                                                                                           2019-09-06   21:52:36io

相關文章
相關標籤/搜索