(STM32基础)DMA直接存储器存取

 

 Direct Memory Access可以直接访问STM32内部存储器,包括运存SRAM(存储变量数组)、程序储存器FLASH(存储程序)和寄存器等。

提供外设和存储器,一般是外设的DR(date register)数据寄存器。

外设-存储 器一般使用硬件触发,每个DMA通道的硬件触发源不一样,要传递数据的话必须使用对应的连接通道,不可以随意选择通道。

存储器-存储器一般使用软件触发 

计算机五大组成部分:运算器、控制器、存储器、输入设备和输出设备

内核外设寄存器和外设寄存器不是一个厂商,所以地址分隔开了。

32位STM32存储器最高可寻址4GB内存,一个地址可对应一个字节。

内核外设寄存器包含内核外设NVIC和Systick。

 左侧是主动单元 拥有存储器访问权,右侧的被动单元存储器只能被主动单元读写

仲裁器是用来防止多通道同时转运数据冲突,根据优先级来配置通道分时复用DMA-总线。同时,总线上也有一个仲裁器,如果DMA和CPU要访问同一个设备,DMA会暂停CPU的访问,防止冲突,不过仍然会保证CPU有一半的总线带宽,确保CPU继续正常工作。

AHB从设备,因为DMA也是一种挂载在AHB总线上的外设,所以也有其对应的寄存器来配置。CPU通过总线来对DMA进行配置。DMA既是总线上的主动单元,可以读取存储器,又是AHB上的被动单元。

注意:如果DMA通过总线访问FLASH,它是只读不可写入的,想要写入数据,就会出错。FLASH写入方式,要配置FLASH接口控制器按页擦除,再写入。

SRAM是运行内存可以随意读写。

外设的寄存器有的是只读,有的是只写,具体需要看参考手册里面的寄存器描述。使用数据寄存器的话,是可以正常读读写。

转运的实现结构。 

传输技术器是一个倒计时的计数器,比如设置参数是5,就会从5开始自减到0,转运五次。

存储器-存储器一般使用软件触发,因为软件触发会尽可能快的将传输计数器的值清0。不和自动重装器同时使用,因为这样的话DMA就停不下来了。

如果传输计数器的值到0,且自动重装器没有开启,无论软硬件触发源是否有触发信号,DMA都不会转运。此时,如果想要更改传输计数器的值,需要通过开关控制先关闭DMA,再给传输计数器写入一个大于0的数,重新开启DMA。 这是规定!!!!

 关于数据宽度,如果源端宽度等于目标宽度,则正常写入;如果源端宽度大于目标宽度,则舍去源端数据的高位,只把符合目标端宽度的低位发送过去。如果源端宽度小于目标宽度,则目标端的数据高位补0,低位是源端数据。

 这是一种复制转运的过程,源端数据不会消失。 

在扫描模式下,虽然没有单个通道的转换完成标志位,或者中断来触发DMA转运数据,但是通过试验可以发现,DMA会及时转运走转换完成的数据,所以转完成会触发DMA转运请求,触发转运。

ADC必须手动触发一次,才能开始转换,无论是多次转换还是单次转换,DMA配置成硬件触发模式则不需要手动触发,会自动转运ADC1_DR寄存器里面的值。

ADC的数据寄存器,每次转换完会覆盖原来的数据,所以ADC和DMA是非常密不可分的合作伙伴。 

补充:Coretex-M3存储器包括两个位段区(也叫位带),这两个位段区将别名存储器区(也叫位段别名区)当中的每一个字映射到位段存储器区的每一个位,操作别名存储器区的每个字和操作映射的那个位段存储器的那一位,是一样的效果。因为STM32是32位的,一次性操作32位速度最快,效率最高,一个字是32位,所以一般都是操作别名存储器区来替代操作位段的位。

补充:

全局变量有常量和变量之分,普通变量作为临时数据存储在SRAM当中,前面加const则定义的是一个存储在FLASH当中的只读常量。但是定义在main函数内的变量没有这个区别,都是在SRAM当中。

使用const的情况:需要存储很大列的数组,例如字库,之类的数据量较大的不需要更改的常量时,可以用const关键字,节省SRAM的空间。

变量和常量地址都是由编译器确定的,不同的程序地址不一样,是不固定的。

外设寄存器的地址是固定的,手册可以查到,程序内也可以用结构体非常方便访问。

STM32的硬件一大自动化特色:

各个外设之间可以相互触发,形成网状结构,节省软件资源,减少CPU负担,硬件自动化完成所需功能。

例如:

定时器的主从触发模式可以通向ADC、DAC或者其他定时器。

ADC的触发源可以是来自定时器或外部中断

DMA的触发源可以是来自ADC、定时器、串口等。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值