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

您所在的位置:网站首页 stm32f0系列选型 【经验分享】STM32F0的BOOT配置及相关话题

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

2024-07-11 12:49| 来源: 网络整理| 查看: 265

关于STM32F0系列的启动配置,有人说有点看不太懂,貌似有两套启动方式,又是脚又是选项位的。其实,它跟其它STM32 系列一样也是有三种启动模式,只是配置方式上有其特色。 % e4 E2 B4 k' z0 L7 a ( U" c3 j. z+ O8 R$ D0 T' s) T它有两种配置方式,第一种是利用BOOT0物理脚和Nboot1、Boot_Sel选项位来确定启动模式;第二种只使用Boot_Sel、Nboot1 、Nboot0 三个选项位来确定启动模式,完全省却了物理脚,多出一根脚给用户应用。   Z$ U3 a& X! y- s: C; m 4 F9 w5 X0 R; P" O: K2 m; x- D4 j7 s/ I+ U对于第一种配置方式,所有STM32F0系列的芯片都适用。第二种配置方式仅适用于STM32F04X和STM32F09X系列的器件。

下图是STM32F0系列启动模式配置表。* j% ^! ~  f0 r" R/ d; B! m ( R7 r" \  [5 Z" s 4 @$ f" }- E5 o+ g. [0 o* a红色方框内就是上面所指的第一种配置方式,对所有STM32F0芯片适用。图表中的灰色区域就是前面所说的仅适用于STM32F04X和STM32F09X的配置方式, 6 `# N3 _  @7 p: T- L ( g0 s$ s/ B/ Y可以看出,对于STM32F04X和STM32F09X到底使用哪种配置方式取决于Boot_Sel选项位。对于非STM32F04X和STM32F09X的32F0系列芯片,配置方式只能使用第一种配置方式,此时Boot_Sel固定为1。) G: q8 q2 M8 a4 C0 j9 ? 8 g% q  N6 V# |" N, N3 W. ~+ z7 N这里不妨说说第一种配置方式,该方式对所有STM32F0芯片都适用。BOOT0脚置高、置低简单,Nboot1、Boot_Sel选项位怎么定的呢?% B! Z3 t; ^$ X+ c' G, M; N0 s - y% T1 e: ^9 i  PNboot0 、Nboot1、Boot_Sel选项位在用户选项字节里,一起来看看。 ) `# P8 X# |2 R! H( K - X+ i9 Q4 D5 V% g/ [: E# D5 j# T 显然,从其出厂的默认初始值可以看出,Nboot0、Nboot1、Boot_Sel选项位的默认值均为1,即默认为第一种配置方式。% R" k1 A" {  g $ u0 t/ _4 w9 x) e1 H: P1 ]如果此时BOOT0脚为1则从system memory启动,即从芯片内嵌的BOOTLOADER启动。5 }& O" a* w- ? # h/ b$ m; p7 a6 T2 P$ h   L4 ?, f# X+ {& J8 F 6 d) h' ~# l/ K: z( P- `2 C/ P/ s3 u如果此时BOOT0脚为0,则从main flash memory启动,进入用户程序。; }- k) d4 I9 i  p! b' [+ n 9 {, O$ C8 s+ G! |3 L0 v 7 Y- F% w3 l+ M8 ]+ _% `! T' e' ^针对STM32F04X/STM32F09X的第二种配置方式 ,这里就不多说了。个人觉得如果不是特别需要那个BOOT0脚、或者对这个做法特别感兴趣的话,大可不必花太多心思和精力在第二种配置方式上 。毕竟你得自行编写用户代码修改Nboot0、Nboot1、Boot_Sel相关选项位,而且这个过程还是有些折腾。折腾了半天可能就为多用一根IO脚,此时BOOT模式完全由选项位来确定,个人觉得也不是那么直观和方便 。 , a4 p! N; L7 L  i' _: [3 r . M/ M8 F8 w' I& r; hST官方有一篇应用笔记就是针对STM32F04X/STM32F09X的第二种配置方式的应用介绍的,该笔记名为《STM32F09X不使用BOOT脚实现SYSTEMBOOTLOADER升级代码》,有兴趣的可以去下载看看。 % J& O, N( |! a  P5 D: H' p9 h, g" ~- Z1 {/ X 倒是有关STM32F04X/STM32F09X两个子系列的空检操作值得了解下。8 l' P0 M' r7 k2 e$ |# b0 z3 a ( S+ k6 l: F/ g7 Q所谓空片一般是指从芯片出厂起就没用过或用过但经过CHIP erase操作后的芯片。) |( A7 n0 `8 [7 n+ T9 X$ I % `- G+ S1 T  z/ | STM32F04X/STM32F09X芯片复位后通过检测地址0x080000000的内容是否为0xFFFFFFFF且上面提到的Boot_Sel选项位是否为1来判断该芯片是否为空片。若是,则设置相关空检标志Empty Check。 * O0 R, J! r$ _, h9 q) S 5 w# ]; p) h, x6 a" `8 @在芯片被判定为空的条件下,即使当前BOOT配置为从main flash memory启动,芯片硬件也会跳到System Memory 去执行内嵌启动程序。用过其它STM32芯片的人就会明显感觉到这里有个好处,这样通过ISP模式进行烧录后不必将BOOT配置脚拨来拨去的。如果量产的话,还是省了不少事。8 [7 D: O7 F$ L) p3 q $ ?+ z& @3 f9 d7 B- t- v2 F STM32F0参考手册里在针对空检标志的描述时,应该说上面那段英文讲得很清楚了,后面做了一句补充式的描述“检查地址0x08000 0000的内容是否为 0xFFFF FFFF作为判断为空的条件”。这一说可能反而增加了理解上的困扰,本来说空片就完了,让芯片回归到出厂初始状态就好。至于对某地址内容或选项位的检测只是对空片的一个简单确认。   ?- p' K% D- y* c) N; _: o& y; d! L5 [$ c7 b 5 M! \" M) v: V6 K7 P# k% n0 }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3