[STM32L0] STM32L072 脱机不运行

[复制链接]
263|27
zhang..yb 发表于 2026-8-7 13:10 | 显示全部楼层 |阅读模式
芯片功能没啥问题,用 ST-link MDK调试时,要按几次全速按钮程序才会跑,跑起来功能没啥问题,脱机程序不跑。硬件是量产的电路板,跑量产程序没啥问题。

如果是程序问题,那仿真调试也不会正常。
classroom 发表于 2026-8-7 14:38 | 显示全部楼层
复位电路电容或电阻虚焊,导致上电复位电平爬坡太慢,调试器强制复位能覆盖这个问题。
cr315 发表于 2026-8-7 15:10 | 显示全部楼层
BOOT0引脚悬空或电平不稳,脱机上电时随机进入系统存储器,调试器连接时会强制拉回主闪存。
duo点 发表于 2026-8-7 15:41 | 显示全部楼层
电源去耦电容不够,脱机上电瞬间VDD跌落,MCU进入欠压复位死锁,调试器供电更稳所以能跑。
elephant00 发表于 2026-8-7 14:39 | 显示全部楼层
外部晶振起振时间过长,程序等待HSE就绪超时后卡死,调试器单步执行时给了足够起振时间。
flycamelaaa 发表于 2026-8-7 16:12 | 显示全部楼层
看门狗在初始化前被意外使能,脱机上电喂狗不及时复位,调试器断点会暂停看门狗计数。
jcky001 发表于 2026-8-7 16:43 | 显示全部楼层
程序里用了while循环等待某个外设标志位,该外设上电默认状态与预期不符,调试器手动全速时外设已被初始化完成。
onlycook 发表于 2026-8-7 17:13 | 显示全部楼层
启动文件中的堆栈指针初始值在脱机下被错误地址覆盖,调试器加载符号表时重新设定了堆栈。
xch 发表于 2026-8-7 15:42 | 显示全部楼层
查一下程序加载地址空间
 楼主| zhang..yb 发表于 2026-8-7 16:07 | 显示全部楼层
cr315 发表于 2026-8-7 15:10
BOOT0引脚悬空或电平不稳,脱机上电时随机进入系统存储器,调试器连接时会强制拉回主闪存。 ...

BOOT0 通过电阻接地了
 楼主| zhang..yb 发表于 2026-8-7 16:15 | 显示全部楼层
MDK 进入调试界面后,程序不是定位·到 main 函数第一行,而是定位到汇编启动代码,要按 4 次全速运行程序才跑起来。
烧入量产的 hex 文件,运行很正常,硬件应该是没问题的
 楼主| zhang..yb 发表于 2026-8-7 16:32 | 显示全部楼层
elephant00 发表于 2026-8-7 14:39
外部晶振起振时间过长,程序等待HSE就绪超时后卡死,调试器单步执行时给了足够起振时间。 ...

有解决办法吗?
pacer81 发表于 2026-8-8 08:36 | 显示全部楼层
鉴于STM32L072是低功耗ULP设计的MCU产品,如果是调试启动上电的问题,建议从BROWNOUT的角度进行排查硬件有两个版本:
上电默认启用 BOR 版本:工作电压范围 1.8V~3.6V
上电默认关闭 BOR 版本:工作电压范围 1.65V~3.6V
建议确认相应版本,如果量产的时候没有问题,那就是连接调试器本身对上电启动的波形有影响,看看你连接调试器启动的时候具体的power ramp up波形情况,3.4.2 power supply supervisor相关章节具有具体描述
The start-up time at power-on is typically 3.3 ms when BOR is active at power-up, the start up time at power-on can be decreased down to 1 ms typically for devices with BOR inactive at power-up.
 楼主| zhang..yb 发表于 2026-8-10 14:15 | 显示全部楼层
onlycook 发表于 2026-8-7 17:13
启动文件中的堆栈指针初始值在脱机下被错误地址覆盖,调试器加载符号表时重新设定了堆栈。 ...

感觉是程序跑飞了,堆栈指针是有很大的嫌疑,但是被什么程序错误覆盖呢?
 楼主| zhang..yb 发表于 2026-8-10 14:31 | 显示全部楼层
jcky001 发表于 2026-8-7 16:43
程序里用了while循环等待某个外设标志位,该外设上电默认状态与预期不符,调试器手动全速时外设已被初始化 ...

程序中移植了 MODBUS RTU协议,该协议用了串口,如果不对串口初始化,程序调试时可以进入main 函数,初始化了就进入启动汇编码了,并且全速运行要按几次才跑起来,跑起来后功能好像很正常的。
yiy 发表于 2026-8-11 12:00 | 显示全部楼层
ST‑Link/J‑Link 在线调试、下载程序一切正常,拔掉调试器单独供电,芯片无反应、外设不工作,按下硬件复位也无效,按硬件→工程烧录配置→代码逻辑→进阶锁死问题顺序排查即可。
 楼主| zhang..yb 发表于 2026-8-11 14:51 | 显示全部楼层
在线调试需多按几次全速按钮才能跑起来,跑起来后一切正常,调试程序是烧入 FLASH调试的,工程烧录配置是指什么?我用 CubeProgram烧录脱机运行也不行。代码逻辑有问题应该在线调试就发现了。
 楼主| zhang..yb 发表于 2026-8-11 17:05 | 显示全部楼层
pacer81 发表于 2026-8-8 08:36
鉴于STM32L072是低功耗ULP设计的MCU产品,如果是调试启动上电的问题,建议从BROWNOUT的角度进行排查硬件有 ...

加 3.3V 电源,两个版本有什么区别吗?
 楼主| zhang..yb 发表于 2026-8-12 09:35 | 显示全部楼层
#if MB_RTU_ENABLED > 0
        case MB_RTU:
            pvMBFrameStartCur = eMBRTUStart;
            pvMBFrameStopCur = eMBRTUStop;
            peMBFrameSendCur = eMBRTUSend;
            peMBFrameReceiveCur = eMBRTUReceive;
            pvMBFrameCloseCur = MB_PORT_HAS_CLOSE ? vMBPortClose : NULL;
            pxMBFrameCBByteReceived = xMBRTUReceiveFSM;
            pxMBFrameCBTransmitterEmpty = xMBRTUTransmitFSM;
            pxMBPortCBTimerExpired = xMBRTUTimerT35Expired;  

            eStatus = eMBRTUInit( ucMBAddress, ucPort, ulBaudRate, eParity );

执行了上面的语句,脱机就无法运行,注释掉就可以·脱机运行,还是软件引起的脱机不运行,与硬件无关
ClarkLLOTP 发表于 2026-8-12 21:45 | 显示全部楼层
看来是看门狗定时器在捣乱,初始化时别让它自动使能,可以手动喂狗看效果。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

114

主题

477

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
0