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与外设并行工作。
上一篇:
通过多线程提高代码的执行效率例子