【学习笔记】从地址偏移到STM32构架

前言:

今天在翻数据手册时,看到地址偏移这一概念,很好奇就泡了泡大佬的博客,顺带把STM32构架也弄清楚了,现在和大家分享。

 
参考文章1
参考文章2

构架部分:

- - >了解地址偏移之前我们先来看看主系统构架,能帮助我们更好的梳理众多外设的起始地址。

请添加图片描述

-->什么是外设/片上资源?那片上系统又是什么?他们之间有什么区别?

 
 首先STM32硬件上分为内核和外设,内核相当于计算机CPU,外设相当于计算机其他部分,所以外设包含的东西非常多,如上图所示。
 其次这里所说的外设就是片上外设,即单片机上的外设部分。而片上外设和片上系统又有什么区别呢?片上系统是SoC:System-on-a-chip,系统级芯片,包含完整的系统,单片机就属于片上系统。

- - >内核部分又包括主系统驱动单元、被动单元和其他部分
a.主系统驱动单元:

 i.Cortex-M3内核DCode、总线D-bus、系统总线S-bus
 ii.通用DMA1、DMA2

b.被动单元:内部SRAM、内部闪存存储器、FSMC、AHB到APB的桥(AHB2APBx:连接所有的APB设备)

 i.这里AHB和APB分别是Advanced High-performance Bus 高级高性能总线
            Advanced Peripheral Bus 外围总线
 ii.
在这里插入图片描述

c.其他部分:ICode总线、DCode总线、系统总线、DMA总线、总线矩阵


起始地址:

寄存器组起始地址:


在这里插入图片描述

 观察上表可知:
  i.寄存器地址长度为4个字节,8位16进制数,32位二进制数
  ii.相邻寄存器之间间隔长度4个字节,8位16进制数,32位二进制数;

ps:启动配置:(STM中这个启动配置用的比较多,看到了就顺手也记下来)
在这里插入图片描述


地址偏移部分:

 a.什么是存储器映射:

  映射其实就是对应的意思。事实上存储器本身不具备地址,所以把芯片内核所预先设定好的地址分配给寄存器,就是存储器映射。因为stm32把这个4G的虚拟存储空间和芯片内部外设进行一一对应,每个外设和其对应的寄存器都有一个确定的地址,也就是给存储器分配地址,即存储器映射。

 b.正常使用的寄存器的地址 = 基地址+偏移地址

  i.总线基地址:片上外设区分为四条总线,根据外设速度的不同,不同总线挂载着不同的外设, APB1 挂载低速外设,APB2 和 AHB 挂载高速外设。相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外设的地址。APB1 总线的地址最低,因此片上外设就从这这个地址开始,也称外设基地址。从下图可以看到 APB1 总线基地址是 0x4000 0000,相对外设基地址的偏移量是 0,所以此总线也是外设的基地址。

请添加图片描述

  ii.外设基地址:每条总线上都会挂接着很多的外设,这些外设也会有自己的地址范围, 外设的最低地址就是外设的基地址,也称作边界地址。以 GPIO 外设来讲解外设基地址。其他的外设也是同样分析。从图可以知道,外设 GPIOx 都是挂接在 APB2 总线上,属于高速的外设,而 APB2 总线的基地址是 0x4001 0000,故 GPIOA 的相对 APB2 总线的地址偏移是 800。

  iii.外设寄存器地址: 外设的寄存器就分布在其对应的外设地址范围内。这里我们以 GPIO 外设为例,GPIO 有很多个寄存器,每一个都有特定的功能。每个寄存器为 32bit,占四个字节,这些寄存器都是按顺序依次排列在外设的基地址上。寄存器的位置都以相对该外设基地址的偏移地址来描述。这里我们以 GPIOB 端口为例,来说明 GPIOB都有哪些寄存器,如所示。

请添加图片描述


总结:

 地址偏移实际上就是给众多外设包括寄存器等等取了个“小名”,别名方便我们更好的使用;每次使用它只用喊他的“小名”,为了方便记忆他又是不是乱起的小名,是相对于大名(基地址)取得小名,我们使用小名时还能想的起他的大名(挂在在哪条总线上)。
请添加图片描述


7.以后再学习:

 DMA缓冲区大小的计算:即便在接收缓存的起始地址和系统数据总线宽度不对齐的时候,系统仍然要求接收缓存的大小和系统数据总线宽度对齐。例如,系统需要一个从0x1000开始,大小为1024字节(1KB)的接收缓存。软件可以把缓存的初始地址偏移到0x1002。这样,DMA就会对前2个地址(0x1000和0x1002)写虚拟字节。帧实际从0x1002开始,由于实际的地址偏移,即使缓存大小被设为1024字节,缓存实际可用的大小变成1022字。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值