串口发送功能:
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 *)&"ERRORrn",7,10);
while(1);
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
HAL_UART_Transmit(&huart2, (uint8_t *)&"rninto HAL_UART_RxCpltCallbackrn",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[] = {"HelloWorldrn"};
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[] = {"rnin Callbackrn"};
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把数据发出去
总结:分轮询方式和中断方式。发送可以使用轮询方式进行,接收建议使用中断方式,如使用轮询方式,会占用系统工作内存过多的现象。
现在需要考虑的地方在于,回调函数放在哪里比较合适。
上一篇:[HAL库]STM32之DMA方式串口发送
下一篇:STM32CUBE HAL库 关于串口usart收发的一个问题
推荐阅读最新更新时间:2024-11-12 19:15
设计资源 培训 开发板 精华推荐
- LT3091HDE 正输出电流监视器的典型应用
- LT3477IFE 32V 至 6 个白光 LED、具有 PWM 调光的降压模式的典型应用电路
- FUSB301GEVB:具有超高速开关控制的自主 USB Type-CTM 控制器
- LTC3615IFE 双路 3A 同步降压型 DC/DC 转换器具有外部补偿的典型应用
- 【ART-Pi】基于ART-Pi的四路步进电机控制扩展板
- DVK-SFJK-1-GEVK:适用于 RCZ3 的 Sigfox™ AT 开发套件
- HC32f030E8PA单片机最小系统板
- LT1021DIN8-5 电压基准的典型应用,具有带电流限制的升压输出电流
- AD8532ARZ-REEL A 单电源、2 路有源分频器的典型应用
- 使用 LTC3637HMSE 36.5V 至 76V 输入至 36V 输出、1A 降压型稳压器的典型应用