重新编程STM32H7设备后,我无法连接到该设备。重置时连接没有帮助。为什么?

有两个可能的根本原因,可以导致这个问题。第一种可能性更大,与电源配置错误有关。其次是选项字节中的引导进程配置。

可能的根本原因1(电源配置错误)

这适用于所有具有可配置内部SMPS降压功能的STM32H7设备。
这很可能与电源配置有关。带有嵌入式降压转换器的STM32H7设备提供不同的电源方案。所选配置取决于外部组件。
此配置只能在通电复位后设置一次。选择错误的配置会导致MCU锁定。配置是用HAL库中的以下行完成的(通常放在SystemClock_Config函数中):
HAL_PWREx_ConfigSupply(…);
大多数板的电源直接来自SMPS(如果在MCU中可用),这需要使用PWR_DIRECT_SMPS_supply参数调用上述函数。但STM32CubeMX生成的项目默认情况下可能具有PWR_LDO_SUPPLY选项。此外,PWR_DIRECT_SMPS_SUPPLY选项在5.4.0及更早版本中可用。
由于在通电重置后只能更改配置一次,因此问题可能会在下一次通电循环后显现出来。
以下是参考手册中的图表,显示了电源的不同硬件配置。

MCU包含保护机制,可以防止将内部SMPS的更高电压设置为VCORE(1.8或2.5V)。这应该可以防止由于配置错误而损坏MCU。

解决方案

由于电源通常是在重置后立即配置的,因此很难在短时间内进行连接。
解决方案1是为了:
  1. 将板插入电源,同时将复位按钮保持在低位(通常为NRST引脚)。
  2. 将重置按钮保持在低位。
  3. 通过STM32CubeProgrammer连接。当程序开始连接时,松开重置按钮。尽管这需要相当精确的时间安排,但应该很容易实现。
  4. 执行大规模擦除。
  5. 请确保已修复项目中的电源配置。
解决方案2是为了:
  1. 将板插入电源,同时BOOT0引脚保持在高位。这需要将BOOT_CM7_ADD1设置为系统内存。
  2. 保持BOOT0(启动)按钮高。
  3. 通过STM32CubeProgrammer连接。系统引导加载程序不应触及电源配置。 然而,它将配置与引导程序通信接口相关的引脚,并可能干扰板上的外部组件(这可能对自定义PCB至关重要)。
  4. 执行大规模擦除。
  5. 请确保已修复项目中的电源配置。

可能的根本原因2(Cortex-M7启动已禁用)

这适用于所有具有双核功能的STM32H7设备。
另一种可能性是,选项字节的配置方式是,只有Cortex-M4在重置后引导(BOOT_CM7/BCM7=0,BOOT_CM4/BCM4=1)。然后,您需要将调试器连接到访问端口3(Cortex-M4),而不是访问端口0(CortexM7)。
在当前的STM32CubeProgrammer版本(2.2.0及更早版本)中,这似乎不起作用。请改用ST链接实用程序,或更新STM32CubeProgrammer(当有新版本时)。
对于开发,建议保持从两个内核启动,否则一些工具/IDE可能无法与设备一起工作。
 
客户注意事项:
1) 您可以通过点击“创建者”信息中提供的姓名来联系这篇文章的作者。
2) 所有其他评论或反馈你可以通过电子邮件发送到community@st.com
3.)如果您需要特定(产品)支持请咨询我们的支持中心(https://www.st.com/content/st_com/en/support/support-home.html)您可以从各种在线支持选项中进行选择,并选择最符合您要求的服务。