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

相关推荐
小李不想当小白4 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
LCG米5 小时前
STM32驱动W5500以太网模块实测:TCP吞吐瓶颈定位、TX指针回绕陷阱与断线重连保活落地
stm32·单片机·嵌入式硬件·tcp/ip
创界工坊工作室6 小时前
63-基于STC89C52霍尔传感器的智能化电能表设计
stm32·单片机·嵌入式硬件·51单片机·proteus
意法半导体STM329 小时前
【官方原创】LAT6048 如何扩大MP2的A35核和M33核共享内存
stm32·单片机·嵌入式硬件·内存映射·stm32mp2
en.en..9 小时前
STM32(F429)启动模式与两种烧录方式
stm32·单片机·嵌入式硬件
Zw-awa9 小时前
从 printf 到曲线:把数据送上 VOFA+
stm32
【 STM32开发 】11 小时前
【CubeMX+STM32】SD卡 文件系统读写 FatFs+SDIO+DMA (F103版本)
stm32·单片机·嵌入式硬件·1024程序员节
‎ദ്ദിᵔ.˛.ᵔ₎12 小时前
STM32 USART 串口
stm32·单片机·嵌入式硬件
LCG米1 天前
STM32 ADC多通道DMA定时器触发实测:TRGO触发链、采样率精确控制与乒乓缓冲落地
stm32·单片机·嵌入式·adc
youcans_1 天前
【嵌入式软件AI编程】22. STM32 基础实验:GPIO外部中断
stm32·单片机·嵌入式硬件·ai编程·claude