淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 开源电子 网 公众平台:“正点原子” 官方网站:www.alientek.com 联系电话:13922348612 ddddd ALIENTEK 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 《手把手教你学STM32》 串口IAP实验 适用平台 STM32F1xx 开发板 (正点原子) STM32F4xx 开发板 (正点原子) ddddd 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com IAP基本原理 参考资料: 探索者STM32F4开发板 《STM32F4开发指南-库函数版本》-第55章 串口IAP实验 参考前面的视频“ FLASH闪存编程原理与步骤”了解STM32的FLASH操作知识。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 目录 STM32 IAP介绍 1 IAP运作流程 2 IAP配置 3 实验程序讲解 4 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 串口IAP介绍 STM32编程方式: 在线编程(ICP,In-Circuit Programming): 通过JTAG/SWD协议或者系统加载程序(Bootloader)下载用户应用程序到微控制器中。 ② 在程序中编程(IAP,In Application Programming): 通过任何一种通信接口(如IO端口,USB,CAN,UART,I2C,SPI等)下载程序或者应用数据到存储器中。也就是说,STM32允许用户在应用程序中重新烧写闪存存储器中的内容。然而,IAP需要至少有一部分程序已经使用ICP方式烧到闪存存储器中(Bootloader)。 在不需要操作硬件平台的情况下实现升级(远程)。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 串口IAP介绍 STM32F40x/41x系列芯片系统存储器区域: 系统存储器:只留给ST用来写启动程序代码代码。启动程序代码通过串口1接口实现对闪存存储器的编程。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 串口IAP介绍 STM32启动模式选择 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 串口IAP介绍 ICP下载流程 串口1 B0接1,系统存储器被选为启动区域。启动代码从串口1接受程序,从地址0x08000000开始写入。 JTAG/SWD下载,直接下载到FLASH指定区域。 Bootloader (系统存储器) 0x08000000 …. 0x08xxxxxx JTAG/SWD 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 IAP下载流程 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com IO,CAN,USB,UART,I2C,SPI等通信接口 串口1 Bootloader区域,此部分代码通过ICP方式下载。 应用程序BIN Bootloader (系统存储器) IAP应用程序存储区域。 0x08000000 …. 0x0807FFFF JTAG/SWD 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 串口IAP介绍 APP程序的生成步骤: 设置APP程序的起始地址和存储空间大小 ② 设置中断向量表偏移量 设置SCB->VTOR的值即可。 ③ 设置MDK编译后运行fromelf.exe,生成.bin文件. 通过在MDK User选项卡,设置编译后调用fromelf.exe,根据.axf文件生 成.bin文件,用于IAP更新。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 串口IAP介绍 设置APP程序的起始地址和存储空间大小 FLASH_APP 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 串口IAP介绍 设置APP程序的起始地址和存储空间大小 SRAM_APP 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 串口IAP介绍 ② 中断向量表的偏移量设置方法 APP存放在FLASH中的设置方法 SCB->VTOR = FLASH_BASE | 0x10000; APP存放在SRAM中的设置方法 SCB->VTOR = SRAM_BASE | 0x1000; 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 串口IAP介绍 ③设置MDK编译后运行fromelf.exe,生成.bin文件. D:\tools\mdk5.14\ARM\ARMCC\bin\fromelf.exe --bin -o ..\OBJ\RTC.bin ..\OBJ\RTC.axf 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 串口IAP介绍 关键程序段分析 typedef void (*iapfun)(void); //定义一个函数类型的参数. iapfun jump2app; //跳转到应用程序段 appxaddr:用户代码起始地址. void iap_load_app(u32 appxaddr) { if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)//检查栈顶地址是否合法. jump2app=(iapfun)*(vu32*)(appxaddr+4);//用户代码区第二个字为程序开始地址(复位地址) MSR_MSP(*(vu32*)appxaddr); //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址) jump2app();//跳转到APP. } 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 串口IAP介绍 软复位 //系统软复位 void Sys_Soft_Reset(void) { SCB->AIRCR =0X05FA0000|(u32)0x04; } static __INLINE void NVIC_SystemReset(void); 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 串口IAP介绍 分别讲解IAP程序和APP程序配置过程 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 谢谢您对“正点原子”团队的支持 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com