stm32手册_STM32:存储器与寄存器

一、寄存器及寄存器映射

存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程称为存储器映射,如果再分配一个地址就叫重映射(具体地址分配参考芯片数据手册及中文参考手册)。

b99d85e198365c4a92990bbf850b7874.png
90633707091261c846cc2775ff9dd21b.png

STM32寄存器

二、寄存器及寄存器映射

(一)寄存器

通过给有特定功能的内存单元起一个别名,这个别名就是我们所说的寄存器。换句话说,寄存器就是一些有特定功能的内存单元。

(二)寄存器映射

给已经分配好地址的有特定功能的内存单元起别名的过程就叫寄存器映射。

(三)访问STM32寄存器

访问STM32寄存器也就是操作STM32的内存单元,根据C语言指针的特点,可以使用指针来操作STM32的内存单元。

以GPIO外设为例

要让STM32的GPIOC的第0管脚输出低电平。

首先我们要知道GPIOC挂接在哪个总线上,需要知道其地址,STM32总线地址如下:

c7c55f1fd61a4b61bb8b92b0ff6907ab.png

STM32总线地址

974e76de162d71e6c745d997f7c2e315.png

外设基地址

所以使用C语言宏可以定义外设基地址:

#define PERIPH_BASE ((unsigned int)0x40000000)

然后分别定义APB2总线基地址:

#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000)

然后还需要知道端口外设地址,同样使用C语言宏定义其端口地址:

# define GPIOC_BASE (APB2PERIPH_BASE + 0x1000)

有了外设端口地址后,还需要知道GPIOC端口的寄存器地址,如图:

c85752980315bf62cda38c9840ff8680.png

GPIOC端口的寄存器地址

同样使用C语言宏定义其端口寄存器地址:

#define GPIOC_CRL *(unsigned int*)(GPIOC_BASE+0x00)#define GPIOC_CRH *(unsigned int*)(GPIOC_BASE+0x04)#define GPIOC_IDR *(unsigned int*)(GPIOC_BASE+0x08)#define GPIOC_ODR *(unsigned int*)(GPIOC_BASE+0x0C)#define GPIOC_BSRR *(unsigned int*)(GPIOC_BASE+0x10)#define GPIOC_BRR *(unsigned int*)(GPIOC_BASE+0x14)#define GPIOC_LCKR *(unsigned int*)(GPIOC_BASE+0x18)

寄存器具体的功能可以参考STM32F1芯片手册。

6c378a81108c8a588ff892463832622a.png

寄存器具体的功能

控制 GPIOC 引脚 0 输出低电平(即通过BSRR 寄存器的 BR0 置 1)

GPIOC_BSRR = (0x01<

控制 GPIOC 引脚 0 输出高电平(即通过BSRR 寄存器的 BS0 置 1)

GPIOC_BSRR = 0x01<<0;

读取GPIOC端口所有引脚的电平(读 IDR 寄存器)

unsigned int temp;temp = GPIOC_IDR;�
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值