串口发送功能:
uint8_t TxData[]= "01234abcde";
HAL_UART_Transmit(&huart2,TxData,,0xffff);//把TxData的内容通过uart2发送出去,长度是10,timeout的时间是最大值0xffff
串口接收功能1:
uint8_t value='F';
HAL_UART_Receive(&huart2,(uint8_t *)&value,,);//在这个语句停留1000ms内等待接收1个字节数据,把数据存放在value中
串口接收功能2:
HAL_UART_Receive_IT(&huart2,(uint8_t *)&value,);//程序不会在这个语句停留,直接会按照中断方式把接收数据存放在value中,但是这个语句只能使能一次串口中断。所以要在中断服务函数或者回调函数中重新使能
串口接收功能3:
if(HAL_UART_Receive_IT(&huart2,(uint8_t *)&value,) != HAL_OK){ //这一句写在main函数的while(1)上面。用于启动程序启动一次中断接收
HAL_UART_Transmit(&huart2, (uint8_t *)&"ERROR\r\n",,);
while();
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
HAL_UART_Transmit(&huart2, (uint8_t *)&"\r\ninto HAL_UART_RxCpltCallback\r\n",,0xffff); //验证进入这个函数了
HAL_UART_Transmit(&huart2,(uint8_t *)&value,,0xffff); //把接收到的数据通过串口发送出去
HAL_UART_Receive_IT(&huart2,(uint8_t *)&value,); //重新打开串口中断
}
串口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)-) != 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)-);//可以通过DMA把数据发出去 HAL_UART_Receive_DMA(&huart2, (uint8_t *)rxData, sizeof(rxData)-); //重新使能接收
}
main函数while(1)中不断输出rxData值
HAL_UART_Transmit_DMA(&huart2,rxData,sizeof(rxData)-);//可以通过DMA把数据发出去