·DMA主要用于协助CPU完成数据转运的工作
·DMA,英文全称Direct Memory Access,DMA这个外设是可以直接访问STM32内部存储器的,包括运行内存SRAM,程序存储器flash和寄存器等等,DMA都有权限访问,所以DMA能完成数据转运的工作
·第二行的外设指的是外设寄存器,一般是外设的数据寄存器DR(Data Register),比如ADC的数据寄存器和串口的数据寄存器等等,存储器指的是运行内存sram和程序存储器flash,是存储变量数组和程序代码的地方。
·可配置的通道,指的是数据转运的路径,从一个地方转运到另一个地方需要占用一个通道,如果有多个通道进行转运,可以各转各的,互不干扰,
·如果DMA进行的是存储器到存储器的数据转运,比如想把flash里的数据转运到sram里去,那就需要软件触发,DMA会一股脑将数据以最快速度转运完成。
如果DMA进行的是外设到存储器的数据转运,就不能一股脑转运。外设的数据转运是有时机的,需要使用硬件触发,比如转运ADC的数据,得等ADC每个通道AD转换完成之后,硬件触发一次DMA,之后DMA再进行转运,触发一次转运一次,数据才是正确的。
存储器到存储器的转运一般使用软件触发,外设到存储器的转运一般使用硬件触发。特定的硬件触发意味着每个DMA的硬件触发源是不一样的,要使用某个外设的硬件触发源,就得使用他连接的那个通道,而不能任意选择通道
·c8t6这个芯片只有7个通道,没有DMA2
存储器映像
·ROM,只读存储器,是一种非易失性、掉电不丢失的存储器
ROM分为三块:
第一块是程序存储器flash,也就是主闪存,用途是存储c语言编译后的代码,也就是下载程序的位置。运行程序一般是从主闪存里面开始运行。这一块存储器STM32分配的地址是0x0800 0000,起始地址,也就是第一个字节的地址0800,然后剩余字节的地址依次增长,每个字节都分配一个独一无二的地址,之后程序才能精准的访问这个寄存器。终止地址取决于他的容量,编到哪里,哪里就是终止地址。如果在软件里看到,某个数据的地址是0800开头的,一般可以确定为主闪存的数据。
第二块和第三块也是掉电不丢失,不难看出这两块存储器的位置是在ROM区的最后面,实际上存储介质也是flash,只不过一般flash指的是主闪存flash,而不是指这两个区域。对于这两块区域的地址都是1FFF开头的。系统存储器的用途是存储bootloader,用于串口下载。bootloader一般是芯片出厂自动写入的,一般不允许修改。选项字节的存储器一般用于存储一些独立于程序代码的配置参数,位置是在ROM的最后面,下载程序可以不刷新选项字节的内容,这样选项字节的配置就可以保持不变,选项字节里主要存储的是flash的读保护和写保护,还有看门狗等等的配置。
·RAM,随机存储器,是一种 易失性,掉电 丢失的存储器
2000开头的是ram区域,首先是运行内存sram,分配地址是0x2000 0000,用途是用于存储运行过程的临时变量,也就是在程序中定义变量、数组、结构体的地方,类比电脑的话,运行内存就是内存条。
外设寄存器,地址是0x4000 0000,用途是存储各个外设的配置参数,也就是初始化各个外设最终读写的东西。外设寄存器也是存储器的一种,存储介质其实也是sram,不过一般习惯把运行内存叫做sram,外设寄存器直接叫做寄存器。
内核外设寄存器,地址是0xE000 0000,用途是存储内核各个外设的配置参数,内核外设就是NVIC和systick,因为内核外设和其他外设不是一个厂家设计的,所以地址被分开。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_74859061/article/details/136987999