背景描述:
假设当前的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程序那样就行。