stm32 IAP APP 相互跳转实验 (keil4 jlink STM32F407ZE

时间:2024-04-04 14:19:56

1、实验目标:   STM32 IAP学习时,希望有一个快捷的方式去实验IAP与APP之间的相互跳转。

                        1)验证IAP跳转至APP    2)验证APP通过软件reset跳转至IAP   

                      (避免再一开始就实验完整的IAP过程,编写BootLoader,编写 APP,再通过PC工具下载APP代码,然后再看是否能正常更新,过程很长,新学时可能遇到的障碍太多 )

 

2、实验方法: 分别编写BootLoader 和 APP程序(两个程序仅仅简单的完成串口打印和跳转工作,不设计其他功能(如接受bin文件件,更新flash等功能都不包含)),通过串口打印识别区分IAP 和APP程序。

                     分别通过jlink在线调试的方式,先后将IAP程序和APP程序下载至STM32,实现IAP/APP实验的在线调试

 

3、IAP 代码实现:

stm32 IAP APP 相互跳转实验 (keil4 jlink STM32F407ZE

IAP主要流程如上图,进入IAP后初始化,然后打印数据,等待,随后跳转至APP

 

4、APP代码实现

stm32 IAP APP 相互跳转实验 (keil4 jlink STM32F407ZE

APP代码流程 初始化,打印,delay,跳转至IAP。

此处需要特别注意一点,APP程序在线调试时,发现会死在串口发送上。后来在UART初始化时,先将其disable,然后再enable来规避这个问题。

stm32 IAP APP 相互跳转实验 (keil4 jlink STM32F407ZE

 

以上说明一个值得注意的问题,IAP程序在跳转至APP程序时,可能有些状态是没有清楚的,导致APP程序在运行时引入异常,针对这类问题,APP程序的在线调试方法就非常有用的,直接在线调试可以快速定位问题。

 

5、IAP程序的在线调试

设置好ROM1即可,不需要太多配置。

stm32 IAP APP 相互跳转实验 (keil4 jlink STM32F407ZE

 

没有下载过APP程序的情况下,iap_load_app(FLASH_APP1_ADDR);程序不会真的跳转,会回到IAP程序继续执行。

stm32 IAP APP 相互跳转实验 (keil4 jlink STM32F407ZE

 

6、APP在线调试

APP程序的在线调试非常关键,因为APP程序的地址不是默认地址,仅仅设置ROM1的情况下,在线调试时依然会默认进IAP程序,无法进行在线调试。

KEIL4需要完成的设置如下:

1)设置flash地址空间,ROM1

stm32 IAP APP 相互跳转实验 (keil4 jlink STM32F407ZE

 

2)设置flash download 地址

stm32 IAP APP 相互跳转实验 (keil4 jlink STM32F407ZE

 

3) 配置debug信息

stm32 IAP APP 相互跳转实验 (keil4 jlink STM32F407ZE

添加ini file 。(我认为这个ini文件是在在线调试的入口调用的,这样做可以使得在线调试直接从APP的入口处开始执行,这样的话就可以直接对APP进行debug)

stm32 IAP APP 相互跳转实验 (keil4 jlink STM32F407ZE

 

设置完以上的数据,IAP程序debug无误后,再进行APP的在线调试,如下图:

设断点,串口直接打印APP INIT说明debug是直接从APP程序的入口处开始的(0x08010000)

stm32 IAP APP 相互跳转实验 (keil4 jlink STM32F407ZE

 

连续运行的效果如下图:

stm32 IAP APP 相互跳转实验 (keil4 jlink STM32F407ZE

 

7、特别鸣谢

http://www.stmcu.org/module/forum/thread-380078-1-1.html