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进行配置,如下图所示:


 

相关文章
|
6天前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
|
2月前
|
传感器
|
2天前
STM32CubeMX 串口收发一帧数据
STM32CubeMX 串口收发一帧数据
19 9
|
2天前
|
芯片
STM32CubeMX 串口数据收发
STM32CubeMX 串口数据收发
11 2
|
6天前
|
监控
stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)
stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)
|
6天前
stm32f407探索者开发板(十六)——串行通信原理讲解-UART
stm32f407探索者开发板(十六)——串行通信原理讲解-UART
|
10天前
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
|
2月前
|
存储 缓存 芯片
STM32--USART串口
STM32--USART串口