stm32串口收发数据为什么使用dma?

发布网友 发布时间:2024-10-24 15:28

我来回答

1个回答

热心网友 时间:2024-11-14 15:16

声明:学习笔记根据b站江科大自化协stm32入门教程编辑,仅供学习交流使用!



前言



本次学习共有两个程序。第一个为DMA数据转运,使用DMA进行存储器到存储器的数据转运,即把一个数组里的数据复制到另一个数组里。 第二个为DMA+AD多通道,



一、DMA简介



1.概述

1、DMA(Direct Memory Access)直接存储器存取或访问。从名字看,DMA这个外设可以直接访问STM32内部的存储器,包括运行内存SRAM、程序存储器Flash和寄存器等等。



2.存储器映像

计算机系统的五大组成部分是运算器、控制器、存储器、输入设备和输出设备,其中运算器和控制器一般会合在一起叫CPU,所以计算机核心就是CPU和存储器。存储器有两个知识点,一是存储器的内容,另一个是存储器的地址,STM32同理。



3.图示详解(1)DMA框图(辅助理解,未显示出具体工作流程)

主动单元,内核有DCode和系统(总线),可以访问右边的存储器,其中DCode专门访问Flash的,系统(总线)可以访问其他东西。DMA(Cortex-M3内核下面的DMA1和DMA2)也要有访问的主动权,所以另一个主动单元为DMA总线。AHB从设备用于配置DMA,DMA既是总线矩阵的主动单元,可读写各种寄存器,也是AHB总线上的被动单元,CPU通过线路可对DMA进行配置。



4.细节部分1.DMA请求

DMA请求即DMA触发,每个通道都有数据选择器选择软件触发还是硬件触发,软件触发执行逻辑是以最快的速度连续触发DMA,硬件触发源可选择ADC、串口、定时器等。



5.细节部分2.数据宽度与对齐

如果数据宽度不同,小的数据转到大的里面高位补零,大的数据转到小的里面高位舍去。



二、实操案例



1.数据转运+DMA

任务目标:将SRAM里的数组DataA转运到另一个数组DataB中,起始地址为DataA数组的首地址,目的地址为DataB数组的首地址,数据宽度为8位字节传输,两边地址都需要设置自增。



2.ADC扫描模式+DMA

ADC扫描模式的执行流程,7个通道,每次单独通道转换后做一次DMA数据转运,并且存储器地址自增解决数据覆盖问题。配置为:外设地址写入ADC_DR这个寄存器的地址,存储器地址为SRAM中定义的一个数组ADValue,数据宽度为16位的半字传输,地址自增,存储器地址自增,传输方向为外设站点到存储器站点,传输计数器为7次。触发选择为ADC的硬件触发。



总结



使用DMA进行数据传输,可以提高效率,节省CPU资源。在实际编程中,应根据具体需求选择合适的DMA配置和触发方式。DMA与ADC结合使用时,可以有效解决数据覆盖问题,提高程序运行效率。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com