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程序会正常运行

相关推荐
LCG元8 小时前
STM32F103 驱动 HX711 称重实战:DOUT 就绪时序、增益切换陷阱与两点标定精度实测
stm32·单片机·嵌入式硬件
染予8 小时前
代码中相关C语言知识点总结
stm32
优信电子9 小时前
STM32 驱动 DHT30 测量环境温湿度(兼容SHT30):从时序解析到完整代码实战
stm32·嵌入式·传感器·sht30·温湿度·环境测量·dht30
小李不想当小白10 小时前
DMA直接存储器存取(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·分享
Zw-awa16 小时前
点亮第一盏 LED:STM32 的 GPIO 到底在控制什么
stm32
Brilliantwxx19 小时前
【STM32】 SPI阻塞式通信与HAL源码(串口读ID实战)
开发语言·stm32·单片机·嵌入式硬件·ecmascript
endeavor1219 小时前
BootLoader与OTA学习(三)
c语言·stm32
zhangzhangkeji19 小时前
stm32 参考文档的目录结构 - 3:STM32F10xxx参考手册(中文).pdf,700多页
stm32·arm
暖焰核心20 小时前
GPIO ——从端口位电路到八种工作模式
stm32
星栖与芯20 小时前
LiteOS-M 切换汇编逐行图解(5):HalPendSV 任务切换的现场搬运(五阶段逐行)
汇编·stm32·嵌入式硬件·harmonyos