专栏首页安富莱嵌入式技术分享【STM32F429开发板用户手册】第28章 STM32F429的系统bootloader基础知识

【STM32F429开发板用户手册】第28章 STM32F429的系统bootloader基础知识

最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255

第28章       STM32F429的系统bootloader基础知识

本章为大家介绍STM32F429内置的系统bootloader的基础知识。

28.1 初学者重要提示

28.2 系统bootloader基础知识

28.3 进入系统bootloader的方法

28.4 退出系统bootloader的方法

28.5 系统bootloader的擦写管理

28.6 总结

28.1 初学者重要提示

  1.   本章主要为大家介绍系统bootloader的理论知识,下个章节为大家实战。
  2.   更多系统bootloader的基础知识看本帖的AN2606应用笔记:http://www.armbbs.cn/forum.php?mod=viewthread&tid=96573

28.2 系统bootLoader基础知识

STM32的系统存储区自带bootloader,此程序是ST在芯片出厂时烧录进去的,主要用于将用户应用程序下载到芯片内部Flash。支持USB,SPI,I2C,CAN,UART等接口方式下载。如果大家的应用程序打算采用这种接口方式进行升级,可以考虑采用系统bootloader,简单易用,无需用户自己写bootLoader了。

更重要的是,使用系统bootLoader可以不依赖硬件boot引脚,可以直接从应用程序跳转到系统bootLoader,这样灵活性就很大了。

28.2.1 系统bootLoader执行流程

下面是STM32F429的bootLoader程序执行流程,简单了解下即可:

关于这个执行流程,要特别注意一点:如果在进入系统bootLoader前就插入了USB线,会导致进入系统bootLoader后优先执行USB DFU,其它的接口方式将没有机会执行。

28.2.2 系统bootLoader使用的引脚

STM32F4的bootloader使用到的引脚分配如下:

28.3 进入系统bootLoader的方法

STM32进入系统bootLoader主要有两种方法,一种是设置boot引脚,另一种是应用程序直接跳转到系统bootLoader。

28.3.1 设置硬件boot引脚进入系统bootLoader

STM32F429支持的启动方式如下:

  •   从Flash启动(正常运行时选择这种模式)。
  •   从系统存储器启动(做ISP下载时用)。
  •   从内嵌SRAM启动(调试用,一般很少使用)。

具体到原理图上的设计如下:

  •   如果仅作从Flash驱动,可以将BOOT0和BOOT1直接接地,不需要电阻。
  •   从SRAM启动,BOOT1固定取低电平,BOOT0可以取高电平或者低电平。注意硬件上不支持从SRAM启动。因为掉电后,SRAM中的数据消失。

28.3.2 用户应用程序跳转到系统bootLoader

除了使用boot引脚控制运行系统bootLoader,也可以上电后跳转,跳转前注意以下问题:

  •   禁止所有外设时钟。
  •   禁止使用的PLL。
  •   禁止所有中断。
  •   清除所有中断挂起标志。
  •   如果使用Go命令,对于bootLoader中使用的硬件外设寄存器,跳转前是不会设置到复位值的,如果用户代码中恰好也用到这些寄存器,需要重新配置。这里要特别注意的是BootLoader会用到看门狗,并且喂狗时间设为最长了,如果用户代码里面要用到看门狗请根据需要重新配置,并且看门狗一旦开启是无法关闭的。
  •   对于具有双bank特性的STM32,为了能够从用户代码跳转到系统boot,需要将系统boot代码区使用寄存器SYSCFG重映射到0x0000 0000(除了F7和H7系列)。对于STM32F7系列,需要禁止nDBOOT / nDBANK 特性,然后跳转到系统boot区。
  •   如果用到系统bootloader的DFU/CAN接口,需要用到HSE时钟,这个时钟的频率是通过内部HSI/MSI检测出具体频率。因此,由于外部温度等各种情况,内部HSI的精度会受到影响,从而影响检测出来的HSE时钟有较大误差,最终导致DFU/CAN运行失败。

