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

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

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

关于STM32F0系列的启动配置,有人说有点看不太懂,貌似有两套启动方式,又是脚又是选项位的。其实,它跟其它STM32 系列一样也是有三种启动模式,只是配置方式上有其特色。
: @) M6 s8 k8 k* C
* ~; @) f0 n) ~8 a+ D6 i) S它有两种配置方式,第一种是利用BOOT0物理脚和Nboot1、Boot_Sel选项位来确定启动模式;第二种只使用Boot_Sel、Nboot1 、Nboot0 三个选项位来确定启动模式,完全省却了物理脚,多出一根脚给用户应用。
0 t; P3 B8 M7 F- [2 |# p# D+ g8 v) z; ]$ [8 f* m, e
对于第一种配置方式,所有STM32F0系列的芯片都适用。第二种配置方式仅适用于STM32F04X和STM32F09X系列的器件。

下图是STM32F0系列启动模式配置表。, Y( w; M5 W, v" t

+ {" \$ G' E5 E* b
' Z8 v, N/ M0 u! M红色方框内就是上面所指的第一种配置方式,对所有STM32F0芯片适用。图表中的灰色区域就是前面所说的仅适用于STM32F04X和STM32F09X的配置方式,
" M. ]8 v) W9 h, X" q: l
. R9 M, {4 ~( M3 e: P/ M% T8 L可以看出,对于STM32F04X和STM32F09X到底使用哪种配置方式取决于Boot_Sel选项位。对于非STM32F04X和STM32F09X的32F0系列芯片,配置方式只能使用第一种配置方式,此时Boot_Sel固定为1。; z* ]- U4 }7 z+ x/ v& l4 g9 h1 ]
0 H! x* k- S) t0 F
这里不妨说说第一种配置方式,该方式对所有STM32F0芯片都适用。BOOT0脚置高、置低简单,Nboot1、Boot_Sel选项位怎么定的呢?
+ ?4 V; p( n; Y7 l& T; d5 _$ y4 e
4 z$ i3 D( W# R9 S+ `, fNboot0 、Nboot1、Boot_Sel选项位在用户选项字节里,一起来看看。
! O$ y7 y) G( S
6 t3 R- J2 i4 }2 x+ N/ }

" o' r5 n+ t. u1 J) d显然,从其出厂的默认初始值可以看出,Nboot0、Nboot1、Boot_Sel选项位的默认值均为1,即默认为第一种配置方式。
: Y0 V3 P! C5 V; k, M
5 _; ~5 Q5 s# P/ C7 l% ~0 C如果此时BOOT0脚为1则从system memory启动,即从芯片内嵌的BOOTLOADER启动。5 |9 E1 F. l3 g. j! Z
3 `, h, g2 A  i: n$ L7 K% s
2 ~& {; G8 X6 T
- i# P# a& g4 L5 }  \# X! [2 M
如果此时BOOT0脚为0,则从main flash memory启动,进入用户程序。9 Q( L% |# I0 u: U( _! ^5 ]

1 t; {  B9 k+ T" ]* G8 X7 t3 U5 j
针对STM32F04X/STM32F09X的第二种配置方式 ,这里就不多说了。个人觉得如果不是特别需要那个BOOT0脚、或者对这个做法特别感兴趣的话,大可不必花太多心思和精力在第二种配置方式上 。毕竟你得自行编写用户代码修改Nboot0、Nboot1、Boot_Sel相关选项位,而且这个过程还是有些折腾。折腾了半天可能就为多用一根IO脚,此时BOOT模式完全由选项位来确定,个人觉得也不是那么直观和方便 。+ R% V# T8 p7 U3 D; N% v

! m+ L' _+ g+ ?ST官方有一篇应用笔记就是针对STM32F04X/STM32F09X的第二种配置方式的应用介绍的,该笔记名为《STM32F09X不使用BOOT脚实现SYSTEMBOOTLOADER升级代码》,有兴趣的可以去下载看看。
* X' d( |( b1 R1 }4 U2 y
/ M# \7 x1 L) a2 G9 e2 L倒是有关STM32F04X/STM32F09X两个子系列的空检操作值得了解下。
7 z4 K9 K$ R/ ^5 d9 S2 n" y: K1 r* g' Z, K- p' U. z
所谓空片一般是指从芯片出厂起就没用过或用过但经过CHIP erase操作后的芯片。
; T' e* D) L# M3 Z/ _0 b3 @0 P7 T
' Z" z5 I  \( i* Q- q2 j
STM32F04X/STM32F09X芯片复位后通过检测地址0x080000000的内容是否为0xFFFFFFFF且上面提到的Boot_Sel选项位是否为1来判断该芯片是否为空片。若是,则设置相关空检标志Empty Check。2 Y. D% l* P) n! r. b8 P

1 K; N' P8 b5 u* d! T! G在芯片被判定为空的条件下,即使当前BOOT配置为从main flash memory启动,芯片硬件也会跳到System Memory 去执行内嵌启动程序。用过其它STM32芯片的人就会明显感觉到这里有个好处,这样通过ISP模式进行烧录后不必将BOOT配置脚拨来拨去的。如果量产的话,还是省了不少事。
$ o9 i* K8 y( [$ J$ i' g/ W1 w! w" d( J1 b9 C) G
STM32F0参考手册里在针对空检标志的描述时,应该说上面那段英文讲得很清楚了,后面做了一句补充式的描述“检查地址0x08000 0000的内容是否为 0xFFFF FFFF作为判断为空的条件”。这一说可能反而增加了理解上的困扰,本来说空片就完了,让芯片回归到出厂初始状态就好。至于对某地址内容或选项位的检测只是对空片的一个简单确认。
: I8 k/ D9 }2 j6 ?1 x# K9 K
- Q$ a. X) i% q  Z

7 g# X. ?( _& F, W* ^) F% h' N
收藏 评论0 发布时间:2021-11-20 23:00

举报

0个回答

所属标签

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