你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32CubeMX生成的makefile,如何更改程序烧录地址?

[复制链接]
479799416 提问时间:2024-5-26 11:30 / 未解决
现在程序需要烧录到0x8008000的地址
如何更改makefile 和 STM32F103C8Tx_FLASH.ld文件 ,可以让程序正常的运行?


收藏 评论4 发布时间:2024-5-26 11:30

举报

4个回答
479799416 回答时间:2024-5-26 11:33:25

STM32F103C8Tx_FLASH.ldMakefile

xmshao 回答时间:2024-5-27 10:35:41
我觉得问题可能不是烧录地址的改写问题,在Makefile里给哪个地址都可以。但问题是,假设你把代码烧到0x8008000后,芯片复位后是不会直接从此处开始
运行程序的,因为默认起始地址是固定的,具体跟我们的boot配置有关。如果配置为从用户flash启动的话,程序首先是从0x8000000开始运行的,除非从这里跳
到指定的地方。
479799416 回答时间:2024-5-28 10:16:37

摸索了几天终于成功了,总结一下,板子是 stm32f103c8t6:

1 我用了 正点原子资料里的 IAP bootloader程序

void iap_load_app(uint32_t appxaddr) { if ((((volatile uint32_t )appxaddr) & 0x2FFE0000) == 0x20000000) / 检查栈顶地址是否合法.可以放在内部SRAM共64KB(0x20000000) / { / 用户代码区第二个字为程序开始地址(复位地址) / jump2app = (iapfun) (volatile uint32_t )(appxaddr + 4);

/* 初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址) */
sys_msr_msp(*(volatile uint32_t *)appxaddr);

/* 跳转到APP */
jump2app();

} }

在 jump2app();之前加了一些卸载外设的代码,结果出问题了,去掉以后可以正产跳转了,不知道为什么....

2 需要修改 STM32F103C8Tx_FLASH.ld 里

FLASH (rx) : ORIGIN = 0x8008000, LENGTH = 64K

3 在 Makefile 里 ,C_DEFS 追加宏定义 -DUSER_VECT_TAB_ADDRESS ,并修改 system_stm32f1xx.c里面 #define VECT_TAB_OFFSET 0x00008000U

4 我使用了 rtthread nano ,需要修改启动文件 startup_stm32f103xb.s 里

bl main 改为 bl entry

xmshao 回答时间:2024-5-28 17:17:31

479799416 发表于 2024-5-28 10:16
摸索了几天终于成功了,总结一下,板子是 stm32f103c8t6:</p>
<p>1 我用了 正点原子资料里的 IAP bootloader ...

[md]感谢反馈~!

除了RTOS和Makefile相关地方外,链接文件的修改以及VTOR的修改算是常规操作。

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版