【问题标题】:Can't flash code after using Standby mode. Error in initializing ST-LINK device. Reason: (4) No device found on target使用待机模式后无法刷写代码。初始化 ST-LINK 设备时出错。原因:(4) 在目标上找不到设备
【发布时间】:2020-05-14 23:41:54
【问题描述】:

我正在尝试待机模式。 IDE是STM32CubeIDE,mcu stm32f407vgt9。因此,如果满足以下条件之一,我在数据表中读到了 mcu 离开待机模式:

WKUP 引脚上升沿,RTC 闹钟(闹钟 A 和闹钟 B),RTC 唤醒, 篡改事件、时间戳事件、NRST 引脚外部复位、IWDG 复位。

如果我理解的话,MCU 通过这个函数 HAL_PWR_EnterSTANDBYMode() 进入待机模式。我这样做了,我希望如果 mcu 在 WKUP 引脚 (PA0) 上变高,mcu 将退出待机模式。我希望这个简单的代码能够执行。

  while (1){
  HAL_PWR_EnterSTANDBYMode();
  
  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);
  HAL_Delay(3000);

  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_RESET);
  HAL_Delay(3000);}

MCU 进入待机模式,但永远不会离开待机模式。我尝试将 PA0 连接到高电平,但没有任何反应。

我想刷另一个代码,但现在不可能,因为我从 STM32CubeIDE 得到这个错误:

最终启动顺序出错:

初始化 ST-LINK 设备时出错。

原因:(4) 在目标上找不到设备。

我该如何解决这个问题?在尝试待机之前,我多次遇到此错误,我通过将 NRST 引脚与 GND 连接(硬件重启 mcu)成功解决了他,但现在它不起作用,因为重置后代码将自动执行。将 NRST 与 GND 和 尝试刷新代码是不可能的(将出现新的错误,表明当前已激活硬件重置:初始化 ST-LINK 设备时出错。原因:(8)目标处于重置状态。)。

欢迎任何想法

【问题讨论】:

  • 待机后 cpu 重置,您的 writepin 将永远不会执行。您可以在不进入待机状态的情况下刷新程序吗?您是否启用了低功耗模式下的调试功能?
  • 您对代码执行的看法是正确的。刷了待机功能的代码后就不能刷其他代码了。我可以在哪里启用该功能(在低功耗模式下调试0?
  • 在多个地方。您需要写入 DBGMCU_CR 寄存器。您可以在 openocd 或您的代码中启用它。 sourceforge.net/p/openocd/mailman/message/33251349 或使用 HAL_EnableDBGStandbyMode 或类似的东西。现在,将 BOOT0 或 BOOT1(我不记得)连接到地或 vcc(我不记得)并进入引导加载程序模式。以这种方式重新刷新您的固件。
  • 我找到了解决方案,解决方案和你的一样。将 NRST 与 GND 连接,BOOT0 与 3V 连接,然后断开 NRST 和 GND,然后尝试刷新/调试代码

标签: c embedded sleep stm32 standby


【解决方案1】:

这是解决方案:

将 NRST 与 GND 连接,BOOT0 与 3V 连接,然后断开 NRST 和 GND,然后尝试刷新/调试代码。

【讨论】:

    猜你喜欢
    • 2016-10-31
    • 2017-03-04
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2022-01-02
    • 1970-01-01
    • 2021-07-08
    相关资源
    最近更新 更多