什么是寄存器

什么是寄存器

寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成。

寄存器映射

就是绝对地址改个名字

如以下代码

// GPIOB 端口全部输出 高电平
2 *(unsigned int*)(0x4001 0C0C) = 0xFFFF;

通过GPIOB的绝对地址使其输出高电平(太不方便了)

用寄存器映射

2 #define GPIOB_ODR *(unsigned int*)(GPIOB_BASE+0x0C)
3 GPIOB_ODR = 0xFF;

STM32 的外设地址映射

片上外设区分为三条总线,根据外设速度的不同,**不同总线挂载着不同的外设,**APB1 挂载低速

外设,APB2 和 AHB 挂载高速外设。相应总线的最低地址我们称为该总线的基地址,总线基地

址也是挂载在该总线上的首个外设的地址。其中 APB1 总线的地址最低,片上外设从这里开始,

也叫外设基地址。

总线名称不同
APB1挂载低速外设
APB2挂载高速外设
AHB挂载高速外设

总线基地址

在这里插入图片描述

表格总线基地址 的“相对外设基地址偏移”即该总线地址与“片上外设”基地址 0x4000 0000 的差值。

外设基地址(以GPIOX作例子)

在这里插入图片描述

外设寄存器(以GPIOX作例子)

在这里插入图片描述

修改寄存器的位操作方法

把变量的某位清零&=~()

1//定义一个变量 a = 1001 1111 b (二进制数)
2 unsigned char a = 0x9f;
3
4 //对 bit2 清零
5
6 a &= ~(1<<2);
7
8 //括号中的 1 左移两位,(1<<2) 得二进制数:0000 0100 b
9 //按位取反,~(1<<2) 得 1111 1011 b
10 //假如 a 中原来的值为二进制数: a = 1001 1111 b
11 //所得的数与 a 作”位与&”运算,a = (1001 1111 b)&(1111 1011 b),
12 //经过运算后,a 的值 a=1001 1011 b
13 // a 的 bit2 位被清零,而其它位不变。

把变量的某几个连续位清零

1//若把 a 中的二进制位分成 2 个一组
2 //即 bit0、bit1 为第 0 组,bit2、bit3 为第 1 组,
3 // bit4、bit5 为第 2 组,bit6、bit7 为第 3 组
4 //要对第 1 组的 bit2、bit3 清零
5
6 a &= ~(3<<2*1);
7
8 //括号中的 3 左移两位,(3<<2*1) 得二进制数:0000 1100 b
9 //按位取反,~(3<<2*1) 得 1111 0011 b
10 //假如 a 中原来的值为二进制数: a = 1001 1111 b
11 //所得的数与 a 作”位与&”运算,a = (1001 1111 b)&(1111 0011 b),
12 //经过运算后,a 的值 a=1001 0011 b
13 // a 的第 1 组的 bit2、bit3 被清零,而其它位不变。
14
15 //上述 (~(3<<2*1)) 中的 (1) 即为组编号; 如清零第 3 组 bit6、bit7 此处应为 3
16 //括号中的 (2) 为每组的位数,每组有 2 个二进制位; 若分成 4 个一组,此处即为 4
17 //括号中的 (3) 是组内所有位都为 1 时的值; 若分成 4 个一组,此处即为二进制数“1111 b”
18
19 //例如对第 2 组 bit4、bit5 清零
20 a &= ~(3<<2*2);

对变量的某几位进行赋值|=()

1//a = 1000 0011 b
2 //此时对清零后的第 2 组 bit4、bit5 设置成二进制数“01 b ”
3
4 a |= (1<<2*2);
5 //a = 1001 0011 b,成功设置了第 2 组的值,其它组不变

对变量的某位取反……=()

1//a = 1001 0011 b
2 //把 bit6 取反,其它位不变
3
4 a ^=(1<<6);
5 //a = 1101 0011 b

对变量的某位取反……=()

1//a = 1001 0011 b
2 //把 bit6 取反,其它位不变
3
4 a ^=(1<<6);
5 //a = 1101 0011 b
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值