STM32存储器和总线架构学习

发布者:那是一条路都最新更新时间:2023-08-31 来源: elecfans关键字:STM32  存储器  总线架构 手机看文章 扫描二维码
随时随地手机看文章

要学习一个MCU,首先要学习这个芯片的架构,比如这个芯片是32bit 的RSIC V还是哈佛架构,对于STM32F4,它采用ARMv7-ME架构,是32位处理器,哈佛结构,三级流水线,Thumb-2指令集,扩展的DSP指令和SIMD指令,单周期MAC,可选的单精度FPU,可选的MPU,可选的Debug$trace接口

可配置的NVIC,可配置的WIC(wakeup interrupt controller)

3套AHB-Lite总线接口

主系统由 32 位多层 AHB 总线矩阵构成,可实现以下部分的互连:

  • 八条主控总线:

  • Cortex™-M4F 内核,Icode总线(I-bus,读取指令)Dcode总线(D-bus,访问数据),System总线(S-bus,内核系统总线)

  • DMA1 存储器总线

  • DMA2 存储器总线

  • DMA2 外设总线

  • 以太网 DMA 总线

  • USB OTG HS DMA 总线

  • 七条被控总线:

  • 内部 Flash ICode 总线

  • 内部 Flash DCode 总线

  • 主要内部 SRAM1 (112 KB)

  • 辅助内部 SRAM2 (16 KB)

  • 辅助内部 SRAM3 (64 KB)(仅适用于 STM32F42xxx 和 STM32F43xxx 器件)

  • AHB1 外设(包括 AHB-APB 总线桥和 APB 外设)

  • AHB2 外设

  • FSMC

图片

每次芯片复位后,所有外设时钟都被关闭(SRAM 和 Flash 接口除外)。使用外设前,必须 在 RCC_AHBxENR 或 RCC_APBxENR 寄存器中使能其时钟。

注意:对 APB 寄存器执行 16 位或 8 位访问时,该访问将转换为 32 位访问:总线桥将 16 位或 8 位数据复制后提供给 32 位向量。

存储器组织结构

程序存储器、数据存储器、寄存器和 I/O 端口排列在同一个顺序的 4 GB 地址空间内。

各字节按小端格式在存储器中编码。字中编号最低的字节被视为该字的最低有效字节,而编号最高的字节被视为最高有效字节。

可寻址的存储空间分为 8 个主要块,每个块为 512 MB。

嵌入式 SRAM

STM32F405xx/07xx 和 STM32F415xx/17xx 带有 4 KB 备份 SRAM和 192 KB 系统 SRAM。

系统 SRAM 可按字节、半字(16 位)或全字(32 位)访问。读写操作以 CPU 速度执行, 且等待周期为 0。系统 SRAM 分为三个块:

映射在地址 0x2000 0000 的 112 KB 和 16 KB 块,可供所有 AHB 主控总线访问。

在地址 0x1000 0000 映射的 64 KB 块,只能供 CPU 通过数据总线访问。

图片

Flash

Flash 接口可管理 CPU 通过 AHB I-Code 和 D-Code 对 Flash 进行的访问。该接口可针对 Flash 执行擦除和编程操作,并实施读写保护机制。Flash 接口通过指令预取和缓存机制加速 代码执行

Flash 具有以下主要特性:

● 对于 STM32F40x 和 STM32F41x,容量高达 1 MB;

● 128 位宽数据读取

● 字节、半字、字和双字数据写入

● 扇区擦除与全部擦除

● 存储器组织结构

Flash 结构如下:

● 主存储器块,分为 4 个 16 KB 扇区、1 个 64 KB 扇区和 7 个 128 KB 扇区

● 系统存储器,器件在系统存储器自举模式下从该存储器启动

● 512 字节 OTP(一次性可编程),用于存储用户数据

OTP 区域还有 16 个额外字节,用于锁定对应的 OTP 数据块。

● 选项字节,用于配置读写保护、BOR 级别、软件/硬件看门狗以及器件处 于待机或停止模式下的复位。

● 低功耗模式

图片

对比一个建立好的工程文件,对SRAM和ROM的默认配置如下

图片

说明STM32F407系列主要用的ROM是4个16KB的扇区,SRAM用的是 112 KB 和 16 KB 的SRAM,同时也可以勾选 0x1000 0000 映射的 64 KB 区域,但是这一部分只能供CPU通过数据访问。

位段

Cortex™-M4F 存储器映射包括两个位段区域。这些区域将存储器别名区域中的每个字映射 到存储器位段区域中的相应位。在别名区域写入字时,相当于对位段区域的目标位执行读-修改-写操作。

在 STM32F4xx 器件中,外设寄存器和 SRAM 均映射到一个位段区域,这样可实现单个位段的 读写操作。这些操作仅适用于 Cortex™-M4F 访问,对于其它总线主接口(如 DMA)无效。

可通过一个映射公式说明别名区域中的每个字与位段区域中各个位之间的对应关系。映射公式为:

bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4)

其中:

— bit_word_addr 代表别名区域中将映射到目标位的字的地址

— bit_band_base 代表别名区域的起始地址

