【发布时间】: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