STMCU小助手
发布时间:2021-11-20 23:00
|
关于STM32F0系列的启动配置,有人说有点看不太懂,貌似有两套启动方式,又是脚又是选项位的。其实,它跟其它STM32 系列一样也是有三种启动模式,只是配置方式上有其特色。 ) L" J) E" y9 u 红色方框内就是上面所指的第一种配置方式,对所有STM32F0芯片适用。图表中的灰色区域就是前面所说的仅适用于STM32F04X和STM32F09X的配置方式, 可以看出,对于STM32F04X和STM32F09X到底使用哪种配置方式取决于Boot_Sel选项位。对于非STM32F04X和STM32F09X的32F0系列芯片,配置方式只能使用第一种配置方式,此时Boot_Sel固定为1。+ |$ e+ [' S, |. H 4 j7 {( G+ F% @ m' }2 y0 @2 H6 s 这里不妨说说第一种配置方式,该方式对所有STM32F0芯片都适用。BOOT0脚置高、置低简单,Nboot1、Boot_Sel选项位怎么定的呢? Nboot0 、Nboot1、Boot_Sel选项位在用户选项字节里,一起来看看。: Y0 W( O+ ?% d3 r) y 2 r" z# }1 \& d0 g 显然,从其出厂的默认初始值可以看出,Nboot0、Nboot1、Boot_Sel选项位的默认值均为1,即默认为第一种配置方式。( g8 T" O/ s7 ]; R5 Z. ? 如果此时BOOT0脚为1则从system memory启动,即从芯片内嵌的BOOTLOADER启动。0 f2 p2 `2 m) U' A% }4 N 如果此时BOOT0脚为0,则从main flash memory启动,进入用户程序。, P2 u& ?: H8 O- j* d6 d3 D ( c* ^' `) b$ Z% v, j& G" k 2 t; q2 }' y6 ^. a% S3 x% y 针对STM32F04X/STM32F09X的第二种配置方式 ,这里就不多说了。个人觉得如果不是特别需要那个BOOT0脚、或者对这个做法特别感兴趣的话,大可不必花太多心思和精力在第二种配置方式上 。毕竟你得自行编写用户代码修改Nboot0、Nboot1、Boot_Sel相关选项位,而且这个过程还是有些折腾。折腾了半天可能就为多用一根IO脚,此时BOOT模式完全由选项位来确定,个人觉得也不是那么直观和方便 。$ [( ]. q$ f. {. ~# _7 f3 i 3 \! W2 r/ W2 g. D ST官方有一篇应用笔记就是针对STM32F04X/STM32F09X的第二种配置方式的应用介绍的,该笔记名为《STM32F09X不使用BOOT脚实现SYSTEMBOOTLOADER升级代码》,有兴趣的可以去下载看看。7 r" |4 c/ W# Y s6 J- S, K * \0 f3 w/ B4 z 倒是有关STM32F04X/STM32F09X两个子系列的空检操作值得了解下。 ; _% @* }. d$ [" O7 @0 y 所谓空片一般是指从芯片出厂起就没用过或用过但经过CHIP erase操作后的芯片。0 `( P% F2 D' Z$ Z3 Y3 a 3 D$ w. m7 i" d STM32F04X/STM32F09X芯片复位后通过检测地址0x080000000的内容是否为0xFFFFFFFF且上面提到的Boot_Sel选项位是否为1来判断该芯片是否为空片。若是,则设置相关空检标志Empty Check。 / q4 O. ? ~2 y8 Y Q9 j% \ 在芯片被判定为空的条件下,即使当前BOOT配置为从main flash memory启动,芯片硬件也会跳到System Memory 去执行内嵌启动程序。用过其它STM32芯片的人就会明显感觉到这里有个好处,这样通过ISP模式进行烧录后不必将BOOT配置脚拨来拨去的。如果量产的话,还是省了不少事。 b; {4 \. c" r* z! | STM32F0参考手册里在针对空检标志的描述时,应该说上面那段英文讲得很清楚了,后面做了一句补充式的描述“检查地址0x08000 0000的内容是否为 0xFFFF FFFF作为判断为空的条件”。这一说可能反而增加了理解上的困扰,本来说空片就完了,让芯片回归到出厂初始状态就好。至于对某地址内容或选项位的检测只是对空片的一个简单确认。4 P7 X3 \- I! @ c G5 U, a' j . X0 Q$ N6 }* `, e# B1 Y& j ' F$ w5 y9 g! t: {, ] |
微信公众号
手机版