STM32 IAP功能实现学习笔记 ---详细说明

STM32 IAP功能实现学习笔记  

最早接触STM32的时候就了解到,stm32有IAP功能,但是一直没有用到,最近公司项目中用到了,我才详细的学习了这个功能,学完之后感觉这个功能很好用,也很实用,特此写下来,做个笔记,同时也希望能帮助到所有的热爱单片机的人;。


直奔主题把,最初我做了一个小实验,具体内容是:

1.写两个小程序,编译完毕生成两个bin文件

2.用stm官方提供的flashloader 下载到单片机内,不过这里需要注意的是第二个bin文件的下载地址需要更改,具体怎么改后面介绍

3.通过某种触发方式,让单片机在两个程序之间来回切换

上面是我实验的内容,在做这个小实验的前提是你必须知道怎么在两个程序之间跳转,其次你也必须知道bin文件的生成,以及生成之前工程选项的设置,最后肯定是怎么下载到单片机内。

 

一、跳转代码的实现

从官方网站上下载了IAP例子,从中摘取了一下代码用在项目中,其他的没有用,只需核心部分。

if (((*(volatile uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)

{

JumpAddress = *(volatile uint32_t*)(ApplicationAddress + 4);

Jump_To_Application = (pFunction)JumpAddress;

__set_MSP(*(volatile uint32_t*)ApplicationAddress);    //初始化用户程序的堆栈指针 

Jump_To_Application();

}

ApplicationAddress 是你要跳转的那个代码存放的首地址,我代码里是

#define  ApplicationAddress1     0x08008000    //应用程序起始地址 

JumpAddress = *(volatile uint32_t*)(ApplicationAddress + 4);  这句话的意思执行的结果是,打开bin文件偏移四个字节后的一个uint32数据,具体是为什么取这个数,对bin文件感兴趣的朋友可以自己研究一下。如果你这段代码实在不理解,不过没关系,你只需要添加进去就行了,呵呵

                                            0x08000000 -----------------------------------------

|

|      程序1

|

|

   0x08008000  -----------------------------------------

|

|

|      程序2

|

|

-----------------------------------------

程序1和我们普通的代码一样不需要设置中断偏移量,工程选项也不需要设置,程序2需要设置,设置流程如下:


将里面原来的数据0x8000000改为0x8008000,不一定非要是这个,我只是害怕小了重叠,官网给的是 0x8004000,

同时在你的代码里加上中断偏移设置为0x8000

    #ifdef  VECT_TAB_RAM  

    // Set the Vector Table base location at 0x20000000 

    NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 

    #else  /* VECT_TAB_FLASH  */

    // Set the Vector Table base location at 0x08000000 

    //NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000);   

    #endif

二、bin文件的生成

 填入的内容和你工程路径有关系,我的是:

fromelf --bin --output E:\STM32_IAP\2\Project\output\Proj1.bin E:\STM32_IAP\2\Project\output\Proj1.axf

当然了,两个代码,肯定路径也是不一样,调试的时候发现 这个axf文件名和bin文件名必须和下面图片中的名字一直,否则生成bin文件错误

 

如果编译完毕显示如下信息,说明你的bin文件生成正确了,


 三、bin文件的下载过程

 

 点击下一步  next,直到出现下面界面


 先擦出一下整个芯片,然后载入代码1对应的bin文件,


 注意看地址,第一个代码设置的为 8000000,第二个为你代码中的地址,我的为8008000,第二个代码下载截图如下,

 

代码可以到我csdn帐号中下载,免费的,连接为http://download.csdn.net/detail/likang123321/5318910

 

通过上面的介绍,相信离远程更新已经不远了,大家根据具体情况可以具体应用,

 

当你下载连个代码到单片机内后,上电运行的是第一个,此时你发送0xaa到串口,代码会跳转到代码2,继续发送0xaa单片机会回到代码1执行,我感觉很有趣,希望本文能够让更多i的电子爱好者了解IAP,谢谢阅读,有什么不足之处,请广大大神提出宝贵的意见,共同学习中……

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值