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

【经验分享】STM32F0的BOOT配置及相关话题

[复制链接]
STMCU小助手 发布时间:2021-11-20 23:00

关于STM32F0系列的启动配置,有人说有点看不太懂,貌似有两套启动方式,又是脚又是选项位的。其实,它跟其它STM32 系列一样也是有三种启动模式,只是配置方式上有其特色。3 `3 v9 q1 }' K# J: u0 Z, }  F/ O

0 J# f3 h3 e( ^0 t' A- |# H4 \它有两种配置方式,第一种是利用BOOT0物理脚和Nboot1、Boot_Sel选项位来确定启动模式;第二种只使用Boot_Sel、Nboot1 、Nboot0 三个选项位来确定启动模式,完全省却了物理脚,多出一根脚给用户应用。# j0 V& q/ p8 g; W, w

1 K4 M' B/ n9 p对于第一种配置方式,所有STM32F0系列的芯片都适用。第二种配置方式仅适用于STM32F04X和STM32F09X系列的器件。

下图是STM32F0系列启动模式配置表。
/ ~% o  t, u  v1 H& I1 m; T
1 Q: O- R( @" f- x" ^. b' P, M9 H

7 k1 ~9 k' [4 C. @- K/ y红色方框内就是上面所指的第一种配置方式,对所有STM32F0芯片适用。图表中的灰色区域就是前面所说的仅适用于STM32F04X和STM32F09X的配置方式,+ z6 s# }; s2 ~8 t7 p/ T( e7 f" D3 R

* a6 B) E* o$ ?# D) Z" G可以看出,对于STM32F04X和STM32F09X到底使用哪种配置方式取决于Boot_Sel选项位。对于非STM32F04X和STM32F09X的32F0系列芯片,配置方式只能使用第一种配置方式,此时Boot_Sel固定为1。. e7 b9 \) c; X) R
( b: @' a: b8 y0 @) i1 z; z
这里不妨说说第一种配置方式,该方式对所有STM32F0芯片都适用。BOOT0脚置高、置低简单,Nboot1、Boot_Sel选项位怎么定的呢?
4 {1 i2 j" V5 b$ O( m  j2 e. Q
" b, l! s- N: c3 }* j+ PNboot0 、Nboot1、Boot_Sel选项位在用户选项字节里,一起来看看。
+ J! e4 j$ \0 m& F5 D/ t

1 Z5 l; U$ V' K% |- _' K
, t3 z2 a  J0 m/ X显然,从其出厂的默认初始值可以看出,Nboot0、Nboot1、Boot_Sel选项位的默认值均为1,即默认为第一种配置方式。$ a. T9 ]( i! d: ^9 C% J+ e
5 `" q8 B! s- N0 I$ z0 @8 }0 q8 u
如果此时BOOT0脚为1则从system memory启动,即从芯片内嵌的BOOTLOADER启动。
! T0 z* z/ Q4 t; O% Q

1 N  o' j9 z% [5 N
! D5 i9 u3 ~! |$ B! j( {: z1 T, J6 _3 ^( }7 P4 _% G# z
如果此时BOOT0脚为0,则从main flash memory启动,进入用户程序。2 I; R! K2 P5 \; q
- a  G5 T7 F3 d9 V* B  v$ D5 N

- E+ k5 v7 v: H针对STM32F04X/STM32F09X的第二种配置方式 ,这里就不多说了。个人觉得如果不是特别需要那个BOOT0脚、或者对这个做法特别感兴趣的话,大可不必花太多心思和精力在第二种配置方式上 。毕竟你得自行编写用户代码修改Nboot0、Nboot1、Boot_Sel相关选项位,而且这个过程还是有些折腾。折腾了半天可能就为多用一根IO脚,此时BOOT模式完全由选项位来确定,个人觉得也不是那么直观和方便 。1 D3 ^. V( g2 L* P

5 n$ R0 S. s1 A: }7 k& |* kST官方有一篇应用笔记就是针对STM32F04X/STM32F09X的第二种配置方式的应用介绍的,该笔记名为《STM32F09X不使用BOOT脚实现SYSTEMBOOTLOADER升级代码》,有兴趣的可以去下载看看。
) F$ i/ Q3 I) R. t% ^4 @
8 H- A* [/ I  `5 `$ A) ^8 L倒是有关STM32F04X/STM32F09X两个子系列的空检操作值得了解下。
7 e4 U# E5 `, w: n& c0 E: g9 i0 O$ s# y; e
所谓空片一般是指从芯片出厂起就没用过或用过但经过CHIP erase操作后的芯片。: c6 \6 s6 E; Z0 e: {2 E

9 }" }$ ~& e5 t# w. j# |9 U7 XSTM32F04X/STM32F09X芯片复位后通过检测地址0x080000000的内容是否为0xFFFFFFFF且上面提到的Boot_Sel选项位是否为1来判断该芯片是否为空片。若是,则设置相关空检标志Empty Check。. c  Y4 R& W! D* @) r( B

! l9 o3 }2 F% W0 z$ T- y在芯片被判定为空的条件下,即使当前BOOT配置为从main flash memory启动,芯片硬件也会跳到System Memory 去执行内嵌启动程序。用过其它STM32芯片的人就会明显感觉到这里有个好处,这样通过ISP模式进行烧录后不必将BOOT配置脚拨来拨去的。如果量产的话,还是省了不少事。* Z6 b+ g+ R) I' V% V9 t

/ i' Z/ I  I6 T0 GSTM32F0参考手册里在针对空检标志的描述时,应该说上面那段英文讲得很清楚了,后面做了一句补充式的描述“检查地址0x08000 0000的内容是否为 0xFFFF FFFF作为判断为空的条件”。这一说可能反而增加了理解上的困扰,本来说空片就完了,让芯片回归到出厂初始状态就好。至于对某地址内容或选项位的检测只是对空片的一个简单确认。
' [' `" P0 f0 E3 b

# ]( T# x4 \1 _$ O  v5 y+ e+ b  F, W1 Q8 E- j1 x( R6 u
收藏 评论0 发布时间:2021-11-20 23:00

举报

0个回答

所属标签

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