【STM32F1标准库】理论——DMA数据转运

发布于:2025-05-07 ⋅ 阅读:(20) ⋅ 点赞:(0)

目录

一、简介

1.DMA可以直接访问STM32内部的存储器

2.DMA每进行一种数据转运都需要占用一个自身的转运通道

3.每个通道都支持软件触发和特定的硬件触发

        1.每个通道的硬件触发源都不同,具体查表

        2.外设数据产生有一定的时机,需要使用硬件触发特定的DMA通道

4.DMA能进行数据转运条件

二、DMA数据转运例子

1.软件例子

2.硬件例子

三、杂谈

1.计算机的五大组成部分

2.STM32F1存储器映像

3.数据转运中的数据对齐问题

4.DMA和CPU同时访问相同地址问题


一、简介

1.DMA可以直接访问STM32内部的存储器

        如运行内存SRAM,

        程序存储器Flash,(普通变量被const修饰就会存储在Flash中)

        各种芯片外设的数据寄存器(如ADC数据寄存器,串口数据寄存器等)

由此实现外设寄存器和存储器、存储器和存储器之间的数据转运

即从某个地址取出数据,再存到另一个地址去,如果数据宽度不一致则需要数据对齐

2.DMA每进行一种数据转运都需要占用一个自身的转运通道

        STM32F1资源  

        DMA1: 7通道

  所有通道分时复用DMA总线,需要仲裁器仲裁

3.每个通道都支持软件触发和特定的硬件触发

        1.每个通道的硬件触发源都不同,具体查表

        2.外设数据产生有一定的时机,需要使用硬件触发特定的DMA通道

            软件触发例子:存储器到存储器(SRAM<——>Flash),一股脑以最快速度全部转运完成

            硬件触发例子:外设到存储器(ADC数据转运),

                                     等待ADC每个通道转换完成后硬件触发一次DMA才进行数据的转运

        

4.DMA能进行数据转运条件

    1.DMA使能

    2.传输计数器大于0

    3.有触发信号

       注意:对传输计数器写值必须先关闭DMA使能

二、DMA数据转运例子

1.软件例子

        数据数据的转运:一对一的转运

2.硬件例子

    将外设ADC_DR寄存器中的数据转运到数组中

    每个ADC通道采集完成后触发DMA转运ADC_DR寄存器中的数据

    通道2采集完成——>   存入ADC_DR                     ——>   硬件触发DMA将其运走至ADValue[0]

    通道5采集完成——>   存入ADC_DR,覆盖前一个数据——>   触发DMA将其运走至ADValue[1]

    通道4采集完成——>   存入ADC_DR,覆盖前一个数据——>   触发DMA将其运走至ADValue[2]

       ……

        如果ADC为连续扫描模式,DMA计数器需要自动重装

三、杂谈

1.计算机的五大组成部分

        运算器

        控制器

        存储器

        输入设备

        输出设备

        运算器 + 控制器 = CPU

2.STM32F1存储器映像

        ROM:只读存储器,掉电不丢失

                     程序存储器Flash:存储C语言编译后的程序代码                          地址:0x0800 0000

                     系统存储器:         存储Bootloader                                                         0x1FFF F000

                     选项字节:             存储一些独立于程序代码的参数配置                        0x1FFF F800

        RAM:随机存储器,掉电丢失

                    运行内存SRAM:存储运行过程中的临时变量,各种变量、数组等          0x2000 0000

                    外设寄存器:       存储各个外设的配置参数                                              0x4000 0000

                    内核外设寄存器:存储内核外设各个外设的配置参数,NVIC等               0xE000 0000

        STM中拥有对存储器访问权限的角色

                内核Dcode:只访问Flash

                内核系统总线:访问各类存储器,包括DMA的寄存器

                DMA总线:访问各类存储器

3.数据转运中的数据对齐问题

        源端和目的端数据宽度一致,直接转运

        源端数据宽度 小于 目的端数据宽度,目的端高位补0

        源端数据宽度 大于 目的端数据宽度,源端高位数据舍去

4.DMA和CPU同时访问相同地址问题

        DMA会暂停CPU的访问,但仲裁器仍保证CPU至少可以获得一半的总线带宽

     ( 倒反天罡 Σ(;゚д゚) )

        

                

        


网站公告

今日签到

点亮在社区的每一天
去签到