打印
[STM32F1]

如何更改项目的起始地址

[复制链接]
239|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Hitomi22|  楼主 | 2025-5-30 12:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在STM32F103中,想要进行在线升级程序,需要重新定义 Bootloader 和 Main App 的地址。问题是我在 system_stm32f0xx.c 中找不到常数VECT_TAB_OFFSET。SCB->VTOR 也没有。

不知道在哪里改程序的起始地址,和向量表

使用特权

评论回复
沙发
烟雨蒙蒙520| | 2025-5-31 23:06 | 只看该作者
Main App 必须设置正确的 SCB->VTOR 指向自己的 vector table

使用特权

评论回复
板凳
确保在SystemInit函数中,根据程序运行位置(Flash或SRAM)正确配置SCB->VTOR寄存器。例如,若Main App运行在Flash中,且起始地址为0x08020000,则应设置SCB->VTOR = 0x08020000 | VECT_TAB_OFFSET(若VECT_TAB_OFFSET不为0)。但在STM32F103中,由于启动时地址重映射机制,通常只需设置SCB->VTOR为应用程序的起始地址即可,无需额外偏移(即VECT_TAB_OFFSET可能为0)

使用特权

评论回复
地板
远山寻你| | 2025-6-9 16:00 | 只看该作者
在STM32F103中进行在线升级程序(IAP)时,确实需要重新定义Bootloader和Main App的地址,并正确配置中断向量表

使用特权

评论回复
5
江河千里| | 2025-6-9 16:30 | 只看该作者
若在system_stm32f1xx.c中找不到VECT_TAB_OFFSET或SCB->VTOR相关定义,可修改IROM1的起始地址,例如将Bootloader的起始地址设为0x08000000,Main App的起始地址设为0x08020000(假设预留10KB空间给Bootloader)。同时,需要相应调整芯片Flash大小,减去偏移量

使用特权

评论回复
6
光辉梦境| | 2025-6-9 18:00 | 只看该作者
打开链接脚本文件(通常以.ld结尾),如STM32F103VCTX_FLASH.ld。修改FLASH行的ORIGIN为新的起始地址,如0x08020000,并调整LENGTH为剩余Flash长度

使用特权

评论回复
7
别乱了阵脚| | 2025-6-9 18:30 | 只看该作者
修改system_stm32f1xx.c文件:找到或取消注释USER_VECT_TAB_ADDRESS宏定义

使用特权

评论回复
8
一秒落纱| | 2025-6-9 21:00 | 只看该作者
起始地址的话你需要修改中断向量表,你先用NVIC弄个2等级的,然后再试试修改位置

使用特权

评论回复
9
三生万物| | 2025-6-9 22:21 | 只看该作者
STM32F103的Cortex-M3内核在复位后,会从0x00000000地址读取初始堆栈指针和复位向量地址。但实际上,STM32通过内部机制将Flash的起始地址(如0x08000000)映射到0x00000000,因此直接设置SCB->VTOR为应用程序的Flash起始地址即可

使用特权

评论回复
10
冰春彩落下| | 2025-6-9 23:00 | 只看该作者
确保链接脚本(如.ld文件)正确配置了Main App的加载和执行地址。这通常涉及修改LR_IROM1、ER_IROM1等段的起始地址和大小

使用特权

评论回复
11
夜阑风雨| | 2025-6-10 11:00 | 只看该作者
在Bootloader中,需要编写代码来跳转到Main App。这通常涉及设置栈指针(MSP)和程序计数器(PC)到Main App的起始地址。

使用特权

评论回复
12
淡漠安然| | 2025-6-10 15:00 | 只看该作者
在Bootloader中,通常不需要修改SCB->VTOR,因为它负责跳转到Main App,而Main App的启动文件会正确配置SCB->VTOR。

使用特权

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

本版积分规则

23

主题

25

帖子

0

粉丝