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

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

[复制链接]
wjandsq 发布时间:2015-4-14 19:21
本帖最后由 wjandsq 于 2018-1-10 19:43 编辑 + m4 H) A  T# a
4 P* H/ L5 m- n# G* w9 h
      
赞 收藏 评论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 编辑
. i2 A! l8 _# F( y0 g( _$ \( x2 a, w! ]& L
三、针对USB-Dual-RS485实验板编写的USB bootloader例程包(USB_Bootloader 正式版V1.0)下载:
9 U& B2 g8 Q/ _  mhttp://www.daxia.com/bibis/moredata_1935500_18030.shtml: j2 ^9 t' e9 R9 s0 k; \
% P. g3 q) ~- D1 D' A
该USB Bootloader属于二次Bootloader,适用于USB-Dual-RS485板的自升级,正式版本V1.0。, |6 u9 x! L+ w4 t* y
PC机上显示为USB双虚拟串口的通讯设备。; r+ o* V" m- O1 G( K

) H& l0 X8 Z; n8 C* }! d* i  k( u该USB Bootloader两种应用程序的更新模式的说明: 2 @& S1 H) u, o# h  r1 W( o

" s4 q' `0 i4 i9 r1.ISP强制更新模式(需要断电重启才可以刷用户程序)& x2 S: @& `5 I, U6 ?+ k8 h

