首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
MCU 单片机技术
»
ARM
» STM32的BootLoader 从SD卡更新固件(3)
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
STM32的BootLoader 从SD卡更新固件(3)
发短消息
加为好友
yuyang911220
当前离线
UID
1029342
帖子
9914
精华
0
积分
4959
阅读权限
90
在线时间
286 小时
注册时间
2014-5-22
最后登录
2017-7-24
论坛元老
UID
1029342
性别
男
1
#
打印
字体大小:
t
T
yuyang911220
发表于 2015-3-29 12:04
|
只看该作者
STM32的BootLoader 从SD卡更新固件(3)
BootLoader
打开
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
写入
收藏
分享
评分
继承事业,薪火相传
回复
引用
订阅
TOP
返回列表
资料共享
FPGA/CPLD可编程逻辑
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议