您的位置 首页 产品

STM32 IAP功用完成学习笔记

最早接触STM32的时候就了解到,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,谢谢阅览,有什么不足之处,请广阔大神提出名贵的定见,一起学习中……

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/chanpin/115107.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部