您的位置 首页 开关

浅析STM32 Bootloader规划

不需要拆机就能对产品进行固件升级是很多人想要的效果,不仅方便而且节省精力和成本。那么如何完成这项工作呢?接下来所介绍的Bootloader就可以完成这项工作,通过Bootloader引导程序完成固件的

  不需求拆机就能对产品进行固件晋级是很多人想要的作用,不只便利并且节约精力和本钱。那么怎么完结这项作业呢?接下来所介绍的Bootloader就能够完结这项作业,经过Bootloader引导程序完结固件的晋级。下面来浅析STM32 Bootloader规划。

  规划思维

  由Bootloader担任检测SD卡中是否有固件更新所需的BIN文件。假如检测到所需求的BIN文件,则开端仿制文件更新固件。更新完毕后跳转到指定的地址开端履行最新的程序。能够在论坛的ARM版块找到liklon的帖子:两份简略的 Bootloader 程序。链接为:http://forum.eepw.com.cn/thread/238997/1帖子里现已同享了两份简略的STM32 Bootloader程序,一份是使用znFAT进行SD卡上文件操作,第二份是使用FATFS进行文件操作。

  常识关键

  STM32内部FLASH的开端地址为0X08000000,Bootloader程序文件就从此地址开端写入,寄存APP程序的首地址设置在紧跟Bootloader之后。当程序开端履行时,首要运转的是Bootloader程序,此刻Bootloader检测SD卡中的BIN文件并将其仿制到APP区域使固件得以更新,固件更新完毕后还需求跳转到APP程序开端履行新的程序,完结这最终这一步要了解Cortex-M3的中止向量表:

  程序发动后,将首要从“中止向量表”取出复位中止向量履行复位中止程序完结发动,当复位中止程序运转完结后才跳转到main函数。由此可见,在最终一步的规划中需求依据寄存APP程序的开端地址以及中止向量表来设置栈顶地址,并获取复位中止地址跳转到复位中止程序。接下来开端剖析程序规划过程。

  Bootloader程序规划

  1.确认寄存APP程序的首地址

  #define FLASH_APP_ADDR 0x08010000 //应用程序开端地址(寄存在FLASH)上一句代码中是0X08010000能够看出,留给Bootloader程序的存储空间巨细为64K。寄存APP程序的开端地址为0X08010000。

  2.Bootloader检测是否有BIN文件

  gCheckFat = f_open(&FP_Struct,"/APP/LIKLON.BIN",FA_READ);//判读gCheckFat确认上面的代码是检测是否存在liklon.bin这个文件存在,其间liklon.bin文件便是固件晋级所需求的BIN文件。

  3.仿制文件到指定地址

  上一步中假如gCheckFat为0则表明存在所需BIN文件,则能够履行这一步。f_read (&FP_Struct,ReadAppBuffer,512,(UINT *)&ReadNum); //读取512个字节将512个字节转换为256个16位的数据寄存在ChangeBuffer数组中,预备写入FLASH。FlashWrite(FLASH_APP_ADDR + i * 512,ChangeBuffer,256); //向指定地址写入读出数据向APP程序区写入512个字节的数据。依照这样读取写入,就能够完结对APP程序区的更新。

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部