0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文了解STM32F429内核与存储器映射

电子设计 来源:CSDN 博主 作者:Sumjess 2021-02-15 10:22 次阅读

一、STM32 芯片架构简图

pIYBAF_8CNWAIsD2AAD81K-Bsec767.png

STM32 有三种启动方式,从 FLASH 启动(包含系统存储器),从内部 SRAM 启动,从外部 RAM 启动。

二、存储器映射

存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射,具体见下图。 如果给存储器再分配一个地址就叫存储器重映射。

o4YBAF_8COiAGVacAAJupcyfxC4639.png

在这 4GB 的地址空间中, ARM 已经粗线条的平均分成了 8 个块,每块 512MB,每个块也都规定了用途,具体分类见下表。每个块的大小都有 512MB,显然这是非常大的,芯片厂商在每个块的范围内设计各具特色的外设时并不一定都用得完,都是只用了其中的一部分而已。

o4YBAF_8CPSAYeZ4AANGJyfaroI586.png

在这 8 个 Block 里面,有 3 个块非常重要,也是我们最关心的三个块。 Boock0 用来设计成内部 FLASH, Block1 用来设计成内部 RAM, Block2 用来设计成片上的外设,下面我们简单的介绍下这三个 Block 里面的具体区域的功能划分。

1、存储器 Block0 内部区域功能划分

Block0 主要用于设计片内的 FLASH, F429 系列片内部 FLASH 最大是 2MB,STM32F429IGT6 的 FLASH 是 1MB。

o4YBAF_8CQiABppyAALzpVs5HGI558.png

2、储存器 Block1 内部区域功能划分

Block1 用于设计片内的 SRAM。 F429 内部 SRAM 的大小为 256KB,其中 64KB 的CCM RAM 位于 Block0,剩下的 192KB 位于 Block1,分 SRAM1 112KB, SRAM2 16KB,SRAM3 64KB, Block 内部区域的功能划分具体见下表。

pIYBAF_8CRWANXA7AAGswKV4TTw737.png

3、储存器 Block2 内部区域功能划分

Block2 用于设计片内的外设,根据外设的总线速度不同, Block 被分成了 APB 和 AHB两部分,其中 APB 又被分为 APB1 和 APB2, AHB 分为 AHB1 和 AHB2,具体见下表。还有一个 AHB3 包含了 Block3/4/5/6,这四个 Block 用于扩展外部存储器,如 SDRAM,NORFLASH 和 NANDFLASH 等。

o4YBAF_8CSaAfWNyAALLiK80tS8740.png

三、寄存器映射

根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。

1、STM32 的外设地址映射

片上外设区分为四条总线,根据外设速度的不同,不同总线挂载着不同的外设, APB挂载低速外设, AHB 挂载高速外设。相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外设的地址。其中 APB1 总线的地址最低,片上外设从这里开始,也叫外设基地址。

(1)总线基地址

pIYBAF_8CT2AYdoJAAGWql943Bo135.png

(2)外设基地址

总线上挂载着各种外设,这些外设也有自己的地址范围,特定外设的首个地址称为“ XX 外设基地址”,也叫 XX 外设的边界地址。

o4YBAF_8CVKAPe8JAAJLt8dLXFY615.png

(3)外设寄存器

GPIO 有很多个寄存器,每一个都有特定的功能。每个寄存器为 32bit,占四个字节,在该外设的基地址上按照顺序排列,寄存器的位置都以相对该外设基地址的偏移地址来描述。

pIYBAF_8CWWAHrAXAALI06AZE2U832.png

2、C 语言对寄存器的封装
(1)封装总线和外设基地址

为了方便理解和记忆,我们把总线基地址和外设基地址都以相应的宏定义起来,总线或者外设都以他们的名字作为宏名。

o4YBAF_8CXKAG7trAAN9CGLGI9w755.png

(2)封装寄存器列表

GPIOA-GPIOH 都各有一组功能相同的寄存器,如 GPIOA_MODER/GPIOB_MODER/GPIOC_MODER 等等,它们只是地址不一样,但却要为每个寄存器都定义它的地址。为了更方便地访问寄存器,我们引入 C 语言中的结构体语法对寄存器进行封装。

o4YBAF_8CY6AM5VeAARFgpdwbFA131.png

o4YBAF_8CZyAQAQjAAFMjszMBZE524.png

这样的地址偏移与 STM32 GPIO 外设定义的寄存器地址偏移一一对应,只要给结构体设置好首地址,就能把结构体内成员的地址确定下来,然后就能以结构体的形式访问寄存器了。

o4YBAF_8CayACObHAAH_50M1FCY525.png

3、修改寄存器的位操作方法

用 C 语言对寄存器赋值时,我们常常要求只修改该寄存器的某几位的值,且其它的寄存器位不变,这个时候我们就需要用到 C 语言的位操作方法了。

(1)把变量的某位清零

此处我们以变量 a 代表寄存器,并假设寄存器中本来已有数值,此时我们需要把变量a 的某一位清零,且其它位不变。

pIYBAF_8Cb2AVuQfAAHcqzK-dtc757.png

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

