1) 重置后GPIO不处于高阻抗
2) 对空设备编程后未执行用户代码

在大多数STM32s上,复位后的GPIO配置为高阻抗,调试引脚除外。一些STM32s实现了所谓的空检查机制,当闪存中第一个地址的内容为空时,强制MCU引导到系统内存(ST引导加载程序)中。ST引导加载程序配置所有支持的通信接口和相关的GPIO。这允许对原始设备进行简单编程,但在组装的PCB上编程时可能会出现问题。如果引导程序引脚连接到GND或VDD,可能会导致额外的电流消耗,或者在最坏的情况下导致短路。成功编程后,必须按照特定程序引导到新编程的用户闪存中。仅仅重置设备是不够的。
在下表中,您可以看到STM32系列空检查的可用性。
 
STM32系列
 
空的检查
皮层®
STM32型F0   M0
STM32型F1   立方米
STM32型F2频率   立方米
STM32型功能3   M4毫米
STM32型功能4   M4毫米
STM32型功能7   M7
STM32型10个   M0+
STM32型L1级   立方米
STM32型第4页   M4毫米
STM32型十五   立方米3
STM32型H7   M7/M4毫米
STM32型G0   M0+
STM32型G4型   M4毫米
STM32型世界银行   M4/M0+


设备的完整列表
  • STM32L4型+
  • stm32周
  • STM32G0型
  • STM32F04x不锈钢
  • STM32F09x不锈钢
  • STM32F070x6不锈钢
  • STM32F030xC型
  • STM32L011x/STM32L021x
  • STM32L41x/STM32L42x不锈钢
  • STM32L43x STM32L44x不锈钢
  • STM32L45x STM32L46x不锈钢

当BOOT0配置为选择用户闪存作为目标引导区域(BOOT0引脚连接到GND)时,使用空检查机制。当BOOT0引脚为高电平时,引导选择取决于BOOT1引脚或nBOOT1选项位。
防止在空设备上执行ST引导加载程序
  •  
  • 保持nRST信号为低以保持设备处于复位状态
  • 与调试器连接正在重置。在执行任何指令之前,也就是说,在系统引导加载程序初始化任何外围设备和GPIO之前,它使用重置矢量捕获实现与目标的连接
  • 程序用户flash
  • 在下次重置时清除要从用户闪存启动的空检查位

硬件在通电复位或重新加载选项字节时清除空校验位(请参阅参考手册中的OBL_LAUNCH)。在特定设备上还有两种额外的可能性
  • 在STM32G0和STM32WB上,可以覆盖FLASH_ACR寄存器中的空检查标志
  • STM32F04x和STM32F070x6上的系统引导程序可以检测到闪存不再为空。然后,它将引导内存映射更改为主闪存,并执行跳转到在那里编程的用户代码。

提示:在具有nSWBOOT0或nBOOT_SEL选项位(如STM32WB、STM32L4、STM332G0)的设备上,可以通过使用nBOOT0选项位而不是BOOT0引脚来强制从主闪存启动。

这可以通过以下选项字节配置来实现:
-nSWBOOT0=0(BOOT0信号由nBOOT0选项位定义)对于STM32L4和STM32WB,nBOOT0=1。
-nBOOT_SEL=1(BOOT0信号由nBOOT0选项位定义)对于STM32G0,nBOOT0=1。

有关更多信息,请查看“STM32引导和启动提示”MOOC链接