首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

STM32的BootLoader 从SD卡更新固件(3)

STM32的BootLoader 从SD卡更新固件(3)

打开TargetOption...,切换到User选项卡,如下
从SD卡更新固件">
主要是在运行用户命令,Run#1
从SD卡更新固件">
具体命令是(记得在Run#1前打勾,才会在编译后执行用户命令生成bin文件):
C:\Keil\ARM\ARMCC\bin\fromelf.exe
--bin
-o
.\Output\MY_STM32.bin
.\Output\MY_STM32.axf
命令可以分为五部分,简化后是fromelf --bin  -o xxx.bin  xxx.axf,需要注意的是命令的五个部分之间要有空格。还需要说明的是路径问题,这里的路径都是相对.uvproj文件的,下面是我的目录(注意MY_STM32.uvproj文件和Output文件夹)。
从SD卡更新固件">
我的bin文件和axf文件都在Output文件夹里面,并且路径是相对MY_STM32.uvproj的,Output文件夹里的bin文件(MY_STM32.bin)相对于MY_STM32.uvproj应该写成“.\Output\MY_STM32.bin”
l      第一部分
这部分是fromelf.exe文件的路径,根据自己的安装目录而变。我这里因为Keil是安装在C盘的,所以我的路径如下所示。
参考命令:C:\Keil\ARM\ARMCC\bin\fromelf.exe
l      第二部分
这部分是固定的,--bin表示生成bin文件。
参考命令:--bin
l      第三部分
这部分也是固定的,-o表示输出。
参考命令:-o
l      第四部分
这部分是生成文件的目录和文件名,我是输出在Output文件夹的,也就是bin文件在Output文件夹里面。
参考命令:.\Output\MY_STM32.bin
l      第五部分
这部分是axf文件的目录和文件名,我们的bin文件是根据axf文件生成的,也就是说axf文件相当于输入,bin文件相当于输出。我的axf文件也在Output文件夹的。
参考命令:.\Output\MY_STM32.axf
介绍了这些基本知识后,我们可以来实现BootLoader了。


4. 分几步实现BootLoader有了前面的基础知识后,应该是比较容易理解BootLoader需要怎么实现了。这一章,我们分几个步骤,一步一步实现BootLoader
4.1       FAT文件系统我们的BootLoader是从SD卡更新程序的,把在电脑上编译后的App程序,也就是bin文件,复制到SD卡中,然后让单片机读取相应的bin文件,就可以实现程序的更新。需要注意的是,App程序需要修改ROM的起始地址,再编译,并且要生成bin文件才支持正常下载。
我跑的文件系统是FATFS_R0.07c,很经典的一个版本。如果大家对文件系统方面不了解的话,请自己网上查找教程,或者说很多同学对这一步应该已经很熟悉啦。
只要单片机上实现读取bin文件,结合Flash写入程序,就可以实现程序更新。下面介绍读写Flash
4.2       读写Flash程序要实现BootLoader,还有一个前提是可以写入Flash了。如果是STM32单片机的话是很容易实现的,因为我们有官方库。本人使用的是3.0.0版本,参考官方例程,很容易实现Flash的读写,这里同样是为了实现BootLoader简单介绍一下。
4.2.1   Flash写入步骤l      解锁Flash
l      擦除Flash
l      写入Flash
l      验证读写是否正确
4.2.2   读写Flash调用的库函数l      voidFLASH_Unlock(void)                                     Flash解锁
l      FLASH_Status FLASH_ErasePage(uint32_tPage_Address)           Flash擦除
l      FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_tData)  Flash写入
继承事业,薪火相传
返回列表