论坛首页
任务活动
问答
论坛专题
登录
注册
铁血丹心LLLL
+ 关注
粉丝
1
|
主题
76
|
回帖
543
加好友
私信
帖子
主题
回复
评论
STM32/GD32 IAP/Bootloader升级APP
2022-11-23 15:40
灵动MM32 MCU
26
1274
Bootloader升级APP 从串口接收到hex文件的一行,校验后调用以下函数写入FLASH。以下是简单的一个写入流程 ...
需要特别注意的是,如果使能了Systick等内核级别的中断,用__disable_irq(); 之类的屏蔽中断的语句是无法关 ...
跳转前关闭中断,防止 1)已经跳转到APP了但来了一个中断并落在了Bootloader, 2)中断向量表已偏移但来了 ...
application为一个void类型的函数指针,并将其指向Reset_Handler的地址。application()表示执行指针指向的 ...
跳转到APP不是跳转栈顶指针,而是跳转Reset_Handler,而Reset_Handler在栈顶指针后,所以需要偏移32位。 ...
(0x20000000 == (((__IO uint32_t)APP_LOADED_ADDR) & 0x2FFE0000)) 表示的是从地址0x5000取出栈顶指针,通 ...
所以如果正确写入了APP,则 地址 (__IO uint32_t *)APP_LOADED_ADDR 处的栈顶指针必然在该型号单片机的SRAM ...
宏 APP_LOADED_ADDR 是APP的起始地址,而APP程序的起始是栈顶指针。 为什么加载地址不是0x8005000? 因为选 ...
升级APP完成后,调用如下代码 @ CSDN Tyrion.Mon /* APP栈顶指针合法 */ if (0x20000000 == ((*(__IO uint ...
定义如下数据 @ CSDN Tyrion.Mon #define APP_LOADED_ADDR 0x5000 //APP加载地址 typedef void (* ...
Bootloader跳转APP 跳转前需要检查APP的栈顶指针是否合法、关闭所有中断、重设栈顶指针、偏移中断向量表( ...
......
......
同样的,在APP中也可升级Bootloader,但一般不需要。 Bootloader的功能尽量单一,大小尽量小,且占用的地址 ...
Bootloader在前:单片机上电时先运行Bootloader,等待升级指令。无指令时计时,超时进入APP;有升级指令, ...
例如如下划分
......
烧写地址设置 在Keil MDK中,对Cortex-M3/4已经默认了程序烧录起始地址是0x08000000,并且可以选择在烧写 ...
加上以上代码以输出Flash地址的值,烧写程序之后,对比hex文件和打印结果 Flash支持16位半字写入和32 ...
Hex数据域 @ CSDN Tyrion.Mon for (i = 0; i < 10; i++) { printf("%x, ", *((uint32_t *)0x800000 ...
前一页
14
15
16
17
18
19
20
后一页
2
3
近期访客