STM32F系列向G系列切换应用总结—Boot mode及Option byte

很多客户在使用STM32G系列替代STM32F系列时,我们经常会收到客户反馈如果使用串口下载程序?如何修改boot模式?如何将特殊IO复用成通用IO?等等问题;这是由于STM32G系列相对于STM32F系列Boot mode、Option byte发生了一些变化,本文会针对于此类问题做详细的使用讲解。

一. STM32G系列Boot mode

1.1 STM32F系列与G系列Boot mode对比



STM32F系列通用型及部分高性能(F0、F1、F2、F3、F4)MCU是通过外部Boot Pin来的IO输入状态来配置系统的启动方式,并在MCU上电后的第四个时钟周期锁存Boot Pin状态,启动方式分为三种1.Main Flash Mmemory启动,从Flash存储启动,将0x08000000地址加载应用程序;2.System Memory启动,System Memory存储是系统的自举程序,无法篡改;3.Embedded SRAM启动,当设备从SRAM引导时,在应用程序初始化代码中,必须使用NVIC异常表和偏移寄存器重新定位SRAM中的矢量表。



相对于STM32F系列来说,G系列在Boot modes方面最大的改变是增加Option byte与 Boot0 Pin混合配置,启动方式与F系列大致相同。

1.2 STM32G系列BOOT mode变换操作

本次操作流程硬件使用NUCLEO-G431RB开发板为例,软件使用STM32CubePrg。

STM32G431RBT6默认启动是以上图中的第三种方式,即使用Option byte配置,将nBOOT0位配置为1,使用ST-Link连接,打开Option byte->User Configuration,如下图:



此时我们可以通过修改Option byte,来改变系统的启动方式,比如从串口更新程序,需要将系统设置成System Memory启动,运行自举程序,使用图1.2的第七种配置方式,将nBOOT0位置0,nBOOT1位置1,nSWBOOT0位置0,并点击Apply,系统复位之后即从System Memory启动。



1.3 ST-Link无法连接恢复操作

一些客户在使用STM32G系列MCU过程中,会出现程序上电后立马处于低功耗或者SWD接口被复用成IO的情况下,ST-Link会无法连接至MCU,导致无法擦除更新程序,在这种情况下可以通过SRAM启动,然后擦除FALSH应用程序;

如果在应用中会有低功耗模式及SWD接口复用IO的情况下,建议客户的启动方式采用图1.2中第二种方式,将外部BOOT0 Pin拉低,nSWBOOT0位置1;当在软件调试过程中出现以上情况时,可以外部直接将BOOT0拉高,使用SRAM启动后擦除异常程序。



二. STM32G系列Option byte

2.1 STM32G431RB Option byte描述

Option byte是由最终用户根据应用程序要求进行配置,一共是用4 bytes与8 bytes补充构成,通过配置FLASH_OPTR、FLASH_PCROP1SR、FLASH_PCROP1ER、FLASH_WRP1AR寄存器,可以完成软件修改option byte;同时可以使用STM32CubePro修改option byte。

♦FLASH_OPTR寄存器可以进行系统RDP level配置、系统复位相关配置如系统复位电压级别、nRST引脚模式、低功耗复位、开门狗复位等;

♦FLASH_PCROP1SR寄存器用于配置PCROP起始地址;

♦FLASH_PCROP1ER寄存器用于配置PCROP结束地址;(PCROP区域只能用于CPU取值,Debug、CPU取数据、DMA功能全部禁止)

♦FLASH_WRP1AR寄存器用于配置写保护A区域的起始地址和结束地址;

♦FLASH_WRP1BR寄存器用于配置写保护B区域的起始地址和结束地址;(写保护允许有两个非连续区域,写保护区域无法进行mass erase和下载程序)

♦FLASH_SEC1R寄存器用于配置用户代码安全区域,起始地址是0x0800 0000及LOCK_B00T位配置;

♦所有的寄存器操作完成后,可以将FLASH_CR寄存器OBL_LAUNCH( Force the option byte loading)位置1,即可对所有的配置立即生效,否则需要系统复位才能生效;

所有的寄存器配置详细可查阅参考手册RM0440.

2.2 软件修改Option byte流程

当需要使用软件修改Option bytes时,建议使用以下步骤:

  • 检查FLASH_SR寄存器的BSY位,当BSY为0时,表示没有其他正在进行的闪存操作,否则需要等待;
  • 解锁FLASH_CR寄存器,向FLASH_KEYR寄存器写入KEY值;
  • 解锁FLASH_OPTR寄存器,向FLASH_ OPTKEYR寄存器写入KEY值;
  • 将FLASH_CR寄存器OPTSTRT置1,表示开始修改Option byte;
  • 修改需要使用的选项字节;
  • 检查FLASH_SR寄存器的BSY位,当BSY为0时,表示修改完成;
  • 如果需要对选项字节立即生效,将FLASH_CR寄存器OBL_LAUNCH位置1,否则需要复位后才能生效;
  • 锁住FLASH_OPTR寄存器;
  • 锁住FLASH_CR寄存器;
  • 断电、上电系统复位,Option bytes修改生效;

2.3 STM32CubePro修改Option byte流程

STM32CubePro可以通过使用ST-Link或者在系统存储运行下连接至MCU,打开菜单栏中的Option bytes,修改需要的内容,并点击Apply,点击Apply后修改的Option bytes会立即生效。

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论