【STM32】STM32中的寄存器 和 x86体系CPU中的寄存器

零、前言

一直没太搞明白寄存器这个概念......

一、STM32中的寄存器

1.STM32芯片长啥样

芯片四周都是引脚,这些引脚连接到各个传感器上,编程就是通过控制这些引脚输出高低电平然后来控制各个传感器。

2.芯片里有啥?

STM32芯片:内核 + 外设(GPIOUSART(串口)、I2CSPI......

类比PC电脑:CPU+外设(显卡、内存、硬盘......)

  

3.存储器映射:

在图 6-4 中,被控单元的 FLASH RAM FSMC AHB APB 的桥(即片上外设), 这些功能部件共同排列在一个 4GB 的地址空间内。我们在编程的时候,可以通过他们的地 址找到他们,然后来操作他们。
 
但是!存储器本身没有地址信息,所以它的地址是厂商或者用户分配,给存储器分配地址的过成就是存储器映射。
 
4GB的地址空间,ARM粗略的分成了8大块:
 
其中,Block0 1 2这三个比较重要:
 
Block0 :用于设计片上外设
 
Block1 :用于设计片内SRAM
 
Block2:用于设计片内的外设,根据总线速度不同,block分为AHB、APB(又分APB1 APB2)

  

  在存储器 Block2 的片上外设地址,它们以四个字节为一个单元,共 32bit,每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。
  我们可 以找到每个单元的起始地址,然后通过 C 语言指针的操作方式来访问这些单元。
 

4.寄存器映射:

  寄存器:外设地址单元都起一个别名(以功能为名),这样操作就方便了。 这个别名,就是寄存器
 
  这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射!
 
比如,我们找到 GPIOB 端口的输出数据寄存器 ODR 的地址是 0x4001 0C0C(至于这
个地址如何找到可以先跳过,后面我们会有详细的讲解),ODR 寄存器是 32bit,低 16bit
有效,对应着 16 个外部 IO,写 0/1 对应的的 IO 则输出低/高电平。现在我们通过 C 语言指
针的操作方式,让 GPIOB 的 16 个 IO 都输出高电平,具体见代码 6-1。
代码 6-1 通过绝对地址访问内存单元
-----------------------------------------------
1 // GPIOB 端口全部输出 高电平
2 *(unsigned int*)(0x4001 0C0C) = 0xFFFF;
-----------------------------------------------
0x4001 0C0C 在我们看来是 GPIOB 端口 ODR 的地址,但是在编译器看来,这只是一
个普通的变量,是一个立即数,要想让编译器也认为是指针,我们得进行强制类型转换,
把它转换成指针,即(unsigned int *)0x4001 0C0C,然后再对这个指针进行 * 操作。
刚刚我们说了,通过绝对地址访问内存单元不好记忆且容易出错,我们可以通过寄存
器的方式来操作,具体见代码 6-2。
代码 6-2 通过寄存器别名方式访问内存单元
-----------------------------------------------
1 // GPIOB 端口全部输出 高电平
2 #define GPIOB_ODR (unsigned int*)(GPIOB_BASE+0x0C)
3 * GPIOB_ODR = 0xFF;
-----------------------------------------------
为了方便操作,我们干脆把指针操作“*”也定义到寄存器别名里面,具体见代码 6-3。
代码 6-3 通过寄存器别名访问内存单元
-----------------------------------------------
1 // GPIOB 端口全部输出 高电平
2 #define GPIOB_ODR *(unsigned int*)(GPIOB_BASE+0x0C)
3 GPIOB_ODR = 0xFF;
-----------------------------------------------

 

二、x86体系CPU下的寄存器

https://blog.csdn.net/hhw999/article/details/52861036

https://blog.csdn.net/u012493828/article/details/53439226

1、一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连

寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。

寄存器的用途:

1.可将寄存器内的数据执行算术及逻辑运算。

2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。

3.可以用来读写数据到电脑的周边设备。

 

https://baike.baidu.com/item/%E5%AF%84%E5%AD%98%E5%99%A8

三、总结

二者不一样,一个是物理器件,一个是地址映射的别名。

 

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值