打印
[其他ST产品]

一招轻松识别STM32单片机是否程序跑飞

[复制链接]
532|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jcky001 于 2024-2-6 15:57 编辑

单片机项目偶尔经常出现异常,不知道是程序跑飞了,还是进入某个死循环了?

因为发生概率比较低,也没有规律,所以没办法在线调试查找问题。

结合这个问题,给大家分享一下用ST-LINK Utility识别单片机程序是否跑飞。

利用ST-LINK Utility查看内核运行状态



做想要知道单片机是否跑飞,可以利用ST-LINK Utility查看内核运行状态。

利用STM32 ST-LINK Utility工具中Hot Plug热插拔模式,查看内核运行状态。

1.STM32 ST-LINK Utility模式说明
即设置中三种模式选择:


主要有三种,在这个工具的用户手册中可以看到:


大概意思是:

Normal:常规模式

连接目标(芯片)之后,芯片复位,然后暂停(halted)。

Connect Under Reset:连接复位模式

主要用于JTAG/SWD引脚被禁用的时候。

Hot Plug:热插拔模式

连接目标芯片,不复位/重置芯片,则此时可以查看芯片状态。

2.查看内核运行状态

硬件连接好:Target -> MCU Core



当你的程序跑飞,内核就处于异常状态,这里可以查看MCU内核的运行状态,简单的说就可以查看PC跑到哪儿去了(你应用程序跑如果超过相应区域,说明跑飞了)。

图片

举个例:你应用程序存储在0x08010000 --- 0x08020000 这个范围内,正常运行应用程序应该在这个范围内,但是你发现PC的值为0x08025000(不在范围内),那就说明跑飞了。

这里可以执行的操作有:运行、暂停、系统复位、内核复位、单步运行、读内核寄存器。类似于IDE中的在线调试(IDE在线调试需要有源代码,而这里不需要源代码,可直接查看PC执行到的地址)。

提示:PC:Program Counter即程序计数器寄存器,指向当前执行程序的地址,如果修改它的值,就能改变程序的执行流。(具体可以参看Cortex-M3内核寄存器所在章节)

Option Bytes选项字配置



这里额外说一下选项字配置的内容。

对Option Bytes操作常用的一个就是对Flash加密(读/写保护)。当然,读写保护可以通过程序代码实现,也可以通过这里说的选项字设置来实现。

拿F401举例:Target ->Option Bytes

图片
STM32 ST-LINK Utility工具还有些特殊功能,可能我们不常用,比如:command line interface命令行接口、external loader developing加载外部程序等,感兴趣的朋友可以参看用户手册研究一下。
好了,本文就分享以上几点内容,希望对你们有所帮助。

使用特权

评论回复
沙发
tpgf| | 2024-4-2 17:08 | 只看该作者
想要实现这个功能 就只能使用ST-LINK Utility吗

使用特权

评论回复
板凳
观海| | 2024-4-2 19:02 | 只看该作者
这个工具大概是一个什么价格啊

使用特权

评论回复
地板
观海| | 2024-4-2 19:02 | 只看该作者
如何区分正常状态和异常状态呢

使用特权

评论回复
5
八层楼| | 2024-4-2 19:34 | 只看该作者
想要看的懂 也需要对芯片地址非常了解啊

使用特权

评论回复
6
八层楼| | 2024-4-2 19:34 | 只看该作者
对于新手来说 单片机跑飞是非常普通的事情

使用特权

评论回复
7
晓伍| | 2024-4-2 20:06 | 只看该作者
如果选择让单片机自己跑 也可以使用点亮小灯的办法来确定

使用特权

评论回复
8
磨砂| | 2024-4-2 20:38 | 只看该作者
就是动态观看各个寄存器的变化是吧啊

使用特权

评论回复
9
caigang13| | 2024-4-2 20:55 | 只看该作者
很简单,程序没有正常运行了多半就是跑分了

使用特权

评论回复
10
木木guainv| | 2024-4-2 21:10 | 只看该作者
这种识别方式需要连接仿真器吗

使用特权

评论回复
11
chenjun89| | 2024-4-3 07:50 | 只看该作者
拿个点灯来指示是否跑飞就行

使用特权

评论回复
12
liu96jp| | 2024-4-7 16:35 | 只看该作者
跑飞还不简单?直接就运行不下去了啊

使用特权

评论回复
13
LEDyyds| | 2024-4-7 16:54 | 只看该作者
这个工具很好啊,竟然可以热拔插

使用特权

评论回复
14
lix1yr| | 2024-4-7 17:42 | 只看该作者
其实加个看门狗就行了,就知道是否跑飞了

使用特权

评论回复
15
t1ngus4| | 2024-4-7 18:46 | 只看该作者
我觉得可以考虑一下log,做个log输出试试

使用特权

评论回复
16
y1n9an| | 2024-4-7 19:30 | 只看该作者
一般死循环的话,不都是要重启的么?

使用特权

评论回复
17
w2nme1ai7| | 2024-4-7 20:49 | 只看该作者
可以挂个仿真器的,一直仿真看看

使用特权

评论回复
18
su1yirg| | 2024-4-7 21:52 | 只看该作者
加个LED试试呗,LED不运行了,就说明MCU死机了

使用特权

评论回复
19
tax2r6c| | 2024-4-8 07:22 | 只看该作者
一般就少弄点while就好了,总循环就容易死机的哦

使用特权

评论回复
20
kaif2n9j| | 2024-4-8 08:32 | 只看该作者
你这个方法好像也挺好的,虽然我没试过,但是看着还不错

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1413

主题

3784

帖子

5

粉丝