新手上路
- 积分
- 27
- 金钱
- 27
- 注册时间
- 2018-9-7
- 在线时间
- 9 小时
|
楼主 |
发表于 2024-5-28 10:17:08
|
显示全部楼层
摸索了几天终于成功了,总结一下,板子是 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 |
|