你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32实战经验】STM32F103二次bootloader写保护设置具体步骤

[复制链接]
wjandsq 发布时间:2015-4-14 19:21
本帖最后由 wjandsq 于 2018-1-10 19:43 编辑
! e: t' r) `4 @1 }
3 q' e7 j0 A& c9 f4 K      
收藏 评论5 发布时间:2015-4-14 19:21

举报

5个回答
沐紫 回答时间:2015-4-15 09:42:29
谢谢楼主~
stary666 回答时间:2015-4-15 11:28:00
好贴,学习一下
wyxy163@126.com 回答时间:2015-4-15 16:47:20
提示: 作者被禁止或删除 内容自动屏蔽
wjandsq 回答时间:2015-4-16 21:15:17
不客气,论坛有赠送的板子,对我帮助很大,现在已放弃DSP,专攻STM32了。
wjandsq 回答时间:2015-4-17 08:47:36
本帖最后由 wjandsq 于 2015-4-17 08:54 编辑
. c) Y# {2 z4 K+ K1 O0 p' M: G5 e4 H% y" q! T6 Y
三、针对USB-Dual-RS485实验板编写的USB bootloader例程包(USB_Bootloader 正式版V1.0)下载:
2 E& C/ A6 ]9 E6 j+ l9 ihttp://www.daxia.com/bibis/moredata_1935500_18030.shtml
. d2 j# V" q7 l2 y9 Z3 S) ^+ V% e5 l) l' p9 S* q* L) X; F
该USB Bootloader属于二次Bootloader,适用于USB-Dual-RS485板的自升级,正式版本V1.0。# ~* S5 S# ~+ c) Z/ I8 I) I
PC机上显示为USB双虚拟串口的通讯设备。0 ~! k+ {  N0 h. [' J  K
# T: ~9 C& i( c  x8 L
该USB Bootloader两种应用程序的更新模式的说明: 0 c% A1 v7 ?& n1 u3 ^$ e* A, D2 A

+ j: Z/ y6 L8 C( G1.ISP强制更新模式(需要断电重启才可以刷用户程序)
; N" @2 D, I. m+ y
" W6 V2 c/ T* i8 S该模式属于常规更新模式,类似JLINK的自我更新,JLink内置bootloader,但需要设置跳线擦除,
# j2 d' D5 l! `2 y. d" x1 x9 e$ c0 V设置跳线进入bootloader模式烧写程序。
1 `/ O. x2 R4 @: H
/ M2 h2 }# Q. w6 z, `- J- |将PB2(boot1)设置为高,boot0设置为低,重启即可运行本USB bootloader(以下简称bootloader),
* q5 [+ N/ C1 \! L- a% R0 P0 L5 _. _* P装新程序前,可以写段代码,自动擦除第17-第128页内容(查阅STM32F1xxx编程手册)。: h$ [( n. J4 r+ J$ b- j/ Y
1 _+ x$ q* |0 W* Z. X
进入bootloader,利用超级终端或例程包自带的YModem通信工具,发送BIN文件即可完成更新。& k; h1 C. E4 e* ^# U1 j/ {

: K/ V" n3 g: q- x注意,由于是USB通信,无论波特率设置为2400还是921600,USB通信速度理论上都是一样的,
7 J6 G2 K4 |$ p  D2 r3 {但由于USB-CDC绑定了串口1和串口2,本USB bootloader没有剥离串口向外发送的等待,速度会卡在这儿,7 A5 g/ k3 h& c
所以最好设置为115200以上波特率(建议波特率设为2Mbps),或者读者自己把串口发送的代码注释掉。1 h! I+ S" q9 n- b" |& s1 a3 c
, v7 r( p3 @5 V$ V' ^6 c8 j1 U
对于USB-Dual-RS485板子,PB2右边是3.3V,跳线帽短接PB2到3.3V,断电重启就可以ISP更新程序了。
! f+ x% Q( V1 |3 E$ h启动时PB2为输入下拉模式,判断完PB2的电平,bootloader就把它设置为推挽输出,驱动LED。3 _; @7 l1 s" E7 C
看到LED灯狂闪,说明这是工作在程序更新模式,直到程序成功更新完毕,才会跳转到用户代码段。  m+ p; B0 t+ C0 @! X" s
! \7 k/ C! i: n- c" j' C  N+ }
注意用户代码段就不要狂闪PB2驱动的LED灯了,可以对bootloader和app程序加以区分。
! Q/ t" [3 W5 o4 s$ b6 Y& y! {. X5 j7 S! g. [9 r" J
2.IAP更新模式(不断电重启即可更新用户程序)% C" b" ^/ e/ b: A* [
% p+ E8 S6 s6 Q0 K/ s  ]
bootloader占用16K的FLASH,0x0800,0000 - 0x0800,3FFF,启用了写保护,由于写保护. ?* s) b5 `2 \5 {7 z* E) t+ c
的每页是1024字节,保护1页就是 1024 * 4 = 4K字节,这里保护了4页,共16K字节。
1 `1 d9 z% W$ T  A; o8 `5 d, |- z2 Y7 ?5 r9 b; C) _7 u: b+ }5 q* a
IAP更新模式就是为了不想使用仿真器,编译后直接在线更新app程序。
) s' X! T( D: s" G& w+ j; m+ q) @9 \  f; V* }6 x( O
STM32F103系列的USB,可以实现USB转3路虚拟串口,这个bootloader仅实现两路。4 X1 t  {3 O; i- R* o
在设备管理器查看STM32 Virtual Port的详细信息里,可以看到设备的硬件ID,* l% \9 t, N1 Q
末尾是MI_00或MI_02,我们用MI_02那个虚拟串口进行YModom通信。
1 X+ H0 B! o) L4 B- N  c4 ]1 j* D" R% s" ~7 c
IAP的意思就是在线更新程序(不断电更新用户程序),本例程包含有bootloader和app两个工程包,
' L8 n/ a9 j3 s" q: N( M实现了该功能。
2 W- K- G6 l& }9 k5 ?* h; l) J+ F$ @7 W+ @" u
这里使用自己编写的YModem通信工具,在应用程序运行的时候,利用YModem通信工具; C9 l2 L9 n$ P: b# {' n8 R
发送“RESET”,你也可以自定义字符串或者其它特殊方式发出复位命令。
+ V  T5 d: S0 X5 k8 Y
* K0 T% L% B7 K' E1 |6 {5 Q# JSTM32收到复位命令,则将程序更新标志修改为1,这个标志目前存放在0x0800 F000处,1 x$ `1 _) }% p9 l# M: u' R; A. ^
当然如果你有后备电池或超级电容,也可以将该标志写到16字节的备份寄存器里,% K: M- H/ L, p$ ]
然后STM32就撤掉USB上拉电阻,准备复位了,这里做一个延时,上位机软件发现
0 e& U7 ~; G. nUSB虚拟串口不见了,可以关闭串口。如果是用超级终端,就需要赶快关掉释放串口资源,4 `- ?* f5 o6 @* `* u9 v
否则跳转到bootloader运行,windows就找不到虚拟串口,超级终端也会无响应。, M* c* s4 ]& [0 c  v) r! N6 A" Z
) Z3 l2 Z8 H- A: z7 P/ L( X
STM32延时2-3秒就复位了,然后运行bootloader程序。
2 U) i. d% F8 S3 e
# _, t- H/ g' f1 N7 V4 jbootloader程序将PB2设置为输入模式(带下拉电阻),这个模式并没有手动将PB2设置为* o; x3 v( G( c. B5 P: Z0 K7 B( Q6 V
3.3V,所以bootloader程序检测到PB2是低电平,然后就切换PB2为输出模式,PB2驱动7 t$ j* X2 Z, N, P+ A+ K
LED灯就开始狂闪。
, u. o  i! B/ x) M0 u
; p. Y+ r. m5 g1 ?; _自己设计的YModem通信工具发送了RESET的命令就关闭了串口。
* v# |* R& ^, k/ C' |9 y0 _) B) U" }bootloader程序运行后,启用USB模块,这时USB双虚拟串口又出现了。
- ?) v) V6 W, Y) }3 L! UYModem通信工具发送命令后,不需要关闭,直接打开需要烧写的app.bin文件,然后点击发送文件,就可以了。6 K( ~) i# f+ s7 N# N" S& M
" D' q8 f3 ?0 h6 p, d) P3 A
如果不知道是那个串口,就打开串口,发现1秒钟有一个'C'出现,就可以确认可以用这个串口进行IAP。
2 w! t; F6 ?1 I& \5 q0 X2 |
9 d. D0 R* O+ v9 E这种更新就是打开文件,点击发送复位命令,点击发送文件,操作比较简单。3 M* Q4 j* ^, |' X% K
# c% J# m( M- h& ^
注意: 此种更新模式主要适用于项目开开发的反复调试阶段使用,并无加密功能。
+ U- M! K0 g/ y$ L7 M, _8 C- t' @. D3 I: N0 f, D
更详细的流程,可以看工程包里的源代码和说明文档,更具体的文档还在进一步整理中。. y3 P- O, z, b  V2 T
- P3 N9 t% R! M" J3 d5 {1 M
USB更新的便利之处:
# w0 M$ V0 J0 a  a# v3 J0 {
  a7 J6 T+ G) @/ Z1.使用USB通信更新应用程序区域,一般不会出现通信错误。' T6 {: N8 o: O5 o7 G9 @
  设置了写保护,二次bootloader不会丢失,建议产品引出boot0 boot1以备不测。& I1 l4 k7 Y# `# T

( H+ r* k% c  R( M2.可以释放SWJ接口,另作它用,不需要J-Link仿真器。) s3 m3 M$ l! j  y/ g
  如果不释放SWJ接口,仍然支持J-Link调试。! E9 D. P+ Q! Y2 r
8 w+ q5 h& ~3 h- m, c

# K+ y1 g* h& r) c. j2 X4 H

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版