为方便产品出厂后,用户可以通过外设接口如USB,USART对设备进行升级,通常会有一段引导代码,在开机的时候从Boot启动,启动通过与上位机通信是否需要升级,如果没有升级就直接跳转到APP空间,及一个超循环体中(无操作系),boot程序一般放在flash开始出0x08000000处,用户可以在此处放入boot代码,处理上位机发送过来代码段数据,通过操作flash将我们的APP放到指定偏移地址,烧写完毕后,可以自动跳转到对应的地址开始执行应用程序APP;应用程序如果通过在线烧写st-link烧写,需要将keil编译选项中的rom地址改为0x08002000,0x2000就是APP存放代码的偏移地址,并且还需要再代码中将我们的中断向量偏移到0x2000处;
NVIC_VectTableSet(NVIC_VECTTAB_FLASH, 0x2000);//将中断向量表初始化
从boot跳转到APP空间的函数可以参考如下代码段,在跳转前,必须先关闭掉所有可能产生中断的外设,如下面的定时器,因为在跳转后,app如果还未重新定义中断向量表,此时产生的中断就会让程序跑飞,必须关闭:
void Go_APP(void)
{
u32 JumpAddress;