[STM32F1] 如何更改项目的起始地址

[复制链接]
 楼主| 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
暖了夏天蓝了海 发表于 2025-6-9 15:32 | 显示全部楼层
确保在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的地址,并正确配置中断向量表
江河千里 发表于 2025-6-9 16:30 | 显示全部楼层
若在system_stm32f1xx.c中找不到VECT_TAB_OFFSET或SCB->VTOR相关定义,可修改IROM1的起始地址,例如将Bootloader的起始地址设为0x08000000,Main App的起始地址设为0x08020000(假设预留10KB空间给Bootloader)。同时,需要相应调整芯片Flash大小,减去偏移量
光辉梦境 发表于 2025-6-9 18:00 | 显示全部楼层
打开链接脚本文件(通常以.ld结尾),如STM32F103VCTX_FLASH.ld。修改FLASH行的ORIGIN为新的起始地址,如0x08020000,并调整LENGTH为剩余Flash长度
别乱了阵脚 发表于 2025-6-9 18:30 | 显示全部楼层
修改system_stm32f1xx.c文件:找到或取消注释USER_VECT_TAB_ADDRESS宏定义
一秒落纱 发表于 2025-6-9 21:00 | 显示全部楼层
起始地址的话你需要修改中断向量表,你先用NVIC弄个2等级的,然后再试试修改位置
三生万物 发表于 2025-6-9 22:21 | 显示全部楼层
STM32F103的Cortex-M3内核在复位后,会从0x00000000地址读取初始堆栈指针和复位向量地址。但实际上,STM32通过内部机制将Flash的起始地址(如0x08000000)映射到0x00000000,因此直接设置SCB->VTOR为应用程序的Flash起始地址即可
冰春彩落下 发表于 2025-6-9 23:00 | 显示全部楼层
确保链接脚本(如.ld文件)正确配置了Main App的加载和执行地址。这通常涉及修改LR_IROM1、ER_IROM1等段的起始地址和大小
夜阑风雨 发表于 2025-6-10 11:00 | 显示全部楼层
在Bootloader中,需要编写代码来跳转到Main App。这通常涉及设置栈指针(MSP)和程序计数器(PC)到Main App的起始地址。
淡漠安然 发表于 2025-6-10 15:00 | 显示全部楼层
在Bootloader中,通常不需要修改SCB->VTOR,因为它负责跳转到Main App,而Main App的启动文件会正确配置SCB->VTOR。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

45

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部