寄存器编程:
相关概念:
通过C指针对具有相应功能的地址进行操作,从而实现各种功能,可以采用#define的宏定义的方式进行声明(减少内存读取次数),也可以使用 const 指针配合 typedef(有类型检查),volatile是为了反正代码优化。
以GPIO- PB0为例,参考使用芯片的数据手册
查找 指针地址 + 需要写入的数据
通俗来说,把内存比作绳子,地址宽度决定了绳子的长度,数据位数决定你每次打结所占的宽度,你每次打结只需要打结的起始位置(指针地址)和结的花样(数据),这个结可能一次占了好几个地址的长度,像STM32就一次写入4个地址(4字节=32位)。
编程流程:
1.查看CRC时钟的基地址与GPIOB组所在外设总线时钟寄存器的偏移地址(指针地址),将GPIOB组的寄存器位 置1(只修改1位数据)
2.查看GPIOB组的基地址与GPIO端口配置寄存器的偏移地址(指针地址),将PB0的模式配置位 置为推挽输出模式(4位控制一个GPIO的模式,所以这个指针地址只能控制8个GPIO的模式。STM32有两个GPIO端口配置的偏移地址,所以每组GPIO有16个,PB0~PB15)
3.查看GPIOB组的基地址与GPIO端口输出寄存器的偏移地址(指针地址),将PB0的输出位 置1 (只修改1位数据)
在上图中,两个方法修改指针的值(4字节=32位),修改多位用先清除再或运算,防止原先的值影响,一位就不用啦。因为多位配置可能带有0,或运算会保留原先的值。