Presentation is loading. Please wait.

Presentation is loading. Please wait.

《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:

Similar presentations


Presentation on theme: "《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:"— Presentation transcript:

1 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺: 技术论坛: 开源电子 网 公众平台:“正点原子” 官方网站: 联系电话: ddddd ALIENTEK 淘宝店铺: 技术论坛:

2 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
《手把手教你学STM32》 IAP基本原理 适用平台 STM32F1xx 开发板 (正点原子) STM32F4xx 开发板 (正点原子) ddddd 淘宝店铺: 技术论坛:

3 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
IAP基本原理 参考资料: 探索者STM32F4开发板 《STM32F4开发指南-库函数版本》-第55章 串口IAP实验 参考前面的视频“ FLASH闪存编程原理与步骤”了解STM32的FLASH操作知识。 淘宝店铺: 技术论坛:

4 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
目录 STM32 IAP介绍 1 IAP运作流程 2 IAP配置 3 实验程序讲解 4 淘宝店铺: 技术论坛:

5 淘宝店铺: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)。 在不需要操作硬件平台的情况下实现升级(远程)。 淘宝店铺: 技术论坛:

6 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 每种STM32芯片(M0,M3,M4),它们的主存储器结构可能不一样,但是他们都有一个叫“系统存储器”的区域,此区域是留给ST自己用来存放芯片的bootloader程序,此程序在芯片出厂的时候已经固化在芯片内部。 系统存储器的Bootloader程序会通过串口1接受应用程序。 淘宝店铺: 技术论坛:

7 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 STM32F40x/41x系列芯片系统存储器区域: 系统存储器:只留给ST用来写启动程序代码代码。启动程序代码通过串口1接口实现对闪存存储器的编程。 淘宝店铺: 技术论坛:

8 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 STM32F42x/43x系列芯片系统存储器区域: 系统存储器:只留给ST用来写启动程序代码代码。启动程序代码通过串口1接口实现对闪存存储器的编程。 淘宝店铺: 技术论坛:

9 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 STM32启动模式选择 淘宝店铺: 技术论坛:

10 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 ICP下载流程 串口1 B0接1,系统存储器被选为启动区域。启动代码从串口1接受程序,从地址0x 开始写入。 JTAG/SWD下载,直接下载到FLASH指定区域。 Bootloader (系统存储器) 0x …. 0x08xxxxxx JTAG/SWD 淘宝店铺: 技术论坛:

11 串口IAP介绍 IAP下载流程 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
IO,CAN,USB,UART,I2C,SPI等通信接口 串口1 Bootloader区域,此部分代码通过ICP方式下载。 应用程序BIN Bootloader (系统存储器) IAP应用程序存储区域。 0x …. 0x0807FFFF JTAG/SWD 淘宝店铺: 技术论坛:

12 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 一般的程序执行流程 淘宝店铺: 技术论坛:

13 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 STM32的内部闪存(FLASH)地址起始于0x ,一般情况下,程序文件就从此地址开始写入。 0x 开始存放中断向量表。 当中断来临,STM32的内部硬件机制亦会自动将PC指针定位到“中断向量表”处,并根据中断源取出对应的中断向量执行中断服务程序。 STM32复位后,从0X 地址取出复位中断向量的地址,并跳转到复位中断服务程序。 在复位中断服务程序执行完之后,会跳转到我们的main函数。 main函数执行过程中,如果收到中断请求(发生重中断),此时STM32强制将PC指针指回中断向量表处。 根据中断源进入相应的中断服务程序。 在执行完中断服务程序以后,程序再次返回main函数执行 淘宝店铺: 技术论坛:

14 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 加入IAP之后程序运行流程 淘宝店铺: 技术论坛:

