DMA (串口DMA发送接收)

目录

  • 一、DMA概述
    • 1.基本概念
    • 2.DMA控制器
    • 3.数据传输方式
  • 二、向上位机连续发送数据
    • 1.创建项目并配置
    • 2.添加代码
    • 3.烧录
    • 4.结果

一、DMA概述

1.基本概念

直接存储器访问 (Direct Memory Access) :用于在外设与存储器之间以及存储器与存储器之间进行高速数据传输。DMA传输过程的初始化和启动由CPU完成,传输过程由DMA控制器来执行,无需CPU参与,从而节省CPU资源,提高利用率。

DMA传输的四个要素:
传输源:DMA数据传输的来源
传输目标:DMA数据传输的目的
传输数量:DMA数据传输的数量
触发信号:启功一次DMA数据传输的动作

2.DMA控制器

STM32F411微控制器具备两个DMA控制器:DMA1和DMA2,每个控制器有8个数据流,每个数据流可以映射到8个通道(或请求);
2. 每一个DMA控制器用于管理一个或多个外设的存储器访问请求,并通过总线仲裁器来协调各个DMA请求的优先级;
3. 数据流(stream)是用于连接传输源和传输目标的数据通路,每个数据流可以配置为不同的传输源和传输目标,这些传输源和传输目标称为通道(Channel);
4. 具备16字节的FIFO。使能FIFO功能后,源数据先送入FIFO,达到FIFO的触发阈值后,再传送到目标地址。

DMA (串口DMA发送接收)_第1张图片

3.数据传输方式

普通模式
传输结束后(即要传输数据的数量达到零),将不再产生DMA操作。若开始新的DMA传输,需在关闭DMA通道情况下,重新启动DMA传输。
循环模式
可用于处理环形缓冲区和连续数据流(例如ADC扫描模式)。当激活循环模式后,每轮传输结束时,要传输的数据数量将自动用设置的初始值进行加载, 并继续响应DMA请求。

二、向上位机连续发送数据

1.创建项目并配置

1.设置RCC
DMA (串口DMA发送接收)_第2张图片

2.设置USART1
DMA (串口DMA发送接收)_第3张图片
3.创建项目
DMA (串口DMA发送接收)_第4张图片
然后点击generate code即可。

2.添加代码

DMA (串口DMA发送接收)_第5张图片
其中main函数代码修改为:

int main(void)
{

  HAL_Init();

	uint8_t message[] = "DMA communication test\n";  //定义数据发送数组

  SystemClock_Config();

  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART1_UART_Init();

  while (1)
  {
    HAL_UART_Transmit_DMA(&huart1, (uint8_t *)message, sizeof(message));
	  HAL_Delay(1000);
  }
}

然后编译即可,记得添加hex文件。

DMA (串口DMA发送接收)_第6张图片
编译成功,并生成hex文件

3.烧录

添加刚刚编译产生的hex文件,在清除芯片后开始编程
DMA (串口DMA发送接收)_第7张图片

4.结果

  • 打开野火调试助手
  • 打开串口
  • 自动发送数据
    DMA (串口DMA发送接收)_第8张图片

你可能感兴趣的:(单片机,stm32,嵌入式硬件)