很多客户在使用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会立即生效。