STM32 IAP(Bootloader)

想给STM32做串口升级功能,研究STM32程序执行步骤。

1.STM32程序下载起始地址0x08000000,0x08000004这个地址是中断地址

2.先自己设计一个bootloader程序 ,然后再设计一个应用程序

3.给stm32 bootloader分配下载程序的空间,我用的是STM32F407ZGT6,具有1m的flash

 (1)bootloader:0x0800 0000 ~0x0800 4000   size:0x4000(16K)

STM32 IAP(Bootloader)_第1张图片

 (2)应用程序1:0x0800 4000 ~ 0x0808 0000 

STM32 IAP(Bootloader)_第2张图片

 (3)应用程序2:0x0808 0000~0x0810 0000   :基本上是把1Mflash平分了

4.设计bootloader程序

STM32 IAP(Bootloader)_第3张图片

STM32 IAP(Bootloader)_第4张图片

上面就是bootloader的程序,跟应用程序的区别就是flash烧写的起始地址区别。bootloader的主要功能就是让程序跳转

5.需要注意的地方

(1)注意:因为程序起始地点增加了bootloader功能,所以程序的中断指针也需要偏移。

NVIC_SetVectorTable(NVIC_VectTab_FLASH,APP1_ADDRESS);   //将这段代码放入应用程序中即可,如果不放的话会出现中断异常。

(2)注意:SystemInit();//这个函数,程序每次开始执行时都会执行一次这个函数,这个函数中就会对中断向量表位置进行默认偏移,所以在这个函数后面要重新配置一次偏移。

(3)后来我单一使用串口中断程序,发现进不了中断。最终发现是__set_PRIMASK(1);这个函数将能关闭的中断都关闭掉了,但是程序默认是开启的。

 

 

 

你可能感兴趣的:(单片机)