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

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

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

关于STM32F0系列的启动配置,有人说有点看不太懂,貌似有两套启动方式,又是脚又是选项位的。其实,它跟其它STM32 系列一样也是有三种启动模式,只是配置方式上有其特色。
" N# }! j3 H4 n( P! j+ F& r
6 L$ g" d* K, j/ g2 t4 J3 P- Z% N) l它有两种配置方式,第一种是利用BOOT0物理脚和Nboot1、Boot_Sel选项位来确定启动模式;第二种只使用Boot_Sel、Nboot1 、Nboot0 三个选项位来确定启动模式,完全省却了物理脚,多出一根脚给用户应用。' g7 N! b" N* \  F+ E% O, s
8 a: z, u, |: D/ t* Q
对于第一种配置方式,所有STM32F0系列的芯片都适用。第二种配置方式仅适用于STM32F04X和STM32F09X系列的器件。

下图是STM32F0系列启动模式配置表。
1 s" b5 j3 I: d0 h' D5 [$ n7 B
9 i/ @3 r) H' c

" |7 [+ d4 Y2 s$ Y9 ]1 q) Z红色方框内就是上面所指的第一种配置方式,对所有STM32F0芯片适用。图表中的灰色区域就是前面所说的仅适用于STM32F04X和STM32F09X的配置方式,3 g$ S  u+ W8 M; i

3 F1 E+ x4 W; ?6 Y+ G; }可以看出,对于STM32F04X和STM32F09X到底使用哪种配置方式取决于Boot_Sel选项位。对于非STM32F04X和STM32F09X的32F0系列芯片,配置方式只能使用第一种配置方式,此时Boot_Sel固定为1。* c' e9 L/ ]2 J6 O0 Y

8 ^* B/ M7 r/ J8 `* g6 B; ], m这里不妨说说第一种配置方式,该方式对所有STM32F0芯片都适用。BOOT0脚置高、置低简单,Nboot1、Boot_Sel选项位怎么定的呢?+ }& M4 e3 G: }5 R

8 M# D: f$ A- n4 W, QNboot0 、Nboot1、Boot_Sel选项位在用户选项字节里,一起来看看。
$ R3 q3 [# e0 h- N9 e. k# D
+ T- j$ \3 ^8 }" }

' }7 V# B" [- i% D显然,从其出厂的默认初始值可以看出,Nboot0、Nboot1、Boot_Sel选项位的默认值均为1,即默认为第一种配置方式。
. D/ c7 a, p% l# W7 N" E9 a
. V. G1 u/ a/ w( X4 D' X如果此时BOOT0脚为1则从system memory启动,即从芯片内嵌的BOOTLOADER启动。
  }: i$ }9 Q( ]  _. E

$ }6 ?# L3 O5 b4 Z0 u" @
. Q# t9 k8 X, z! b
% {8 V6 X: n$ y: U5 T& G" L如果此时BOOT0脚为0,则从main flash memory启动,进入用户程序。( a" }* {1 n( K& D6 @: f+ x1 r0 B' o, E

4 l* L$ n: Z4 W
( ?/ c) p. }- @4 n针对STM32F04X/STM32F09X的第二种配置方式 ,这里就不多说了。个人觉得如果不是特别需要那个BOOT0脚、或者对这个做法特别感兴趣的话,大可不必花太多心思和精力在第二种配置方式上 。毕竟你得自行编写用户代码修改Nboot0、Nboot1、Boot_Sel相关选项位,而且这个过程还是有些折腾。折腾了半天可能就为多用一根IO脚,此时BOOT模式完全由选项位来确定,个人觉得也不是那么直观和方便 。# Q5 F' D  y3 ?# L- g

4 p+ C  i/ W- {% y0 B/ uST官方有一篇应用笔记就是针对STM32F04X/STM32F09X的第二种配置方式的应用介绍的,该笔记名为《STM32F09X不使用BOOT脚实现SYSTEMBOOTLOADER升级代码》,有兴趣的可以去下载看看。
, X2 S0 q$ `! g! {. D) q" i! p
& f$ y) {( M' ~% W% s倒是有关STM32F04X/STM32F09X两个子系列的空检操作值得了解下。+ D3 O! \! j; r( R* M

$ |8 F# {# {+ k7 R4 E所谓空片一般是指从芯片出厂起就没用过或用过但经过CHIP erase操作后的芯片。
3 c3 i1 ]- }$ w6 p
% p! }: z" N, U7 ^
STM32F04X/STM32F09X芯片复位后通过检测地址0x080000000的内容是否为0xFFFFFFFF且上面提到的Boot_Sel选项位是否为1来判断该芯片是否为空片。若是,则设置相关空检标志Empty Check。
9 ^: E/ `' F7 Y1 t) m. w( p" E; a" b8 D0 [% P9 H- v
在芯片被判定为空的条件下,即使当前BOOT配置为从main flash memory启动,芯片硬件也会跳到System Memory 去执行内嵌启动程序。用过其它STM32芯片的人就会明显感觉到这里有个好处,这样通过ISP模式进行烧录后不必将BOOT配置脚拨来拨去的。如果量产的话,还是省了不少事。
. _* F+ a4 v9 k/ R: f: M
/ q$ q6 @! k; K0 p  z0 A) ^, qSTM32F0参考手册里在针对空检标志的描述时,应该说上面那段英文讲得很清楚了,后面做了一句补充式的描述“检查地址0x08000 0000的内容是否为 0xFFFF FFFF作为判断为空的条件”。这一说可能反而增加了理解上的困扰,本来说空片就完了,让芯片回归到出厂初始状态就好。至于对某地址内容或选项位的检测只是对空片的一个简单确认。0 S4 |6 N$ V: e5 ]

4 ~! N) X% u- R- `- e  K5 U  w
2 G. v# I6 T. B, f
收藏 评论0 发布时间:2021-11-20 23:00

举报

0个回答

所属标签

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