STM32+UART串口+DMA收发

简介: STM32+UART串口+DMA收发

1、cubemax端配置

1.1 初始化配置

首先通过STM32cubemax进行基础配置:

cubemax基础配置

1.2 GPIO配置

通过一个LED小灯(高电平有效)来观察效果,对PB0引脚进行GPIO配置,如下图所示:



1.3 UART配置

1.3.1 串口基础配置



1.3.2 DMA配置

首先对RX进行配置,如下图所示:



接着对TX进行配置(默认就行),如下图所示:



2、keil端代码设计

2.1 初始化配置

首先在主函数上方进行发送、接收数组设置,如下图所示:



uint8_t tx[] = "TX ok";
uint8_t Rx[2]; 

2.2 DMA接收初始化配置



HAL_UART_Receive_DMA(&huart1,Rx,sizeof(Rx));

2.3 DMA发送配置



HAL_UART_Transmit_DMA(&huart1,tx,sizeof(tx));
HAL_Delay(1000);

2.4 接收回调函数设置

首先找到HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)函数,如下图所示:



接着将函数按下图所示复制到主函数上方:



void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(huart);
  /* NOTE: This function should not be modified, when the callback is needed,
           the HAL_UART_RxCpltCallback could be implemented in the user file
   */
}

2.5 回调函数内容代码编写

2.5.1 接收回调函数

//接收到数据 LED小灯电平翻转



void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  if(huart1.Instance == USART1)
  {
    HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
  }
}

2.5.2 发送回调函数

将接收回调函数中R改成T即可实现发送回调函数功能。如下图所示:



当有数据发送,回调函数进行工作,如下图所示:



uint8_t tx2[] = "TX_IT ok";
//发送回调函数
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
  if(huart1.Instance == USART1)
  {
    HAL_UART_Transmit_DMA(&huart1,tx,sizeof(tx2));
  }
}

2.6 回调函数内容代码优化

当在回调函数中添加延时后,会发现程序卡死,因此需要对NVIC进行配置,如下图所示:


 

相关文章
|
5月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
788 0
|
1月前
|
存储 数据管理 数据处理
处理STM32 DMA方式下的HAL_UART_ERROR_ORE错误
通过正确配置UART和DMA、实现有效的错误处理回调函数以及优化数据处理和缓冲区管理,可以有效处理STM32中DMA方式下的 `HAL_UART_ERROR_ORE`错误。这些方法确保了数据的高效传输和处理,避免了因数据溢出导致的通信中断和数据丢失。希望这些解决方案能够帮助您在实际应用中更好地应对和解决此类问题。
212 0
|
7月前
|
传感器
STM32标准库ADC和DMA知识点总结-1
STM32标准库ADC和DMA知识点总结
|
5月前
STM32CubeMX 串口收发一帧数据
STM32CubeMX 串口收发一帧数据
65 9
|
5月前
|
芯片
STM32CubeMX 串口数据收发
STM32CubeMX 串口数据收发
182 2
|
5月前
|
监控
stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)
stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)
417 0
|
5月前
stm32f407探索者开发板(十六)——串行通信原理讲解-UART
stm32f407探索者开发板(十六)——串行通信原理讲解-UART
314 0
|
5月前
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
207 0