1、今天小编从一个例子入手来讲如何访问STM32开发学习板寄存器,所谓的访问寄存器也就是说要找到寄存器,在单片机中寄存器都是以地址所表示的,所有盟廊巴反访问寄存器必须找到对应寄存器的地址,接下来从一个例子入手:STM32的GPIOF的第9管脚输入低电平,下图上寄存器的地址最高级分配,由于GPIOF属于片上外设,所有在Block2上,所以地址就是在Block2的地址范围中,先使用C语言定义一下Block2基地址:#define PERIPH_BASE ((unsigned int)0x40000000)如下图:
2、然后再来看一下GPIOF在Block2的哪个总线上,打开STM32F4xx中文参考手册中查找到存储器组织结构查看STM32F4xx寄存器边界地址,下图中红色箭头指示位置可以看到GPIOF输入AHB1总线,如下图:
3、然后定义一下各个总线的地址:#define APB1PERIPH_BASE P苇质缵爨ERIPH_BASE#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000)#define AHB1PERIPH_BASE (PERIPH_BASE + 0x00020000)#define AHB2PERIPH_BASE (PERIPH_BASE + 0x10000000)如下图:
4、下图中是外设相对于AHB1总线地址偏移,定义一下GPIOF的地址:#define GPIOF_BASE (AHB1PERIPH_BASE + 0x1400)如下图:
5、下图中是寄存器相对于外设地址偏移,我们设置TM32的GPIOF的第9管脚输入低电平,就是要复位,这里需要设置BSRR(置位、复位寄存器),如下图:
6、继续查看STM32F4xx中文参考手册查找到GPIO端口置位/复位寄存器,然后偏移地址为18,定义一下BSRR寄存器地址:#define GPIOF_BSRR (GPIOF_BASE+0x18)从下图中可以看出BSRR寄存器有32位,对应GPIOF的16个端口,然后16位用于置位、16位用于复位如下图:
7、下图中就是复位的C语言表莲镘拎扇示,GPIOF_BSRR是寄存器地址宏定义,C语言会认为这只是个立即数,所以使用(unsigned int*)这样来强制将这个镟搞赃呓GPIOF_BSRR寄存器地址宏定义转换成地址,然后前面再次加入一个【*】号,这个表示将对应地址的内容进行设置,后面的(0x01<<(16+9))表示将1值赋予的第16+9位,这样写的好处是便于阅读,如下图:
8、下图中的是GPIOF的第9管脚的置位C语言表示,如下图: