前段时间在弄stm32基于GMS的固件升级,在网上查了很多资料,知道个大概。现在把我遇到的一些问题记录下来,和大家一起分享。
第一次写技术博客,高手勿喷!!!!
stm32IAP可以说分为两部分:bootloader+APP(我们平时烧录进单片机的程序)。启动过程大概是这样:1stm32上电,进入bootloader程序。2检测是否需要固件升级,如果需要,则通过USART,CAN,网络等收到hex或者bin流,用flash编程写进后面的flash中。3如果不需要升级则跳到APP程序。
在这里先说说关于stm32统一编址,stm32的寻址范围是2的32次方,也就是4G。我的用户flash的起始地址为0x0800 0000,SRAM的起始地址为0x2000 0000。那么0x0000 0000-0x07FF FFFF这段空间其实是根据我们boot1和boot0的选择确定是从flash启动还是从SRAM启动的,换句话说也就是将flash或者SRAm的地址映射过来的。
bootloader:首先我们要知道自己所用的cpu的flash和SRAM空间,我的是stm32F103,256Kflash,48KSRAM,弄清楚这个可以合理的分配bootloader和APP的空间。我在我的项目中分给bootloader的空间是0x8000,也就是32Kflash来存放bootloader。剩余的0x0380 0000的空间我用来存放APP(起始地址为0x0800 8000)。
关键代码:
#define ApplicationAddress1 0x08008000 //应用程序起始地址
</