咚了个咚 发表于 2025-4-2 10:00

STM32L0热插拔时不启动程序

我的代码刷入 STM32L0xx 系列控制器,当断开ST-Link并重新插入为芯片供电时,程序没有运行需要硬件复位才能运行此代码。
没有设计复位按钮。如何实现热插拔时启动程序





公羊子丹 发表于 2025-4-3 07:36

可能是 BOOT 配置的问题,你检查一下 BOOT0/BOOT1 引脚有没有正确连接?如果 BOOT0 处于高电平,可能会进入系统 Bootloader,而不是你的程序。

周半梅 发表于 2025-4-3 07:37

你试试在 SystemInit 里手动设置 RCC->CSR |= RCC_CSR_RMVF; 清除复位标志,有时候掉电后 MCU 可能进入异常状态,需要手动清理。

帛灿灿 发表于 2025-4-3 07:37

这个问题看着像是电源上电顺序导致的,建议你用示波器看看 VDD 和 NRST 引脚的波形,确认是否存在不稳定情况。

童雨竹 发表于 2025-4-3 07:38

你可以尝试在 main 函数里加一段代码检查 RCC->CSR 的复位原因,并手动触发 NVIC_SystemReset() 试试看。

万图 发表于 2025-4-3 07:39

你试试在 CubeMX 里开启 IWDG(独立看门狗),这样如果 MCU 没有正常启动,看门狗超时会自动复位,可能能解决你的问题。

Wordsworth 发表于 2025-4-3 07:40

STM32L0 有低功耗模式,你看看是不是进入了 STOP 或 STANDBY 模式,导致上电后 MCU 没有正常运行?

Bblythe 发表于 2025-4-3 07:41

你的供电电路稳定吗?如果电源上升时间过长或者波动大,可能 MCU 没有正确上电复位,导致程序卡住。

Pulitzer 发表于 2025-4-3 07:42

你试试在 startup_stm32l0xx.s 里加个 BKP->CR |= BKP_CR_TAMP1E; 之类的代码,看能不能让芯片在上电后更快启动。

Uriah 发表于 2025-4-3 07:43

可以试着外加一个上拉电阻(10KΩ 左右)到 NRST 引脚,避免 MCU 复位信号不稳定导致程序未正常启动。

Clyde011 发表于 2025-4-3 07:44

你看看是不是 ST-Link 在调试模式下设置了某些寄存器,导致掉电后 MCU 运行模式不正常?可以尝试使用 Option Bytes 禁止调试模式后再试。

elephant00 发表于 2025-4-3 11:04

可能是电源问题,热插拔时,由于电源的瞬间波动或不稳定,可能导致STM32L0无法正常启动。

elephant00 发表于 2025-4-3 11:04

特别是当设备从断电状态迅速切换到通电状态时,电源线的浪涌电流可能对电源稳定性造成影响。

stormwind123 发表于 2025-4-3 11:09

用示波器来监测复位信号是否正常。

两只袜子 发表于 2025-4-3 12:36

热插拔过程中,复位信号可能受到干扰或未能正确触发,导致STM32L0无法正确复位并进入程序执行状态。

jcky001 发表于 2025-4-3 13:45

如果STM32L0的程序存在错误,或者配置不正确,可能导致在热插拔后无法正常启动。

cr315 发表于 2025-4-3 14:59

看看引脚配置、时钟配置是否有误吧。

laocuo1142 发表于 2025-4-3 16:56

可能是硬件连接问题吧。

flycamelaaa 发表于 2025-4-3 17:24

热插拔时,由于连接不良或接口松动,可能导致STM32L0与其他组件之间的通信或电源连接中断,从而无法正常启动。

powerantone 发表于 2025-4-3 18:16

试试在电源设计中加入浪涌抑制电路或稳压电路,以减少热插拔时的电源波动。
页: [1]
查看完整版本: STM32L0热插拔时不启动程序