— byte_offset 代表目标位所在位段区域中的字节编号

— bit_number 代表目标位的位位置 (0-7)。

示例

下例说明如何将 SRAM 地址 0x20000300 处字节的位 2 映射到别名区域:

0x22006008 = 0x22000000 + (0x30032) + (24)

对地址 0x22006008 执行写操作相当于在 SRAM 地址 0x20000300 处字节的位 2 执行读-修 改-写操作。

对地址 0x22006008 执行读操作将返回 SRAM 地址 0x20000300 处字节的位 2 的值(0x01 表示位置位,0x00 表示位复位)。

自举配置

存储器采用固定的存储器映射,代码区域起始地址为 0x0000 0000(通过 ICode/DCode 总 线访问),而数据区域起始地址为 0x2000 0000(通过系统总线访问)。Cortex™-M4F CPU 始终通过 ICode 总线获取复位向量,这意味着只有代码区域(通常为 Flash)可以提供 自举空间。STM32F4xx 微控制器实施一种特殊机制,可以从其它存储器(如内部 SRAM) 进行自举。

在 STM32F4xx 中,可通过 BOOT[1:0] 引脚选择三种不同的自举模式

图片

所以,一般情况下,我们板子上配置的都是BOOT0拉低,如果在调试时,则可以将BOOT0,BOOT1都拉高,以此来降低FLASH的擦写次数,提高寿命。

但是也要注意,如果器件从 SRAM 自举,在应用程序初始化代码中,需要使用 NVIC 异常及中断向量表和偏 移寄存器来重新分配 SRAM 中的向量表。

复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值。复位后,用户可以通过设置 BOOT1 和 BOOT0 引脚来选择需要的自举模式。

BOOT0 为专用引脚,而 BOOT1 则与 GPIO 引脚共用。一旦完成对 BOOT1 的采样,相应 GPIO 引脚即进入空闲状态,可用于其它用途。

器件退出待机模式时,还会对 BOOT 引脚重新采样。因此,当器件处于待机模式时,这些引 脚必须保持所需的自举模式配置。这样的启动延迟结束后,CPU 将从地址 0x0000 0000 获 取栈顶值,然后从始于 0x0000 0004 的自举存储器开始执行代码。

嵌入式自举程序

嵌入式自举程序模式用于通过以下串行接口重新编程 Flash:

● USART1(PA9/PA10)

● USART3(PB10/11 和 PC10/11)

● CAN2(PB5/13)

● USB OTG FS(PA11/12) 从设备模式(DFU:器件固件升级)。

USART 外设以内部 16 MHz 振荡器 (HSI) 频率运行,而 CAN 和 USB OTG FS 则需要相当 于 1 MHz 数倍(4 MHz 到 26 MHz 之间)的外部时钟 (HSE) 频率。

嵌入式自举程序代码位于系统存储器中,在芯片生产期间由 ST 编程。


关键字:STM32  存储器  总线架构 引用地址:STM32存储器和总线架构学习

上一篇:基于STM32的两轮平衡小车设计
下一篇:基于STM32的危险品运输系统

推荐阅读最新更新时间:2024-11-10 10:40

字符转整型STM32史上最短 字符转整形 简简单单
一直奇怪为什么stm32处理数据那么麻烦,要指针数组判断等等跳来跳去的。 直到今天,我发现了 #include “string.h” #include “stdlib.h” !!! 那我就可以两句话搞定我的数据了!!! 而不是像之前那样子那么麻烦了:STM32字符转整型处理 ’ stm32c语言字符转正型,并且进行数据分割 #include string.h #include stdlib.h u8 DATA = X12Y34Y56Y78 ; int shuju_chuli(const char *shuju,char zifu ) { char *shu_ju_1=strchr(shuju,zifu)+1; /
[单片机]
字符转整型<font color='red'>STM32</font>史上最短 字符转整形 简简单单
第四节:PIC系列单片机程序存储器及堆栈
PIC16C5X内部有384~2K的只读程序存贮器,下面论述其结构和堆栈。 §1.4.1 程序存储器结构 PIC16C5X程序存储器结构如图1.3所示: 从上图可看出,PIC程序存储器采用分页结构,每页长0.5K。因此对于PIC16C52程序存储器在1页之内,而对于PIC16C54和PIC15C55程序存储器容量为1页,PIC16C56和PIC16C57 的容量则分别为2页和4页。页面地址由状态寄存器f3的第5位和第6位(PA0、PA1)确定。程序转移时,在本页内可直接进行;在需跨页跳转时(GOTO、CALL指令),则必须根据将要跳转去的页面,把f3中的PA0、PA1位置成相应的值。具体请参考f3寄存器描述及§2.7.2
[单片机]
第四节:PIC系列单片机程序<font color='red'>存储器</font>及堆栈
基于STM32的32位单片机开发板设计与实现
  RISC(reduced instruction set computer,精简指令集计算机)是一种执行较少类型计算机指令的微处理器,起源于80 年代的MIPS主机(即RISC 机),RISC机中采用的微处理器统称RISC处理器。这样一来,它能够以更快的速度执行操作(每秒执行更多百万条指令,即MIPS)。因为计算机执行每个指令类型都需要额外的晶体管和电路元件,计算机指令集越大就会使微处理器更复杂,执行操作也会更慢。STM32F100VBT6采用ARM Cortex-M3 32位RISC内核,工作频率24MHz,集成了高速嵌入式存储器(闪存高达128kB、SRAM高达8kB)以及各种增强外设和连接到两条APB总线的I/O。所有器
