STM32学习笔记——寄存器映射

存储器映射

  1. 总线基地址
总线名称总线基地址
APB10x4000 0000
APB20x4001 0000
AHB0x4000 8000
  1. GPIO基地址

GPIO端口挂在总线APB2上

端口名称端口基地址
GPIOA0x4001 0800
GPIOB0x4001 0C00
GPIOC0x4001 1000
GPIOD0x4001 1400
GPIOE0x4001 1800
GPIOF0x4001 1C00
GPIOG0x4001 2000

每个端口的基地址相差0x400

  1. GPIOx端口的寄存器列表

以GPIOB端口为例

寄存器名称寄存器基地址偏移地址
GPIOB_CRL0x4001 0C000x00
GPIOB_CRH0x4001 0C000x04
GPIOB_IDR0x4001 0C000x08
GPIOB_ODR0x4001 0C000x0C
GPIOB_BSRR0x4001 0C000x10
GPIOB_BRR0x4001 0C000x14
GPIOB_LCKR0x4001 0C000x18

每个寄存器地址相差0x04

GPIOB端口寄存器描述——使PB0输出0/1

宏定义方式

#define PERIPH_BASE			((unsigned int)0x40000000)
#define APB2PERIPH_BASE		(PERIPH_BASE + 0x00010000)
#define GPIO_BASE			(APB2PERIPH_BASE + 0x0C00)
#define GPIO_ODR			*(unisgned int*)(GPIO_BASE + 0x0C)

//PB0输出低电平
GPIO_ODR &= ~(1<<0);
//PB0输出高电平
GPIO_ODR |= (1<<0)

(GPIO_BASE + 0x0C)对应GPIO_ODR寄存器地址
(unsigned int*) 将(GPIO_BASE + 0x0C)强制转化为指针
(*)指针操作,指向GPIO_ODR地址

结构体封装

typedef unsigned int 	uint32_t;		 /*无符号32位变量*/
typedef unsigned short int	uint16_t;	/*无符号16位变量*/

/*GPIO寄存器列表*/
typedef struct{
	uint32_t 	CRL;	/*地址偏移0x00*/
	uint32_t	CRH;	/*地址偏移0x04*/
	uint32_t	IDR;	/*地址偏移0x08*/
	uint32_t	ODR;	/*地址偏移0x0C*/
	uint32_t	BSRR;	/*地址偏移0x10*/
	uint32_t	BRR;	/*地址偏移0x14*/
	uint32_t	LCKR;	/*地址偏移0x18*/
}GPIO_TypeDef;

GPIO_TypeDef* GPIOx;
GPIOx = GPIO_BASE;
GPIO->ODR = 0xFFFFE;
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值