SPI数据寄存器地址查看
群里面有小伙伴问SPI对应的数据寄存器的地址在哪,怎么找?
对于初学者来说这个问题非常经典,本文介绍三种方式来找到想要的寄存器的地址
在UM手册里面查找
首先找到用户手册总线架构的章节:
上面截图可以看出来,SPI1是挂载在AP2总线上,SPI2,SPI3是挂载在APB1上
可以得到:
1 | SPI1 寄存器地址就是 0x4001_3000 – 0x4001_33FF |
SPIx的基地址加上offset就是想要的寄存器的地址,以SPI_DAT为例
SPI1的SPI_DAT地址为0x4001_3000+0x0C == 0x4001_300C
debug时看外设寄存器地址
之前有提到过Keil的pack包里面有一个SVD文件,里面就包含了各个寄存器的位置(详细到寄存器的每个 BIT 位)
单击右边的外设寄存栏可以看到SPI_DAT的值:0x4001_300C,与之前计算的一致
通过库函数代码
可以看到CTRL1、CTRL2…都是16位的,加上RESERVED空间也是16位的。
到SPI_DAT的偏移地址是(6*16)/8 == 12 == 0x0Ch
可能有人会问,怎么知道要去看SPI_Module这个结构体呢,打开spi driver.h可以看到:
几乎是清一色的对SPI_Module的操作,不难猜到SPI_Module和SPI寄存器之间的对应关系
再加上SPI1的基地址
PERIPH_BASE+APB2PERIPH_BASE+SPI1_BASE+SPI(offset)这样也能得到SPI_DAT的地址