关于STM32F0系列的启动配置,有人说有点看不太懂,貌似有两套启动方式,又是脚又是选项位的。其实,它跟其它STM32 系列一样也是有三种启动模式,只是配置方式上有其特色。

它有两种配置方式,第一种是利用BOOT0物理脚和Nboot1、Boot_Sel选项位来确定启动模式;第二种只使用Boot_Sel、Nboot1 、Nboot0 三个选项位来确定启动模式,完全省却了物理脚,多出一根脚给用户应用。

对于第一种配置方式,所有STM32F0系列的芯片都适用。第二种配置方式仅适用于STM32F04X和STM32F09X系列的器件。

下图是STM32F0系列启动模式配置表。

红色方框内就是上面所指的第一种配置方式,对所有STM32F0芯片适用。图表中的灰色区域就是前面所说的仅适用于STM32F04X和STM32F09X的配置方式,

可以看出,对于STM32F04X和STM32F09X到底使用哪种配置方式取决于Boot_Sel选项位。对于非STM32F04X和STM32F09X的32F0系列芯片,配置方式只能使用第一种配置方式,此时Boot_Sel固定为1。

这里不妨说说第一种配置方式,该方式对所有STM32F0芯片都适用。BOOT0脚置高、置低简单,Nboot1、Boot_Sel选项位怎么定的呢?

Nboot0 、Nboot1、Boot_Sel选项位在用户选项字节里,一起来看看。

显然,从其出厂的默认初始值可以看出,Nboot0、Nboot1、Boot_Sel选项位的默认值均为1,即默认为第一种配置方式。

如果此时BOOT0脚为1则从system memory启动,即从芯片内嵌的BOOTLOADER启动。

如果此时BOOT0脚为0,则从main flash memory启动,进入用户程序。

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

ST官方有一篇应用笔记就是针对STM32F04X/STM32F09X的第二种配置方式的应用介绍的,该笔记名为《STM32F09X不使用BOOT脚实现SYSTEMBOOTLOADER升级代码》,有兴趣的可以去下载看看。

倒是有关STM32F04X/STM32F09X两个子系列的空检操作值得了解下。

所谓空片一般是指从芯片出厂起就没用过或用过但经过CHIP erase操作后的芯片。

STM32F04X/STM32F09X芯片复位后通过检测地址0x080000000的内容是否为0xFFFFFFFF且上面提到的Boot_Sel选项位是否为1来判断该芯片是否为空片。若是,则设置相关空检标志Empty Check。

在芯片被判定为空的条件下,即使当前BOOT配置为从main flash memory启动,芯片硬件也会跳到System Memory 去执行内嵌启动程序。用过其它STM32芯片的人就会明显感觉到这里有个好处,这样通过ISP模式进行烧录后不必将BOOT配置脚拨来拨去的。如果量产的话,还是省了不少事。

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

围绕TM32F04X/STM32F09X芯片的空检话题及下载烧录,ST官方也有份应用笔记,名为《STM32F091空片使用system bootloader下载代码》,推荐下载阅读,可以加深理解,从中或许还能顺便了解些别的东西。

作者:Miler Shao

STM32F0的BOOT相关推荐

  1. stm32f0 大小端_STM32F0中文资料.pdf

    STM32F0中文资料 RM0091 参考手册 STM32F05xxx 先进的ARM 核32 位微控制器 简介 本参考手册向应用程序开发人员提供关于如何使用STM32F05xxx 微控制器的内存和外设 ...

  2. STM32F0芯片IAP实现之中断向量表重映射(没有中断向量表偏移寄存器SCB->VTOR的应对方法)

    问题背景 项目使用STM32F030,需要通过IAP进行固件升级,在FLASH里面要烧录两份代码:一个Boot loader,一个用户应用程序APP.在开发应用程序APP时,外设中断不能正确响应进到对 ...

  3. spring boot项目 中止运行 最常用的几种方法

    spring boot项目 中止运行 最常用的几种方法: 1. 调用接口,停止应用上下文 @RestController public class ShutdownController impleme ...

  4. html+spring boot简单的ajax数据传输实现

    本篇讲解在前后端不分离情况下的html+spring boot的项目数据传输实现 首先,后台我写了三个接口 package com.demo.ajax.controller;import com.de ...

  5. Spring Boot整合Spring Data JPA操作数据

    一. Sping Data JPA 简介 Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套 JPA 应用框架,底层使用了 Hibernate 的 J ...

  6. SpringBoot (八) :Spring Boot多数据源(JdbcTemplate)配置与使用

    什么是JdbcTemplate 为了使 JDBC 更加易于使用,Spring 在 JDBCAPI 上定义了一个抽象层, 以此建立一个JDBC存取框架. 作为 SpringJDBC 框架的核心, JDB ...

  7. 使用最新版(2020)IntelliJ IDEA 新建 Spring Boot 2.0 项目

    使用最新版(2020)IntelliJ IDEA 新建 Spring Boot 2.0 项目 一:创建项目,并添加相应依赖 新建Project,并指定Project为Spring Initializr ...

  8. 狂神Spring Boot 员工管理系统 超详细完整实现教程(小白轻松上手~)

    [SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) SpringBoot-web开发(二): 页面和图标定制(源码分析) SpringBo ...

  9. [JAVA EE]Spring Boot 控制层:参数传递方法

    项目需要参照本人java ee系列前文建立,请读者自行前往本人主页查看. 当然,您自己创建一个项目也是可以的. bean包下的Student.java package com.example.demo ...

最新文章

  1. 基于深度学习OpenCV与python进行字符识别
  2. Nginx+Tomcat动静分离搭建
  3. Django静态文件一瞥
  4. jdk动态代理实例和cglib动态代理实例_CGLib 动态代理 原理解析
  5. python输出日期的模版_python按日期区间生成markdown日记模板
  6. css 浮动在最上层_CSS的“层”峦“叠”翠
  7. Eclipse在过去十年中的主要成就
  8. [react] 说说你是怎么理解react的业务组件和技术组件的?
  9. 计算机与在勘察地质中的应用,地质勘察中计算机信息技术的应用
  10. pywin32官方说明文档_为什么你应该看官方文档而不是搜索博客文章
  11. leetcode python3 简单题21. Merge Two Sorted Lists(Linked)
  12. 【优化算法】矮猫鼬优化算法(DMO)【含Matlab源码 611期】
  13. python整体设计目标怎么写_设计模式及Python实现
  14. 计算机网络——常用的网络命令
  15. 39个大数据可视化工具 数据研究必备
  16. python所有for循环语句都可以用while改写_Python while循环
  17. postman——基础操作——API请求与响应——构造器
  18. 有道云笔记客户端不显示图片
  19. java无法重命名文件_巧妙地解决Java文件重命名失败的问题
  20. 计算机发展至今多少年,电子计算机的发展史年份

热门文章

  1. 2017-12-16 机器视觉表面缺陷检测综述
  2. stackoverflow愚人节彩蛋效果
  3. 2017年4月24号课堂笔记
  4. win7上安装php的扩展vld
  5. C语言4位BCD码加法器,bcd码加法器
  6. 聊一聊28岁程序员被裁,我的思考和建议
  7. pe装kali linux,二、整合老毛桃PE + Kali Linux
  8. 爬取网易云音乐所有歌单信息
  9. 章节三:BeautifulSoup
  10. 三菱FX3U PLC模拟量输入FB(FX2N-2AD)