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

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

[复制链接]
wjandsq 发布时间:2015-4-14 19:21
本帖最后由 wjandsq 于 2018-1-10 19:43 编辑 " f% x1 V6 o, p) s9 `, s) x

. N- k0 y0 @" n      
收藏 评论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 编辑
0 g/ F% j7 n% E
- I9 h" k$ z3 z8 M% m- w三、针对USB-Dual-RS485实验板编写的USB bootloader例程包(USB_Bootloader 正式版V1.0)下载:
7 J2 D- V. v, W5 Ihttp://www.daxia.com/bibis/moredata_1935500_18030.shtml
+ r' Y5 p/ W; a# V4 m) k- y* S1 _! H6 K3 a
该USB Bootloader属于二次Bootloader,适用于USB-Dual-RS485板的自升级,正式版本V1.0。
& x8 h4 v) m% sPC机上显示为USB双虚拟串口的通讯设备。
$ i% C6 T+ T$ e  T% h: h' H' f/ @4 j/ z; i
该USB Bootloader两种应用程序的更新模式的说明:
$ |9 P! P* X" s+ r1 _# V6 `* Z% \7 }/ T% b. S& T& _4 @
1.ISP强制更新模式(需要断电重启才可以刷用户程序)
# f7 q7 q- y8 H% x5 `# ^
1 c7 t. p7 k: h5 e1 R+ r. o$ `该模式属于常规更新模式,类似JLINK的自我更新,JLink内置bootloader,但需要设置跳线擦除,
$ y$ a. s; h) g设置跳线进入bootloader模式烧写程序。
$ d8 u$ d. J3 \) @7 w0 {- e8 w
; s* [1 u# R# k* h* V" O3 C- w将PB2(boot1)设置为高,boot0设置为低,重启即可运行本USB bootloader(以下简称bootloader),
4 ?; f- q0 S. G% A: H装新程序前,可以写段代码,自动擦除第17-第128页内容(查阅STM32F1xxx编程手册)。
3 f7 P9 V0 a1 w* |; ^
, a# V* o, U- ^进入bootloader,利用超级终端或例程包自带的YModem通信工具,发送BIN文件即可完成更新。
# o1 @2 _& m, r. t- w( T1 k/ ^
' Y' D; D9 v/ K- t* r; H8 Z) M注意,由于是USB通信,无论波特率设置为2400还是921600,USB通信速度理论上都是一样的,
  i0 ?/ G8 r9 F但由于USB-CDC绑定了串口1和串口2,本USB bootloader没有剥离串口向外发送的等待,速度会卡在这儿,
5 n; ?& S- Z1 _2 G所以最好设置为115200以上波特率(建议波特率设为2Mbps),或者读者自己把串口发送的代码注释掉。
/ O! t/ X6 i9 Y" `6 e7 l  O" u! [/ P) @0 s
对于USB-Dual-RS485板子,PB2右边是3.3V,跳线帽短接PB2到3.3V,断电重启就可以ISP更新程序了。
  [. T0 l, w2 a& J* K" j启动时PB2为输入下拉模式,判断完PB2的电平,bootloader就把它设置为推挽输出,驱动LED。, G1 L- R+ {8 ^# I. b! o
看到LED灯狂闪,说明这是工作在程序更新模式,直到程序成功更新完毕,才会跳转到用户代码段。; T" F( O* E2 {+ G2 X

; @6 p7 j+ X$ R+ Q. F/ X注意用户代码段就不要狂闪PB2驱动的LED灯了,可以对bootloader和app程序加以区分。4 s# k' N  L0 ~7 z$ F# p2 f+ q+ n
9 [& ^: o" W* F2 l, N# [6 F" M& \
2.IAP更新模式(不断电重启即可更新用户程序)# g8 L" x2 ^8 x( l5 {$ h

1 p, p# u: R# Y( Ebootloader占用16K的FLASH,0x0800,0000 - 0x0800,3FFF,启用了写保护,由于写保护
6 a; W; I% R3 y5 r# I6 U; A& C2 V的每页是1024字节,保护1页就是 1024 * 4 = 4K字节,这里保护了4页,共16K字节。
- r) d6 r/ A4 @% w3 N8 @, d2 ?' h2 q, D' _  B3 X
IAP更新模式就是为了不想使用仿真器,编译后直接在线更新app程序。
$ T; M% r% e" e$ X! a2 n3 j- r1 f" V  J7 @# H8 G
STM32F103系列的USB,可以实现USB转3路虚拟串口,这个bootloader仅实现两路。7 y$ k0 j+ d0 \
在设备管理器查看STM32 Virtual Port的详细信息里,可以看到设备的硬件ID,
( m2 W9 y$ \0 b! J. H- ^. n末尾是MI_00或MI_02,我们用MI_02那个虚拟串口进行YModom通信。5 {3 P/ X2 L2 N3 y. g0 M

, B4 U  J$ g- U! ~! q1 NIAP的意思就是在线更新程序(不断电更新用户程序),本例程包含有bootloader和app两个工程包,
) ?7 s8 `% |+ ]% B实现了该功能。2 j' N0 v6 U; {  x- l* j8 a
1 T" |$ g6 y; F% Y- N8 ]5 r- U) z
这里使用自己编写的YModem通信工具,在应用程序运行的时候,利用YModem通信工具" l4 ?) G; f+ W9 ?& P
发送“RESET”,你也可以自定义字符串或者其它特殊方式发出复位命令。
  R: V5 _- m. V# N$ U3 i8 ]" r% N* K9 b, V0 H! P# Z1 y  N
STM32收到复位命令,则将程序更新标志修改为1,这个标志目前存放在0x0800 F000处,
( v" w: S. u# o+ U  t4 q, D/ m当然如果你有后备电池或超级电容,也可以将该标志写到16字节的备份寄存器里," ~, P1 j/ G& l; m% h
然后STM32就撤掉USB上拉电阻,准备复位了,这里做一个延时,上位机软件发现
  G/ a$ v. G3 v( A. EUSB虚拟串口不见了,可以关闭串口。如果是用超级终端,就需要赶快关掉释放串口资源,
5 z) i) c! P3 I2 i否则跳转到bootloader运行,windows就找不到虚拟串口,超级终端也会无响应。1 S( q& W7 Y7 O+ W1 b

  _/ y. J  L) c/ n" tSTM32延时2-3秒就复位了,然后运行bootloader程序。% B! ]2 S- u! `0 n

; z. X: c8 r! Y# [( jbootloader程序将PB2设置为输入模式(带下拉电阻),这个模式并没有手动将PB2设置为" @/ ?/ K' _7 A6 F2 a4 C
3.3V,所以bootloader程序检测到PB2是低电平,然后就切换PB2为输出模式,PB2驱动
; N# F  ~' v# f9 a' Z" LLED灯就开始狂闪。
& Z* v6 `2 j& ?: K) J+ _: h4 d3 N' c
. y5 x$ A& Q; I. e4 I  M: @' t6 Y, f! h" x自己设计的YModem通信工具发送了RESET的命令就关闭了串口。- k8 n5 g/ n3 F4 i& M
bootloader程序运行后,启用USB模块,这时USB双虚拟串口又出现了。6 e8 A7 V# f( b+ j9 H* V$ u
YModem通信工具发送命令后,不需要关闭,直接打开需要烧写的app.bin文件,然后点击发送文件,就可以了。$ |5 D4 a3 v" m4 N3 `( X7 o
7 S' x) y- ?' `' B7 l: d
如果不知道是那个串口,就打开串口,发现1秒钟有一个'C'出现,就可以确认可以用这个串口进行IAP。% n+ B3 [) K1 l* h# k+ d6 ?$ X
: C  j9 J0 `6 Q6 u7 d
这种更新就是打开文件,点击发送复位命令,点击发送文件,操作比较简单。
! q8 H. x, m* T3 I2 r6 g+ i. F% I
: K5 Q; |7 T4 E; h3 n8 l注意: 此种更新模式主要适用于项目开开发的反复调试阶段使用,并无加密功能。
% G5 e3 K4 P% N6 |* @
& ^# i2 ~! n8 B, j* Z3 E更详细的流程,可以看工程包里的源代码和说明文档,更具体的文档还在进一步整理中。
7 S% U  b; ]5 ?, x* ]& G/ Y4 R$ s. ~) L5 V! J
USB更新的便利之处:
# A" H7 i6 u3 K' B3 }" h! m
: I( A7 ?: C: l$ l7 L8 n1.使用USB通信更新应用程序区域,一般不会出现通信错误。- c; a- {2 N5 Y7 G* t
  设置了写保护,二次bootloader不会丢失,建议产品引出boot0 boot1以备不测。* Q- D4 u% l  B5 U

1 N0 m" i9 ~3 h0 l& T1 ~4 e5 z) U2.可以释放SWJ接口,另作它用,不需要J-Link仿真器。0 _6 S: M0 v+ z0 x) q* w9 ]; h' D  Q
  如果不释放SWJ接口,仍然支持J-Link调试。
% k  S# q) y: m
# q0 M4 _% M& ]3 w% {7 R0 j% c) Z7 w# D* O! q

所属标签

相似分享

官网相关资源

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