打印
[APM32F4]

APM32F407-关于地址重映射的思考

[复制链接]
767|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 lzh12a3nf 于 2023-9-8 18:02 编辑

#申请原创#@21小跑堂
1.前言
最近在学习APM32过程中,会发现程序在烧录成功后,发现出不来正常的现象,以至于在SDK包中下载简单的跳灯程序也出现不了正确现象。后经排查发现,是因为BOOT脚配置错误,导致程序下载到其他区域内。那为什么BOOT脚设置错误,程序便执行不了正确的现象呢?
接下来,我将以APM32F407这款开发板为例子探讨一下问题。

2.问题思考所涉及知识点

2.1 程序启动配置
    如上图APM32F407的启动配置,它可以通过配置BOOT[1:0]引脚,可以让系统分别从Flash存储器或系统存储器或内置SRAM启动。如下:
    1、系统从主闪存存储器中启动,即BOOT0引脚设置为0,BOOT1引脚不论0或1即可,那么Flash地址0x08000000便会被映射到0x00000000的地址上。一般情况下,平时使用JTAG或SWD模式下载程序时,便是下载到这里,重启后,便是从这里开始启动。
    2、系统从系统存储器(Bootloader)中启动,即BOOT1引脚设置为0,BOOT0引脚设置为1,那么0x1FFF0000地址便会映射到0x00000000。
    3、系统从内置SRAM中启动,即BOOT1和BOOT0引脚均设置为1。那么,SRAM地址0x20000000便会映射到0x00000000。但SRAM不像Flash,无法在断电之后保持其内容。因此,在复位时从SRAM启动,内容会丢失,因此,只能在开始的地址区域内访问SRAM。

    有了上面的知识,我们会知道单片机有三种启动配置方式,在单片机复位后,会从0x0区域开始启动,但是0x0启动后,我们怎么跳转到对应区域呢?接着问题,我们继续探讨。

2.2地址重映射
    如上内存映射图可知,MCU复位启动后,在0x00000000区域内,会根据BOOT0和BOOT1管脚中配置的电平值,选择将0x00000000-0x0007FFFF映射到不同的区域上,映射到不同的区域上。


3.总结
    如上,解决了我的问题。即,当程序设置好在0x08000000区域内下载代码,会将0x08000000地址映射到启动空间0x00000000中,程序复位后,会根据BOOT[1:0]的电平值设置,跳转回0x08000000区域中访问。如果设置不对,即出现错误现象。

使用特权

评论回复
沙发
chenjun89| | 2023-9-5 19:38 | 只看该作者
MCU的flash起始地址好像基本上都是0x08000000

使用特权

评论回复
板凳
chuxh| | 2023-9-5 22:18 | 只看该作者
思考的很到位

使用特权

评论回复
地板
lzh12a3nf|  楼主 | 2023-9-5 22:18 | 只看该作者
chenjun89 发表于 2023-9-5 19:38
MCU的flash起始地址好像基本上都是0x08000000

是的,因为在学习过程中个人需要更换了一下。然后后面忘记换回来了,在排查过程中发现了这个问题,然后深究了一下记录这个过程

使用特权

评论回复
5
lzh12a3nf|  楼主 | 2023-9-5 23:32 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

37

帖子

0

粉丝