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)