[单片机]
基于<font color='red'>STM32</font>的32位单片机开发板设计与实现
STM32笔记---RTC的初始化
RTC这东西晕晕的,因为一个模块涉及到了RTC,BKP,RCC多个模块,之间的关系让人有点模糊 入门的知识请大家看手册,我来总结: 总之,RTC只是个能靠电池维持运行的32位定时器over! 所以,使用时要注意以下问题: 1.上电后要检查备份电池有没有断过电。如何检查? 恩,RTC的示例代码中已经明示: 往备份域寄存器中写一个特殊的字符,备份域寄存器是和RTC一起在断电下能保存数据的。 上电后检查下这个特殊字符是否还存在,如果存在,ok,RTC的数据应该也没丢,不需要重新配置它 如果那个特殊字符丢了,那RTC的定时器数据一定也丢了,那我们要重新来配置RTC了 这个过程包括时钟使能、RTC时钟源切换、设置分频系数等等,这个可以
[单片机]
STM32 中JTAG 引脚作为普通IO口设置方法
第一次画STM32 的PCB ,因为采用了SWD 调试,认为JTAG的引脚PB3,PB4,没有用到就做了普通IO口,麻烦从此引起了。 设置PB3,PB4均为输出口,且输出高电平,用万用表测量,PB4为高,PB3不是高电平,在看MDK 中的寄存器值,PB3,PB4都是高啊?寄存器的值怎么和实际的值不一样了? 唉,都让我怀疑是不是引脚接错了,反复测量后发现引脚确实是对的,但为什么PB3能输出高,而PB4不可呢? 不知道,问度娘,后来在一个帖子上发现了相关回复: 首先,STM32F10x系列的MCU复位后,PA13/14/15 & PB3/4默认配置为JTAG功能。有时我们为了充分利用MCU I/O口的资源,会把这些
[单片机]
使用STM32调试FMSDR模块及解调FM电台(3)
3. 调试8027使其发出单音FM信号 3.1 输出24Mhz和验证I2C接口 1. 硬件连接 将FM_SDR板卡和STM32H750开发板连接。 本文中所有例子中我们都仅给MSI001使用天线,因为QN8027离得很近,发射端不需要使用天线 本程序中操作的管脚如下描述: 2. PWM输出24MHz QN8027芯片需要输入24MHz的时钟作为参考信号,在这里通过STM32H750的TIMER2产生24M的方波,提供给QN8027作为输入参考信号。 PWM信号的关键参数是频率和占空比,我们分别看一下如何设定TIM2来确定输出PWM的频率和占空比: PWM的输出频率=计数器计数频率/(计数器的计数上限+1),计数器计数频
[单片机]
使用<font color='red'>STM32</font>调试FMSDR模块及解调FM电台(3)
MCU中有多少种存储器
MCU 中内部存储器的数量取决于存储器的分类方式。主要有两种存储器:随机存取存储器(RAM)和只读存储器(ROM)。但是,根据内存性能不同,RAM 和 ROM 有不同的类型。这些不同类型的存储器可用于各种功能,例如高速缓存、主存储器、程序存储器等。另一方面,存在内存的虚拟与物理定义的问题。 RAM 的两种主要类型是静态随机存取存储器 (SRAM) 和动态随机存取存储器 (DRAM)。两者都需要施加电压来保存它们的信息。DRAM 很简单,基本实现只需要一个晶体管和一个电容器。DRAM是所有内存技术中使用最广泛的一种。当集成到 MCU 中时,它被称为嵌入式 DRAM (eDRAM)。与用作外部存储器的等效独立 DRAM 芯片相比,
[单片机]
MCU中有多少种<font color='red'>存储器</font>
亿铸科技参与撰写,《中国存储器产业白皮书(2024)》发布!
2024年10月16日—— 在全球数字化转型和大模型兴起的浪潮中,全球算力产业正逐渐从以计算单元为中心转为以存储单元为中心,存储器已成为未来算力发展的核心组成部分,并迎来快速发展的黄金时期。 亿铸科技,作为国内领先的基于新型存储的存算一体AI大算力芯片公司,近日, 亿铸科技创始人、董事长兼CEO熊大鹏博士与亿铸科技高级副总裁徐芳女士,参与由冯明宪博士主持编著的《中国存储器产业白皮书(2024)》的撰写工作。 该白皮书系统介绍了全球存储芯片的技术原理、产业生态、市场竞争及未来发展趋势,为行业发展提供了全面的战略指导。在白皮书中,亿铸科技负责撰写存算一体章节,深入探讨了这一革命性技术的发展历程,在打破传统存储墙、能耗墙及
[嵌入式]
亿铸科技参与撰写,《中国<font color='red'>存储器</font>产业白皮书(2024)》发布!
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved