HAL库完成STM32F103以DMA方式实现的连续发送

一.DMA

概念

STM32的DMA控制器特点

DMA数据传输方式

串口DMA发送函数:HAL_UART_Transmit_DMA

二.STM32F103C8T6以DMA方式实现连续发送

CubeMX

RCC设置外部高速时钟HSE 选择外部时钟源

设置串口

在NVIC Settings中使能中断

DMA设置

生成代码

在main.c中添加代码:

/* USER CODE BEGIN Init */
  uint8_t Senbuff[] = "HELLO WORLD!!!";  //定义数据发送数组
  /* USER CODE END Init */

在while循环中添加代码:

while (1)
  {
          
   
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_UART_Transmit_DMA(&huart1, (uint8_t *)Senbuff, sizeof(Senbuff)-1);  //串口发送Senbuff数组
	  HAL_Delay(1000);
  }
  /* USER CODE END 3 */
}

如果不开启中断,程序只能发送一次数据,程序无法判断DMA传输是否完成。

运行调试:

三.总结

DMA方式是一种完全由硬件进行组信息传送的控制方式,具有中断方式的优点,即在数据准备阶段,CPU与外设并行工作。

经验分享 程序员 微信小程序 职场和发展