15 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 STM32复位后,还是从0X 地址取出复位中断向量的地址,并跳转到复位中断服务程序,在运行完复位中断服务程序之后跳转到IAP的main函数。 在执行完IAP以后(即将新的APP代码写入STM32的FLASH,灰底部分。新程序的复位中断向量起始地址为0X N+M),跳转至新写入程序的复位向量表,取出新程序的复位中断向量的地址,并跳转执行新程序的复位中断服务程序,随后跳转至新程序的main函数,如图标号②和③所示。 在main函数执行过程中,如果CPU得到一个中断请求,PC指针仍强制跳转到地址 0X 中断向量表处,而不是新程序的 中断向量表 程序再根据我们设置的中断向量表偏移量,跳 转到对应中断源新的中断服务程序中。 在执行完中断服务程序后,程序返回main函数继续运行。 淘宝店铺: 技术论坛:

16 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 复位之后怎么跳转到main? 启动文件有定义:startup_stm32f40_41xxx.s ; Reset handler Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT SystemInit IMPORT __main LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP 淘宝店铺: 技术论坛:

17 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 IAP升级应用程序过程 1)检查是否需要对第二部分代码(实际的应用程序代码)进行更新    2)如果不需要更新则转到4)    3)执行更新操作    4)跳转到第二部分代码执行 我们将第一个项目代码称之为Bootloader程序,第二个项目代码称之为APP程序,他们存放在STM32 FLASH的不同地址范围,一般从最低地址区开始存放Bootloader,紧跟其后的就是APP程序(注意,如果FLASH容量足够,是可以设计很多APP程序的,本章我们只讨论一个APP程序的情况)。这样我们就是要实现2个程序:Bootloader和APP。 STM32的APP程序不仅可以放到FLASH里面运行,也可以放到SRAM里面运行。我们后面主要讲解FLASH情况,对SRAM原理一致。 淘宝店铺: 技术论坛:

18 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 IAP升级应用程序过程 bootloader 升级应用程序bin 跳转/软复位 APP应用程序 升级命令 淘宝店铺: 技术论坛:

19 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 IAP程序必须满足两个要求 新程序(APP)必须在IAP程序(bootloader)之后的某个偏移量为x的地址开始; 必须将新程序(APP)的中断向量表相应的移动,移动的偏移量为x; 淘宝店铺: 技术论坛:

20 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 APP程序的生成步骤: 设置APP程序的起始地址和存储空间大小 ② 设置中断向量表偏移量 设置SCB->VTOR的值即可。 ③ 设置MDK编译后运行fromelf.exe,生成.bin文件. 通过在MDK User选项卡,设置编译后调用fromelf.exe,根据.axf文件生 成.bin文件,用于IAP更新。 淘宝店铺: 技术论坛:

21 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 设置APP程序的起始地址和存储空间大小 FLASH_APP 淘宝店铺: 技术论坛:

22 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 设置APP程序的起始地址和存储空间大小 SRAM_APP 淘宝店铺: 技术论坛:

23 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 ② 中断向量表的偏移量设置方法 APP存放在FLASH中的设置方法 SCB->VTOR = FLASH_BASE | 0x10000; APP存放在SRAM中的设置方法 SCB->VTOR = SRAM_BASE | 0x1000; 淘宝店铺: 技术论坛:

24 淘宝店铺: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 淘宝店铺: 技术论坛:

25 淘宝店铺: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)==0x )//检查栈顶地址是否合法. jump2app=(iapfun)*(vu32*)(appxaddr+4);//用户代码区第二个字为程序开始地址(复位地址) MSR_MSP(*(vu32*)appxaddr); //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址) jump2app();//跳转到APP. } 淘宝店铺: 技术论坛:

26 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 软复位 //系统软复位 void Sys_Soft_Reset(void) { SCB->AIRCR =0X05FA0000|(u32)0x04; } static __INLINE void NVIC_SystemReset(void); 淘宝店铺: 技术论坛:

27 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
串口IAP介绍 分别讲解IAP程序和APP程序配置过程 淘宝店铺: 技术论坛:

28 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
谢谢您对“正点原子”团队的支持 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺: 技术论坛: 淘宝店铺: 技术论坛:


Download ppt "《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:"

Similar presentations


Ads by Google