1.002 STM32F4xxx系统架构

(46条消息) 【STM32】STM32系列教程汇总(暂时暂停更新...)_沧海一笑-dj的博客-CSDN博客_【stm32】stm32系列教程汇总

Arm Cortex-M4 处理器采用哈佛结构,可以使用相互独立的总线来读取指令和加载/存储 数据。指令代码和数据都位于相同的存储器地址空间,但在不同的地址范围。程序存储器, 数据存储器,寄存器和I/O端口都在同一个线性的4 GB(Cortex-M4的地址总线宽度是32位的,最大地址为 0xFFFF FFFF)的地址空间之内。

STM32F4xx系统架构

借助总线矩阵,可以实现主控总线到被控总线的访问(访问仲裁管理采用循环调度算法),这样即使在多个高速外设同时运行期间,系统也可以实现并发访问和高效运行。

1. 存储器映射

STM32F40xxx 存储器映射

简而言之,存储器映射就是为物理存储器按一定编码规则分配地址的行为。

在完成存储器映射后,用户就可以按照存储器地址去访问对应的物理存储器。比如我要访问 SRAM,只需要访问0x2000 0000到0x2001 FFFF的地址即可。

值得注意,一部分地址空间由 Arm Cortex-M4 的系统外设所占用,且不可更改。此外,其余部分地址空间可由芯片供应商(ST,意法半导体)定义使用。用户只能用而不能改(为了降低不同客户在相同应用时 的软件复杂度)。用户只能在挂外部RAM或FLASH的情况下可进行自定义。

Arm Cortex-M4只有一个单一固定的存储器映射,这一点方便了我们在该系列之间的移植。

2. 存储器重映射

比如UART6与GPIOA在同一个引脚

通常系统启动都是从0地址处开始,但是为了支持不同的存储介质,不同的存储介质被分配了一个非0地址区域。这就是为什么要进行重映射。

因此重映射主要发生在两种情况下,一系统启动的过程中;二如果中途遇到需要在不同的存储器之间进行切换的时候也需要进行重映射。

存储器采用固定的存储器映射,代码区域起始地址为 0x0000 0000(通过 ICode/DCode 总 线访问),而数据区域起始地址为 0x2000 0000(通过系统总线访问)。

STM32F4xx 微控制器实施一种特殊机制,将各自存储空间的地址映射到0x00000000中。

在 STM32F4xx 中,可通过 BOOT[1:0] 引脚选择三种不同的 boot modes。

1)从Flash启动,将Flash地址0x08000000映射到0x00000000,这样启动以后就相当于从0x08000000开始的,这是我们最常用的模式;

当选择从主Flash启动模式后,芯片一上电,Flash的0x0800 0000地址被映射到0地址处,不影响CM4内核的读取,所以这时的CM4既可以在0地址处访问中断向量表,也可以在0x0800 0000地址处访问中断向量表,而代码还是在0x0800 0000地址处存储的。

2)从SRAM启动,将SRAM地址0x20000000映射到0x00000000,这样启动以后就相当于从0x20000000开始的,用于调试;

3)从系统存储器启动,将系统存储器地址0x1FFFF000映射到0x00000000,这样启动以后就相当于从0x1FFFF000开始执行的,值得注意的是这个系统存储器里面存储的其实是STM32自带的Bootloader代码,这其实是一个官方的IAP,它提供了可以通过UART1接口将用户的代码下载到Flash中的功能,下载完以后再切换到从Flash中启动就可以正常运行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值