存储器地址,常量、变量,结构体访问寄存器
首先做个小实验,验证上节中变量和只读变量的存储地址
取出的地址如果想要作为数字显示的话,还需要强制类型转换
用 const 关键字是当处于大量数据不需要修改时,比如 OLED 的字符库的定义,可以节省 SRAM 的空间
寄存器外设所在的起始地址,然后再在外设寄存器的总表里查询地址偏移量,就可以得到某个寄存器的地址了,这个地址是固定的
首先还是初始化
第一步,RCC 时钟开启 DMA 的时钟
第二步,调用 DMA_Init 初始化各个参数,如果使用的是硬件触发,还需在对应外设调用 XXXDMA_Cmd,开启一下触发信号的输出
最后,打开开关
如果需要 DMA 的中断,那就调用 DMA_ITConfig 开启中断输出,再在 NVIC 里开启相应的通道,再写对应的中断函数
传输计数器清零之后,DMA 失能、写传输计数器、DMA 使能,这样就行了
![](https://i-blog.csdnimg.cn/blog_migrate/48f8c065347f592663b1d75c4406d265.png)
开启 RCC 时钟时,DMA 是 AHB 总线上的设备,所以用 AHB 开启时钟,跳转定义
这里说的互联型设备,指的是 STM32F105/107 的型号,我们使用的是 STM32F103
第二个程序接线图
DMA 工作的三个条件:1. 传输寄存器不为0 2. DMA 失能 3. 硬件触发下,有触发源
在 DMA 自动重装模式下加上 ADC 的连续模式,可以实现硬件自动化,完全占用软件资源完成这一列操作
本节的代码展示了存储器到存储器,外设到存储器的现象
还有存储器到外设的情况,比如串口发送一大批数据,就可以用 DMA 进行外设到存储器的转运,这个需要自己去研究了