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把数据发出去

 

posted on 2015-09-13 10:58  神秘藏宝室  阅读(58256)  评论(0编辑  收藏  举报

 >>>转载请注明出处<<<