良许Linux教程网 干货合集 一招教你识别单片机是否程序跑飞

一招教你识别单片机是否程序跑飞

最近有一位网友提出了一个问题,关于单片机项目的异常现象。他不确定是程序出错了还是陷入了某个无限循环中,因为这种异常发生的概率很低,也没有规律,所以无法通过在线调试找出问题所在。

针对这个问题,我将分享一种方法来使用ST-LINK Utility工具来判断单片机程序是否跑飞。

首先,我们可以利用ST-LINK Utility工具来查看内核的运行状态,以确定单片机是否发生了异常。

其次,可以使用STM32 ST-LINK Utility工具中的Hot Plug(热插拔)模式来查看内核的运行状态。

1.STM32 ST-LINK Utility模式说明

即设置中三种模式选择:

image-20240103200421740
image-20240103200421740

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

image-20240103200432313
image-20240103200432313

大概意思是:

Normal:常规模式

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

Connect Under Reset:连接复位模式

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

Hot Plug:热插拔模式

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

2.查看内核运行状态

硬件连接好:Target -> MCU Core

image-20240103200436060
image-20240103200436060

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

image-20240103200438840
image-20240103200438840

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

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

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

Option Bytes选项字配置

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

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

拿F401举例:Target ->Option Bytes

image-20240103200442723
image-20240103200442723

STM32 ST-LINK Utility工具还有些特殊功能,可能我们不常用,比如:command line interface命令行接口、external loader developing加载外部程序等,感兴趣的朋友可以参看用户手册研究一下。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
137e00002230ad9f26e78-265×300

A

本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部