STM32F407VET6单片机的IAP技术---APP部分

背景描述:

假设当前的APP起始地址要修改为0x8010000。

假设依赖F407的串口1进行固件升级(PA9,PA10)

只需要3个步骤

1-NVIC向量表偏移

如果在bootloader中跳转到的APP地址是0x8010000,那么我们只要把VECT_TAB_OFFSET的宏修改为0x10000就可以了;

默认的NVIC地址是 VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET;即: 0x8000000 | 0x000000

修改后的NVIC地址:0x8010000

实现方法通常有2钟:

1)在system_stm32f4xx.c中修改 函数SystemInit();

2)在main函数中初始化之前添加:

SCB->VTOR = 0x8000000 |0x10000 ;

2-配置keil魔术棒

把默认的程序起始地址改为0x8010000,大小依据情况分配

3-业务逻辑中添加RESET功能

注意:

1)复位时直接使用HAL_NVIC_SystemReset();就行;

不能使用Reset_Handler( );//因为Reset_Handler( );会跳转到APP的起始地址0x8010000,不会跳转到bootloader的起始地址。

2)串口1回复boot V\r\n 或者不回复,因为用来测试的上位机是网上找的,不是我开发的。

4.补充:

其他部分不用改,就像平时写APP程序那样就行。

相关推荐
rit84324991 小时前
STM32 + DS3231 + TM1640 实时时钟数码管显示系统
stm32·单片机·嵌入式硬件
小懒懒️2 小时前
嵌入式常见通信协议学习——UART
stm32·uart·通信协议
zjxtxdy2 小时前
STM32开发
stm32·单片机·fpga开发
BT-BOX2 小时前
STM32简易数字电流表仿真_LCD1602显示
stm32·电流测量·lcd1602显示·电流表
集和诚JHCTECH2 小时前
BRAV-7120加持,让有毒有害气体无处遁形
大数据·人工智能·嵌入式硬件
LCG元3 小时前
STM32实战:基于STM32F103的I2C通信(AT24Cxx EEPROM读写)
stm32·单片机·嵌入式硬件
徐某人..3 小时前
基于i.MX6ULL平台的智能网关系统开发
arm开发·c++·单片机·qt·物联网·学习·arm
星恒讯工业路由器5 小时前
MCU+WiFi与CPU+WiFi模块区别
单片机·嵌入式硬件
LCMICRO-133108477465 小时前
长芯微LD7940完全P2P替代AD7940,是一款14位、逐次逼近型模数转换器(ADC)
单片机·嵌入式硬件·fpga开发·硬件工程·dsp开发·模数转换器adc
进击的小头6 小时前
20_第20篇:嵌入式外设驱动开发基础:寄存器级开发与库函数开发对比实战
arm开发·驱动开发·单片机