简谈stm32的地址映射
扫描二维码
随时随地手机看文章
对于控制器而言,无论是单片机系列还是plc系列,都是控制引脚的高低电平从而对外设进行控制。通常我们采取各种语言进行编写控制语句,类比于汇编和高级语言等。在51单片机的学习初级阶段,我们都使用过汇编语言进行流水灯的编写,在汇编中印象最深的莫过于对地址的控制。这里就是要说到的地址映射。
在32开发中,我们通常使用库进行开发。说白了,32开发是从底层一层一层封装上去的。到我们开发者这里,就是使用最上层的接口进行开发。但是一层一层看下去,还是对寄存器的控制,要控制寄存器,就需要操作寄存器地址。
下图就是stm32的地址映射(此图百度):
在倒数第三紫色区域是片上外设的地址区域,这里反映了片上外设的地址,我们通过操作这些地址,便能操作这些外设寄存器。
在stm32中,有三大总线,AHB总线,APB1总线以及APB2总线。不同的外设挂载在不同的总线上边。比如GPIO,串口1,ADC以及部分定时器挂载在APB2总线上(总线这里我将重新开贴介绍)。提到这里我们就该说说总线的地址么。
打开stm32f10x.h这个文件,这个文件主要包含stm32中寄存器地址和结构体类型定义,在使用到固件库的地方都要包含该头文件。这里截屏一些宏定义来说明一下地址映射与挂载总线的关系。
从图中可以看到APB2之类的字眼,这不是总线么?注意,有一个PERIPH_BASE的地址为0x40000000,这不是片上外设的首地址么。这里,这个地址称作外设基地址。同样,APB2PERIPH_BASE称作APB2总线外设基地址,毕竟都有base。
这个图片是个总线的基地址:
也就是说,该总线上所挂载的模块都在这个地址区间内。下面两幅图是挂载在总线上面各寄存器以及寄存器组的地址:
以上几幅图就是我目前能找到的地址映射的图片。
这篇文章是我初学的学习笔记,在此借鉴了:
《零死角玩转STM32》
《Duanxx的STM32学习:stm32的总线AMBA、AHB、APB》