DMA代码部分
第一个程序的接线图
OLED ShowHexNum(2,1,(uint32_t)&ADC1->DR,8);
这样可以看AD的DR寄存器的的地址(固定的)了
可以跑一下然后和手册对比
先查ADC1的地址
再在外设的总表里面, 查一下DR相对于上面地址的偏移量
所以其地址为4001 244C
研究一下外设寄存器的地址是怎么被封装起来的、
根据上图我们知道了基地址的由来
但是基地址+偏移,才是寄存器的实际地址,我们怎么得到这个偏移量呢?
在这里, 它使用了一个非常巧妙的方法来实现这个偏移吗,就是使用结构体来实现,我们跳转到结构体的定义
可以看到这里是依次定义了各种寄存器
我们看一下手册,和这个寄存器实际存放的顺序,是一一对应的
如果我们定义一个ADC结构体的指针,并且指针的地址就是这个外设的起始地址,那这个结构体的每个成员, 就会正好映射实际的每个寄存器(之前写x86内核,对于CPU中断时候寄存器信息的输出也是采用这个办法)
如果我指定, 这个结构体的起始地址就是ADC1外设寄存器的起始地址, 那么这个结构体的内存和外设寄存器的内存就会完美重合, 我再访问结构体的某个成员,就相当于是访问这个外设的某个寄存器了
11.12