STM32串口接收小結


STM32串口接收數據

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

 

 

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

 

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

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

 

以上兩個函數可以放在HAL_UART_MspInit()里面進行

 

4.使能串口接收中斷

HAL_UART_Receive_IT(&usart1_handler,rdula,1);

這個函數可以寫在主函數里面,因為在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是判斷這個基地址是不是串口一。

 

 

 

                                                                                           2019-09-06   21:52:36


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM