STM32L0 HAL庫 UART 串口讀寫功能


串口發送功能:

uint8_t TxData[10]= "01234abcde";
HAL_UART_Transmit(&huart2,TxData,10,0xffff);//把TxData的內容通過uart2發送出去,長度是10,timeout的時間是最大值0xffff

串口接收功能1:

uint8_t value='F';
HAL_UART_Receive(&huart2,(uint8_t *)&value,1,1000);//在這個語句停留1000ms內等待接收1個字節數據,把數據存放在value中

串口接收功能2:

HAL_UART_Receive_IT(&huart2,(uint8_t *)&value,1);//程序不會在這個語句停留,直接會按照中斷方式把接收數據存放在value中,但是這個語句只能使能一次串口中斷。所以要在中斷服務函數或者回調函數中重新使能

串口接收功能3:

if(HAL_UART_Receive_IT(&huart2,(uint8_t *)&value,1) != HAL_OK){    //這一句寫在main函數的while(1)上面。用於啟動程序啟動一次中斷接收
        HAL_UART_Transmit(&huart2, (uint8_t *)&"ERROR\r\n",7,10);    
        while(1);
} 
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
    HAL_UART_Transmit(&huart2, (uint8_t *)&"\r\ninto HAL_UART_RxCpltCallback\r\n",32,0xffff);    //驗證進入這個函數了
    HAL_UART_Transmit(&huart2,(uint8_t *)&value,1,0xffff);      //把接收到的數據通過串口發送出去        
    HAL_UART_Receive_IT(&huart2,(uint8_t *)&value,1);        //重新打開串口中斷
}

串口DMA發送

DMA的TX要這樣設置

    uint8_t txData[] = {"HelloWorld\r\n"};
    HAL_UART_Transmit_DMA(&huart2,txData,sizeof(txData));//可以通過DMA把數據發出去

 DMA接收

if(HAL_UART_Receive_DMA(&huart2, (uint8_t *)rxData, sizeof(rxData)-1) != HAL_OK)//main函數while(1)前,啟動一次DMA接收
    {
        Error_Handler();
    }

 串口回調函數:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle){
    
    uint8_t temp[] = {"\r\nin Callback\r\n"};
    HAL_UART_Transmit_DMA(&huart2,temp,sizeof(temp)-1);//可以通過DMA把數據發出去
    
    HAL_UART_Receive_DMA(&huart2, (uint8_t *)rxData, sizeof(rxData)-1);    //重新使能接收    
}

 main函數while(1)中不斷輸出rxData值

HAL_UART_Transmit_DMA(&huart2,rxData,sizeof(rxData)-1);//可以通過DMA把數據發出去

 


免責聲明!

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



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