×
单片机 > 单片机程序设计 > 详情

关于STM32F4的IAP的一点点记录

发布时间:2020-08-27 发布时间:
|

看了原子的STM32的IAP 教程,一开始还以为bootloader是啥意思,差点跟uboot搞混淆了,其实stm32的“bootloader”不需要自己写汇编和链接脚本,Boot和App都是单片机程序,只是实现的功能不同,前者是为了引导App,后者是为了实现业务逻辑。只不过boot是有写flash或者sram的功能,再加上通信口(USB/USART etc. )来接收所谓的应用程序app代码。然后跳转到该代码执行就好了,但是要重新设置一下中断向量表的位置,要不然两个程序的中断可能会混淆。也就是说boot代码的中断要进boot代码的irq handler 而 app代码的中断要进app代码的irq handler。下边就以flash iap为例来具体说说需要注意的两点:


(1)boot代码和app代码在flash中的位置


两个代码都要正常运行那肯定不能在写入app代码到flash时把boot的代码给覆盖了,要不然boot代码就失效了。


STM32F429IG支持三种启动方式 


1. FLASH启动        上电复位后PC指针指向第一条指令位置——0x08000000
2. SRAM启动        上电复位后PC指针指向第一条指令位置——0X20000000
3. 系统存储器启动 上电复位后PC指针指向第一条指令位置——0X1FFF0000


程序的起始地址默认是被放在FLASH的起始地址处,即0x08000000。


下图为boot程序的flash设置:



boot程序的地址不需要更改就是用默认的地址,理论上我们只需要确保 APP 起始地址在 Boot 之后,并且偏移量为 0X200的倍数即可。


设置boot的占用64k(0x10000),就是0X08000000 ~ 0X08010000的flash区间。


该芯片flash共1M,则app占用的起始地址设置为: 0X08010000,size为:1M-64k =960K (0XF0000)。


以下为app程序的flash设置: 



(2)中断向量表的重定位


我们都知道一般情况STM32复位后从0x08000000开始取指,中断向量从0x08000004开始第一个为RESET向量 那APP工程的中断向量就不能如此了 APP的向量地址要从0x08010000开始:

NVIC_SetVectorTable(FLASH_BASE, 0x10000);


这里的0x10000根据实际情况更改即可。


关键字:STM32F4  IAP

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机制作超级流水灯