标题:
STM32的BootLoader 从SD卡更新固件(3)
[打印本页]
作者:
yuyang911220
时间:
2015-3-29 12:04
标题:
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
写入
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0