STM32寄存器映射知识点整理

寄存器的功能是储存二进制代码,由多个具有存储功能的触发器组合而成的逻辑芯片。

在51单片机中,常以str,sbit等关键字对各引脚寄存器进行定义,存放在reg52.h头文件中,在编程时可以对各引脚进行使能。 而在STM32单片机中,使用GPIOx(A到G端口)对各引脚进行使能,占用地址为0x4001 0800~0x4001 23FF,使用时需要加上其地址偏移。

以GPIO端口A全部输出高电平为例:

//GPIOA

*(unsigned int*)(0x40010800)=0xFFFF;

可以通过寄存器别名方式访问内存单元

//全部输出高电平

#define GPIOA_ODR         * (unsignedint*)(0x40010800)

* GPIOA_ODR = 0xFF;

更多的寄存器映射可以参考STM32F4XX参考手册

在实际应用中,通常使用宏定义指令对寄存器的基地址进行封装

/* 外设基地址 */
#define PERIPH_BASE ((unsigned int)0x40000000)
 
 /* 总线基地址 */
#define APB1PERIPH_BASE PERIPH_BASE
#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000)
#define AHBPERIPH_BASE (PERIPH_BASE + 0x00020000)

/* GPIO 外设基地址 */
#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)
#define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00)
#define GPIOC_BASE (APB2PERIPH_BASE + 0x1000)
#define GPIOD_BASE (APB2PERIPH_BASE + 0x1400)
#define GPIOE_BASE (APB2PERIPH_BASE + 0x1800)
#define GPIOF_BASE (APB2PERIPH_BASE + 0x1C00)
#define GPIOG_BASE (APB2PERIPH_BASE + 0x2000)
 
/* 寄存器基地址,以 GPIOB 为例 */
#define GPIOB_CRL (GPIOB_BASE+0x00)
#define GPIOB_CRH (GPIOB_BASE+0x04)
#define GPIOB_IDR (GPIOB_BASE+0x08)
#define GPIOB_ODR (GPIOB_BASE+0x0C)
#define GPIOB_BSRR (GPIOB_BASE+0x10)
#define GPIOB_BRR (GPIOB_BASE+0x14)
#define GPIOB_LCKR (GPIOB_BASE+0x18)
经验分享 程序员 微信小程序 职场和发展