具体实现会在下一章节为大家讲解。

28.4 退出系统bootLoader的方法

当前主要研究了USB DFU和串口IAP退出bootLoader。

  •   USB DFU

当芯片工作在系统bootLoader的USB DFU模式,更新完毕程序后,不会自动退出USB DFU,需要重新复位芯片后才会退出。由于DFU模式会用到USB线,插拔USB线是难以避免的,所以是否支持自动退出,并不影响。

  •   串口IAP

当芯片工作在系统bootLoader的串口升级模式,更新完毕程序后,可以自动退出。所以基于串口的组网设备,使用系统bootloader非常方便。

28.5 系统bootLoader的擦写管理

注:这部分知识点有个了解即可。

使用bootloader命令进行的所有写操作都只能字对齐(地址应该是4的倍数)。要写入的数据数量也必须是4的倍数(接受未对齐的半页写地址)。

  •   有些产品不支持批量擦除操作。使用BootLoader进行批量擦除时,有两种方法可用:
    •   使用扇区擦除命令一个一个删除。
    •   将保护级别设置为1,然后设置为0(使用读保护命令,然后使用读非保护命令),将导致大批量擦除操作。
  •   STM32 L1和L0系列的Bootloader除了支持操作内部Flash,内部SRAM,可选字节等,还支持操作Data Memeory(数据存储区,貌似是指的EEPROM)。数据存储区支持读写操作,而不支持擦除命令,如果要擦除,写0即可。另外对此存储区的写操作必须是4字节对齐(写地址),并且写入的数据也是4的倍数。
  •   F2, F4, F7 和 L4除了支持操作内部Flash,内部SRAM,可选字节等,还支持操作OTP存储区。仅支持读写操作,不支持擦除命令。
  •   F2, F4 和 F7系列的内部Flash写格式依赖于供电电压范围,默认的写操作只支持字节(半字,字和双字是不支持的),为了增加写操作速度,用户施加足够的电压范围以允许写操作按半字,字或双字,并通过虚拟内存位置的boot程序更新此配置。该内存位置不是物理地址,但可以根据协议使用常规的BootLoader读写操作。该存储位置包含4个字节,分别为如下表所述:

28.6 总结

本章节就为大家讲解这么多,更新相关的知识看ST的应用笔记AN2606。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • STM32F407的系统bootloader基础知识

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255

    armfly
  • 【STM32H7教程】第67章 STM32H7的系统bootloader基础知识

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980

    armfly
  • 【STM32H7的DSP教程】第5章 Matlab简易使用之常用编程语句

    完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547

    armfly
  • STM32F407的系统bootloader基础知识

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255

    armfly
  • Mybatis 文档(二)

    这条语句提供了一种可选的查找文本功能。如果没有传入“title”,那么所有处于“ACTIVE”状态的BLOG都会返回;反之若传入了“title”,那么就会对“t...

    Remember_Ray
  • Mybatis 动态 SQL

    Mybatis 动态SQL,通过 ●if ●choose (when, otherwise) ●trim (where, set) ●foreach ...

    赵哥窟
  • Mybatis 条件判断单双引号解析问题

    最近使用 Mybatis 遇到了一个奇怪的问题,前端传了一个数字字符串(type = "1") ,我做了如下判断:

    JMCui
  • [angularjs] angularjs系列笔记(八)事件

    当点击按钮的时候,赋值count变量并且给count变量加1,显示出count变量

    陶士涵
  • 在线教育等于移动互联网教育吗?

    教育本身的范畴很广,以人的时间范畴和教育内容去分,能分为早期教育,K12基础教育,大学教育,职业技能教育,兴趣爱好教育,心智教育。K12基础教育是市场份额最大的...

    大葡萄
  • 利用Vue实现简易tab切换效果

    (1) 以上代码看起来似乎很简单容易懂,而且效果也能实现,但不够灵活。我们可以发现如果标题和内容同时增多我们要不停的添加cur的索引值,因此我们有必要改进一下代...

    kirin

扫码关注云+社区

领取腾讯云代金券