寄存器映射原理
首先看下这行代码
1 | ((unsigned int *)(GPIOB_BASE+0X00)) |
其中GPIOB_BASE
是GPIOB寄存器的起始地址,它是一个4字节(32位)的地址。但是电脑不知道它地址,因此需要在前面加一个(unsigned int *)
对其进行强制类型转换,这个的作用就是把GPIOB_BASE + 0x00
强制转化为地址,因为*
符号运算的是地址,所以(unsigned int *)(GPIOB_BASE + 0x00)
这一串就成了地址,相当与一个指针常量,当需要向其写入或者读取数据时就可以按按照指针的操作方式对其进行操作,如
1 | *((unsigned int *)(GPIOB_BASE+0X00)) = 0xffffffff; // 向GPIOB_BASE内写入 0xFFFFFFFF; |
然后看下这行代码
1 |
这个是把GPIOB_BASE
这个地址强制转换为GPIO_TypeDef
结构体类型的基地址,GPIOB_BASE
它的地址分配就和结构体一样了,((GPIO_TypeDef *)GPIOB_BASE)
相当于一个结构体指针,因此就可以对结构体成员进行操作了。
这里是STM32
的库函数中的RCC
寄存器地址映射代码
1 | //定义RCC寄存器的基地址 |
这是RCC寄存器映射表,(详细的映射表请看STM32F4XX参考手册)
- 本文作者: 路痴的兔子
- 本文链接: https:/proudrabbit.gitee.io/寄存器映射.html
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!