Bootloader+APP调试技巧

当单片机已下载过bootloader程序后,我们在编写应用程序时,无法直接使用keil的下载和在线调试功能,这非常不方便,只需执行一个小设置,即可完美解决,就像没有bootloader一样

1 设置中断向量

这个步骤在任何需要bootloader的项目都需要设置

打开startup_stm32f429xx.s文件,找到语句 LDR R0, =SystemInit,大概在第180行附近,在这句之前添加以下代码:

c 复制代码
	;/* 在调用SystemInit之前先设置VTOR */
    LDR R0, =0x08080000      ; 应用程序起始地址
    LDR R1, =0xE000ED08      ; SCB->VTOR地址
    STR R0, [R1]             ; SCB->VTOR = 0x08080000

为什么要在这里设置?

有些资料中说在进入main函数之后执行,如下:

这种方法有些情况下没有问题,但单片机启动后实际会先执行SystemInit函数,再进入main函数,这个过程如果发生中断,则PC会跳转到错误的地址,引起程序崩溃,所以最好尽早设置VTOR。

有些情况下,即使在.s中设置了VTOR,程序仍然可能会死机,这可能是由于SystemInit函数中重置了VTOR,此时,只要在main函数中也添加设置VTOR即可解决。

设置程序偏移:

2 修改编程算法

keil下载时默认从0x08000000处开始擦除和编程,通过下面一步设置,可使编程操作跳过bootloader所在区域

注意size不要设置地小于应用程序大小

现在可以直接下载了,在线调试也不受影响,bootloader程序会正常运行

相关推荐
jghhh018 小时前
STM32 在线升级 IAP(远程固件升级)方案
stm32
都在酒里12 小时前
FreeRTOS 手动移植教程(四):队列 —— 任务间通信的最佳起点
stm32·单片机·rtos
都在酒里13 小时前
FreeRTOS 手动移植教程(二):任务管理——多任务创建、优先级抢占与删除
stm32·单片机·嵌入式硬件·rtos
都在酒里14 小时前
FreeRTOS 手动移植教程(五):信号量 —— 任务同步与中断通知的优雅解决方案
stm32·单片机·rtos·嵌入式软件
2601_9611940215 小时前
考研政治历年真题及解析pdf
stm32·单片机·嵌入式硬件·物联网·考研·pdf
今日待办15 小时前
STM32H747I-DISCO 开发指南【数字麦克风使用】
stm32·单片机·嵌入式硬件
嵌入式ZYXC16 小时前
第7章:原理图设计与阅读——从“能看懂”到“会画”的关键一跃
stm32·单片机·嵌入式硬件·物联网
破晓单片机16 小时前
007、STM32单片机分享:宠物喂食器系统
stm32·单片机·嵌入式硬件
嵌入式小站16 小时前
STM32 零基础可移植教程 16:ADC + DMA 连续采样,为什么不用 CPU 一直搬数据
stm32·单片机·嵌入式硬件
抓虾爪16 小时前
STM32F407VGT6一站式配齐丨粤科源兴ST分销商,同系列F4/F7/H7均可配套
stm32·单片机·嵌入式硬件