' v0 k( v$ V8 @5 E# n该模式属于常规更新模式,类似JLINK的自我更新,JLink内置bootloader,但需要设置跳线擦除,3 W+ I: |" C# j8 E
设置跳线进入bootloader模式烧写程序。- E8 X0 S: \1 W! @: D; x+ y! W
' ?- _# X! `& r+ W: W
将PB2(boot1)设置为高,boot0设置为低,重启即可运行本USB bootloader(以下简称bootloader),5 {5 f* G& s6 b; P" g5 A7 o6 E9 g
装新程序前,可以写段代码,自动擦除第17-第128页内容(查阅STM32F1xxx编程手册)。& t5 w6 p/ X- [7 m* \0 r

4 r! Q1 d! [, W9 }# z! u/ H进入bootloader,利用超级终端或例程包自带的YModem通信工具,发送BIN文件即可完成更新。, r) X' ~5 g) {! l& g! X" v
8 B, {: A# _% K7 R. W# v
注意,由于是USB通信,无论波特率设置为2400还是921600,USB通信速度理论上都是一样的,
1 t4 r' Q9 _  F. U! Z% B8 |但由于USB-CDC绑定了串口1和串口2,本USB bootloader没有剥离串口向外发送的等待,速度会卡在这儿,
* R+ u1 E3 L3 C* S+ }# B/ Z所以最好设置为115200以上波特率(建议波特率设为2Mbps),或者读者自己把串口发送的代码注释掉。
8 v5 V* C# O( I  b5 Z/ _5 l& ^0 c  c4 E3 n8 G
对于USB-Dual-RS485板子,PB2右边是3.3V,跳线帽短接PB2到3.3V,断电重启就可以ISP更新程序了。7 `, B/ N, B, c, L
启动时PB2为输入下拉模式,判断完PB2的电平,bootloader就把它设置为推挽输出,驱动LED。* P1 x6 Y9 f. t4 h; ]6 n- t
看到LED灯狂闪,说明这是工作在程序更新模式,直到程序成功更新完毕,才会跳转到用户代码段。
+ M  D: W  f! L1 v% }' P5 [9 J; B2 `  F8 j
注意用户代码段就不要狂闪PB2驱动的LED灯了,可以对bootloader和app程序加以区分。$ S5 y. f! Q0 T/ x( t, K
4 i# k( k" _8 I. a5 a9 L; i% N
2.IAP更新模式(不断电重启即可更新用户程序)
5 z; U8 o4 g6 h" c- t( J9 d. ]
4 ?9 d+ q7 p) @) [bootloader占用16K的FLASH,0x0800,0000 - 0x0800,3FFF,启用了写保护,由于写保护- O6 H" x' I7 D! p. r
的每页是1024字节,保护1页就是 1024 * 4 = 4K字节,这里保护了4页,共16K字节。. m8 d- S7 F8 l+ ^3 i) I: N/ r3 M

7 D0 x5 r( _# k5 cIAP更新模式就是为了不想使用仿真器,编译后直接在线更新app程序。4 a( s/ n% Y  n* M% }( o

# p, z$ [. Y* \) C! _- E) ?% ]STM32F103系列的USB,可以实现USB转3路虚拟串口,这个bootloader仅实现两路。
/ Y+ B9 d- r' ^/ L在设备管理器查看STM32 Virtual Port的详细信息里,可以看到设备的硬件ID,
; B  H1 A1 Y) N2 w* w末尾是MI_00或MI_02,我们用MI_02那个虚拟串口进行YModom通信。
3 X: x( T% Z9 }; n' D
+ @% g- a' q1 y) {7 s) Q. NIAP的意思就是在线更新程序(不断电更新用户程序),本例程包含有bootloader和app两个工程包,
5 D3 p( n% u  m' q/ ~实现了该功能。
7 e" d$ B+ L. H/ F" G
5 O" l5 m8 J$ W; u) Q  S5 [! U这里使用自己编写的YModem通信工具,在应用程序运行的时候,利用YModem通信工具* Q% h* s6 z, z/ W4 D( Q
发送“RESET”,你也可以自定义字符串或者其它特殊方式发出复位命令。
3 I* X  Q% j5 F7 m) ~, `" ^& P  g; M" s8 j' m; m/ C
STM32收到复位命令,则将程序更新标志修改为1,这个标志目前存放在0x0800 F000处,
5 `$ R. g, `6 F2 O2 Q当然如果你有后备电池或超级电容,也可以将该标志写到16字节的备份寄存器里,
1 C7 L/ s% n4 R- o$ l然后STM32就撤掉USB上拉电阻,准备复位了,这里做一个延时,上位机软件发现
- ?! W, y/ ]: |5 W8 p' x2 uUSB虚拟串口不见了,可以关闭串口。如果是用超级终端,就需要赶快关掉释放串口资源,2 S8 ?1 j# a8 d; F, s
否则跳转到bootloader运行,windows就找不到虚拟串口,超级终端也会无响应。
* l1 k  W8 N& H& y9 _; T- R
3 ?1 [+ b$ {5 [STM32延时2-3秒就复位了,然后运行bootloader程序。+ W, z2 j) X/ n4 W! v
3 A/ _3 K& a; p+ N1 L+ ~3 X
bootloader程序将PB2设置为输入模式(带下拉电阻),这个模式并没有手动将PB2设置为
3 B( q2 S/ ~9 S$ ]: @% y4 @( C) Q3.3V,所以bootloader程序检测到PB2是低电平,然后就切换PB2为输出模式,PB2驱动& J. U. h+ S( O9 M, M
LED灯就开始狂闪。
9 u; \/ [, U2 @7 I$ {' u3 N. X: z0 G! F% `" W/ L  a
自己设计的YModem通信工具发送了RESET的命令就关闭了串口。
/ N! {1 T* w2 V% v8 T0 s! L5 qbootloader程序运行后,启用USB模块,这时USB双虚拟串口又出现了。
  p! b# l9 d* x0 d* a: w5 ~/ bYModem通信工具发送命令后,不需要关闭,直接打开需要烧写的app.bin文件,然后点击发送文件,就可以了。
% X& n' H) M' s  l; @& R: k: _4 |0 z: ~5 n- s4 K6 c. g
如果不知道是那个串口,就打开串口,发现1秒钟有一个'C'出现,就可以确认可以用这个串口进行IAP。' q- T! D# z! i" l
% r4 r2 h7 n$ A# d7 P
这种更新就是打开文件,点击发送复位命令,点击发送文件,操作比较简单。6 g7 D8 p9 Q: \) c! M7 z. U1 O
$ b# u$ F2 h! ]) l4 {
注意: 此种更新模式主要适用于项目开开发的反复调试阶段使用,并无加密功能。
& d0 E! |9 s* b" {1 t/ c4 s1 l) ?
3 @4 W7 m% _' w( T更详细的流程,可以看工程包里的源代码和说明文档,更具体的文档还在进一步整理中。
9 D# R# P- B  B* a9 r5 U2 m) c
8 U. s& o- f1 x6 T, R" E& `USB更新的便利之处:
7 @  C/ Z- u' ~9 |4 E% T# ]( C5 _& e& p$ h+ ?3 _& m. G
1.使用USB通信更新应用程序区域,一般不会出现通信错误。
+ e. r# k. y) {, N7 u  设置了写保护,二次bootloader不会丢失,建议产品引出boot0 boot1以备不测。2 |: e- I& b- C% k
0 o/ b& w- X' S# k2 h$ H( h/ n
2.可以释放SWJ接口,另作它用,不需要J-Link仿真器。; \% u3 P1 w8 Y! K! K
  如果不释放SWJ接口,仍然支持J-Link调试。/ A. Y% D- X/ f; `/ w8 \, P
4 x2 ?2 p) I$ Q0 c2 r0 i+ e

- |! P! c$ j. b8 T8 O' z; c$ m2 M; ]

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版