由于寄存器中有时会有连续几个寄存器位用于控制某个功能,现假设我们需要把寄存器的某几个连续位清零,且其它位不变。

pIYBAF_8CdGAOg7NAAP1OzS-pKw932.png

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

寄存器位经过上面的清零操作后,接下来就可以方便地对某几位写入所需要的数值了,且其它位不变,这时候写入的数值一般就是需要设置寄存器的位参数

o4YBAF_8Cd6AJLfJAAC6m2puROw295.png

(4)对变量的某位取反

某些情况下,我们需要对寄存器的某个位进行取反操作,即 1 变 0 , 0 变 1,这可以直接用如下操作,其它位不变。

pIYBAF_8CjiAM9OMAABY_vLiBfk720.png


编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储器
    +关注

    关注

    38

    文章

    7514

    浏览量

    164004
  • STM32
    +关注

    关注

    2270

    文章

    10910

    浏览量

    356604
收藏 人收藏

    评论

    相关推荐

    TLV320AIC3106-Q1通过什么接口与STM32F429进行硬件连接?

    如题,TLV320AIC3106-Q1通过什么接口与STM32F429进行硬件连接
    发表于 11-04 06:03

    STM32F429使用内部TFT控制进行LCD显示,是否可以存在锁住屏幕的操作?

    STM32F429使用内部TFT控制进行LCD显示,是否可以存在锁住屏幕 的操作。即不读SDRAM,LCD显示的内容可以不变。 有这种控制吗?
    发表于 05-17 08:08

    stm32f429如何把变量定义到sdram中去?

    最近搞stm32f429,请教如何把变量定义到sdram中去?能够同时使用内部的sram和外部的sdram吗?
    发表于 05-15 07:54

    STM32F429 AD采集出的数据波动很大是哪里的问题?

    STM32F429 AD采集稳压源335V,得出来的数据偏差幅度很大,能从339-349V变化,怎么可能?还有,这款单片机AD不支持校准。现在怀疑它波动大的原因是 AD的问题,有没有同样的看法?
    发表于 05-14 07:42

    STM32F429的LCD驱动驱动7寸屏,使用存在刷屏慢的现象怎么解决?

    最近有个项目,对于人机交互采用7寸液晶屏,想选款带LCD驱动的CPU,不知道大家是否用STM32F429的LCD驱动驱动过7寸屏,在
    发表于 05-07 07:21

    STM32F429开发板只能插电脑USB供电接口LCD才能显示,为什么?

    手中STM32F429 Disvovery开发板,在插入电脑USB接口的情况下,LCD正常显示图片内容。将USB供电线插到充电宝、充电器上就无法正常显示图片。请问这是什么问题?
    发表于 04-29 07:04

    stm32f429 FMC地址总线的疑问求解

    stm32f429单片机,使用FMC操作并行总线。其中地址总线上主设备为f429,从设备为个fpga和两个存储器,地址总线经5.1K电阻上拉。 经示波器测试,观察到下面的异常现象:
    发表于 04-11 07:58

    STM32F429做的PIL仿真速度非常慢的原因?

    各位大神好, 本人用MATLAB/SIMULINK搭建了小型直流电力系统。系统包含三个直流转换。相关三个控制被载入STM32F429中,从而与SIMULINK构成PIL仿真。仿真运行
    发表于 04-11 07:28

    STM32F429支持的U盘容量最大是多少呢?

    各位大佬,请假个问题,STM32F429支持的U盘容量,最大是多少呢?
    发表于 04-03 08:03

    STM32F103DMA模块存储器存储器可以实现循环吗?

    STM32F103 参考手册中循环模式部分描述:DMA模块存储器存储器不能与循环模式同时使用。但是经过实际测试,是可以实现循环的,请问怎么理解这句话呢?
    发表于 04-02 06:23

    stm32f429 can1通讯使用hal发送数据不稳定怎么解决?

    stm32f429 can1通讯,使用hal库配置工程,发送数据不稳定,发送几十个包才有俩正常发送,但是使用标准库就可以正常发送数据,也很稳定,研究两天了也没有解决,这是什么问题呢。
    发表于 04-02 06:04

    STM32F429的工程标准库移植到HAL库后中断向量表异常的原因?

    STM32F429的工程标准库移植到HAL库后中断向量表异常
    发表于 03-20 06:02

    STM32F429进入待机、休眠、STOP模式下,VDDA和vdd能关断吗?

    STM32F429进入待机、休眠、STOP模式下,VDDA和vdd能关断吗?找不到文档说明呢,谢谢
    发表于 03-11 06:01

    STM32F429是有双BANK的,BFB2如何设置从哪个BANK启动?

    看手册STM32F429是有双BANK的,通过设置BFB2来设置从哪个BANK启动,FB_MODE设置BANK映射。但是我不知道具体在哪个时候设置。如,我当前的固件运行在BANK1区,然后进行升级
    发表于 03-07 07:17

    请问stm32f429如何改内部rc时钟工作?

    stm32f429标准库如何改内部rc时钟工作?
    发表于 01-17 06:25