【STM32+HAL】DMA应用

一、串口DMA收发

1、串口初始化

2、定义全局变量
#define RXBUFFERSIZE  256

uint8_t rx_buffer[RXBUFFERSIZE];//接收数组
volatile uint8_t rx_len = 0; //接收到的数据长度
volatile uint8_t recv_end_flag = 0; //接收结束标志位

3、开启IDLE中断以及串口DMA接收
  /* USER CODE BEGIN 2 */
	
	__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);    
	HAL_UART_Receive_DMA(&huart1,rx_buffer,RXBUFFERSIZE);	

  /* USER CODE END 2 */

4、stm32f4xx_it.c中补全回调函数
void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */

  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */
	uint8_t tmp_flag =__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE); //获取IDLE标志位
	if((tmp_flag != RESET))//通过标志位判断接收是否结束
	{ 
		recv_end_flag = 1; //置1表明接收结束
		__HAL_UART_CLEAR_IDLEFLAG(&huart1);//清除标志位
		HAL_UART_DMAStop(&huart1); 
		uint8_t temp=__HAL_DMA_GET_COUNTER(&hdma_usart1_rx);                 
		rx_len =RXBUFFERSIZE-temp; //计算出数据长度
		HAL_UART_Transmit_DMA(&huart1, rx_buffer,rx_len);//将受到的数据发送出去
		HAL_UART_Receive_DMA(&huart1,rx_buffer,RXBUFFERSIZE);//开启DMA接收,方便下一次接收数据
	}

  /* USER CODE END USART1_IRQn 1 */
}

5、串口DMA发送
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  HAL_UART_Transmit_DMA(&huart1,(uint8_t *)"Hello\r\n",sizeof("Hello\r\n"));
	  HAL_Delay(1);//等待发送完毕
	  HAL_UART_Transmit_DMA(&huart1,(uint8_t *)"World\r\n",sizeof("World\r\n"));
	  HAL_Delay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

原理参见:

串口DMA知识梳理以及在Stm32的应用(HAL库)

STM32 HAL CubeMX 串口IDLE接收空闲中断+DMA

源码提供:

STM32串口接收DMA HAL

二、OLED的显示(DMA)

详见【STM32+HAL】地表最强高刷OLED显示配置【I2C】

相关推荐

  1. STM32 中断应用概览

    2024-03-20 06:24:07       34 阅读
  2. STM32 微控制器应用领域

    2024-03-20 06:24:07       58 阅读
  3. GD32/STM32 CAN通讯配置及应用

    2024-03-20 06:24:07       45 阅读
  4. STM32 ST-LINK

    2024-03-20 06:24:07       78 阅读
  5. <span style='color:red;'>STM</span><span style='color:red;'>32</span>

    STM32

    2024-03-20 06:24:07      47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-20 06:24:07       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-20 06:24:07       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-20 06:24:07       87 阅读
  4. Python语言-面向对象

    2024-03-20 06:24:07       96 阅读

热门阅读

  1. opencv逐帧获取视频图片

    2024-03-20 06:24:07       48 阅读
  2. 尚硅谷数据库|视图/存储过程与函数/流程控制

    2024-03-20 06:24:07       37 阅读
  3. nginx日志统计qps

    2024-03-20 06:24:07       42 阅读
  4. 记一次Jenkins打包镜像报错问题

    2024-03-20 06:24:07       35 阅读
  5. 机器学习和大模型的关系,怎么入门

    2024-03-20 06:24:07       49 阅读
  6. ElementPlus布局出现“xx/index.vue“. Does the file exist?

    2024-03-20 06:24:07       45 阅读
  7. C++开发基础——可变参数与可变参数模板

    2024-03-20 06:24:07       36 阅读
  8. Django笔记

    2024-03-20 06:24:07       27 阅读
  9. 【Leetcode-189.轮转数组】

    2024-03-20 06:24:07       39 阅读
  10. 网络工程师练习题4

    2024-03-20 06:24:07       37 阅读