STM32L0热插拔时不启动程序
我的代码刷入 STM32L0xx 系列控制器,当断开ST-Link并重新插入为芯片供电时,程序没有运行需要硬件复位才能运行此代码。没有设计复位按钮。如何实现热插拔时启动程序
可能是 BOOT 配置的问题,你检查一下 BOOT0/BOOT1 引脚有没有正确连接?如果 BOOT0 处于高电平,可能会进入系统 Bootloader,而不是你的程序。 你试试在 SystemInit 里手动设置 RCC->CSR |= RCC_CSR_RMVF; 清除复位标志,有时候掉电后 MCU 可能进入异常状态,需要手动清理。 这个问题看着像是电源上电顺序导致的,建议你用示波器看看 VDD 和 NRST 引脚的波形,确认是否存在不稳定情况。 你可以尝试在 main 函数里加一段代码检查 RCC->CSR 的复位原因,并手动触发 NVIC_SystemReset() 试试看。 你试试在 CubeMX 里开启 IWDG(独立看门狗),这样如果 MCU 没有正常启动,看门狗超时会自动复位,可能能解决你的问题。 STM32L0 有低功耗模式,你看看是不是进入了 STOP 或 STANDBY 模式,导致上电后 MCU 没有正常运行? 你的供电电路稳定吗?如果电源上升时间过长或者波动大,可能 MCU 没有正确上电复位,导致程序卡住。 你试试在 startup_stm32l0xx.s 里加个 BKP->CR |= BKP_CR_TAMP1E; 之类的代码,看能不能让芯片在上电后更快启动。 可以试着外加一个上拉电阻(10KΩ 左右)到 NRST 引脚,避免 MCU 复位信号不稳定导致程序未正常启动。 你看看是不是 ST-Link 在调试模式下设置了某些寄存器,导致掉电后 MCU 运行模式不正常?可以尝试使用 Option Bytes 禁止调试模式后再试。 可能是电源问题,热插拔时,由于电源的瞬间波动或不稳定,可能导致STM32L0无法正常启动。 特别是当设备从断电状态迅速切换到通电状态时,电源线的浪涌电流可能对电源稳定性造成影响。 用示波器来监测复位信号是否正常。 热插拔过程中,复位信号可能受到干扰或未能正确触发,导致STM32L0无法正确复位并进入程序执行状态。 如果STM32L0的程序存在错误,或者配置不正确,可能导致在热插拔后无法正常启动。 看看引脚配置、时钟配置是否有误吧。 可能是硬件连接问题吧。 热插拔时,由于连接不良或接口松动,可能导致STM32L0与其他组件之间的通信或电源连接中断,从而无法正常启动。 试试在电源设计中加入浪涌抑制电路或稳压电路,以减少热插拔时的电源波动。
页:
[1]