0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32硬件错误的调试技巧

小麦大叔 来源:小麦大叔 作者:小麦大叔 2022-07-21 14:39 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在用KeilSTM32的程序进行仿真时程序有时会跑飞,停止仿真程序会停在HardFault_Handler函数里的死循环while(1)中。

这说明STM32出现了硬件错误。

4651ec2c-08a8-11ed-ba43-dac502259ad0.png

硬件错误中断

STM32出现硬件错误可能有以下原因:

数组越界操作;

内存溢出,访问越界;

堆栈溢出,程序跑飞;

中断处理错误;

遇到这种情况,可以通过以下2种方式来定位到出错代码段。

方法1:

在硬件中断函数HardFault_Handler里的while(1)处打调试断点,程序执行到断点处时点击STOP停止仿真。

466c27d6-08a8-11ed-ba43-dac502259ad0.png

示例

1.2 在Keil菜单栏点击View——Registers Window,在寄存器查看窗口查找R14(LR)的值。

如果R14(LR) = 0xFFFFFFE9,继续查看MSP(主堆栈指针)的值;如果R14(LR) = 0xFFFFFFFD,继续查看PSP(进程栈指针)的值;

我的程序R14(LR) = 0xFFFFFFF9,接下来以此为例。

467999d4-08a8-11ed-ba43-dac502259ad0.png

寄存器信息

1.3 在Keil菜单栏点击“View”——“Memory Windows”——“Memory1”;

在“Address”地址栏中输入MSP的值:0x20001288,然后在对应的行里找到地址。

地址一般以0x08开头的32位数。本例中,地址为0x08003CB9。

4691ad3a-08a8-11ed-ba43-dac502259ad0.png

内存信息

1.4 在Keil菜单栏点击View——Disassembly Window,在Disassembly窗口中右击,在下拉菜单中选择Show Disassemblyat Address...。

在弹出框Show Code atAdress的地址框中输入地址0x08003CB9进行搜索,然后就会找到相对应的代码。这里的代码就是进入循环中断之前的情况。

仔细查看附近区域的相关代码来排查错误具体原因。

46b206c0-08a8-11ed-ba43-dac502259ad0.jpg

方法2:

2.1在硬件中断函数HardFault_Handler里的while(1)处打调试断点,程序执行到断点处时点击“STOP”停止仿真。

46d05efe-08a8-11ed-ba43-dac502259ad0.jpg

CallStack

2.2 在Keil菜单栏点击View——Call Stack Window弹出Call Stack + Locals对话框。

然后在对话框中右键选择Show Caller Code,就会跳转到出错之前的函数处,仔细查看这部分函数被调用或者数组内存使用情况。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371073
  • 硬件
    +关注

    关注

    11

    文章

    3555

    浏览量

    68734
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66817

原文标题:简单实用!STM32硬件错误的调试技巧

文章出处:【微信号:knifewheat,微信公众号:小麦大叔】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    单片机系统硬件调试方法

    ,单片机的系统硬件调试,需要从硬件的静态调试和动态调试两个角度人手: 单片机系统硬件的静态
    发表于 12-03 06:10

    AMD Vivado ChipScope助力硬件调试

    许多硬件问题只有在整个集成系统实时运行的过程中才会显现出来。AMD Vivado ChipScope 提供了一套完整的调试流程,可在系统运行期间最大限度提升对可编程逻辑的观测能力,助力设计调试
    的头像 发表于 09-05 17:08 899次阅读

    Modus工具箱调试错误怎么解决?

    我下载了 Modus Toolbox 3.1.0 并成功添加了 CYBT0243053 的模板应用程序。 但我在调试模板代码时遇到了错误。 我正在使用 USB 串口线进行调试。 我该如何进行
    发表于 07-01 06:53

    使用STM32CubeIDE调试STM32MP157D的M4内核时报了下图这个错误,怎么解决?

    我使用STM32CubeIDE调试STM32MP157D的M4内核时报了下图这个错误: 经过我的排除后发现,应该是STM32CubeIDE
    发表于 06-18 06:57

    硬件调试:JLink 驱动配置与调试技巧

    摘要: 本文深入探讨了 JLink 调试器在嵌入式系统硬件调试中的应用,详细阐述了 JLink 驱动配置的方法以及硬件调试技巧。本文以国科安
    的头像 发表于 06-12 23:20 1263次阅读
    <b class='flag-5'>硬件</b><b class='flag-5'>调试</b>:JLink 驱动配置与<b class='flag-5'>调试</b>技巧

    STM32F10xxx硬件开发指南

    官方STM32F10xxx硬件开发指南
    发表于 04-14 14:59 2次下载

    在mimxrt1170_evk调试hello_world出现硬件传输错误怎么解决?

    错误 硬件传输错误 调试上下文:evkmimxrt1170_hello_world_cm4 LinkServer Debug 请指教,非常感谢!
    发表于 03-25 07:31

    STM32调试神器STM32CubeMonitor介绍

    STM32CubeMonitor除了同样可以提供变量监测的功能,还有非常丰富的组件可以搭建各种风格的图形化界面,以及众多免费的第三方组件可以进行功能扩展。此外,STM32CubeMonito还支持远程监测功能。
    的头像 发表于 03-17 10:45 1494次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>调试</b>神器<b class='flag-5'>STM32</b>CubeMonitor介绍

    如何通过J-Link实现STM32H5控制调试端口

    基于J-Link实现STM32H5安全编程介绍了在禁用TrustZone时,如何通过J-Link实现STM32H5控制调试端口的安全锁定或回归打开。
    的头像 发表于 03-17 10:25 1060次阅读
    如何通过J-Link实现<b class='flag-5'>STM32</b>H5控制<b class='flag-5'>调试</b>端口

    STM32CubeIDE无法启动正常调试是哪里出了问题?

    STM32CubeIDE始终正常使用中,昨日系统升级为 macOS Sequoia 版本,启动调试出现错误提示,重新安装应用程序及 st-stlink-server 驱动,仍提示同样错误
    发表于 03-14 16:30

    使用STM32CubeIDE调试STM32MP157D的M4内核时报了错误怎么解决?

    我使用STM32CubeIDE调试STM32MP157D的M4内核时报了下图这个错误: 经过我的排除后发现,应该是STM32CubeIDE
    发表于 03-14 06:01

    STM32F103C8T6使用CubeIDE烧录运行报硬件错误,相同代码MDK烧录却可以正常运行,为什么?

    自制PCB使用STM32F103C8T6,通过STM32CubeMX生成了CubeIDE项目和MDK项目,编译下载相同的代码CubeIDE不能正常执行,经过调试发现进入了硬件
    发表于 03-12 06:18

    STM32 AD采集:电阻分压电路调试指南

    调试基于STM32为主控,内部ADC采集电阻分压式电压值电路,STM32未使用参考电压源,直接将Vref接至3V3供电端,发现采集后电压误差较大,其电路图如下所示。 理论计算 根据分压公式,理想Vr
    的头像 发表于 02-07 11:12 3291次阅读
    <b class='flag-5'>STM32</b> AD采集:电阻分压电路<b class='flag-5'>调试</b>指南

    GPIO错误排查与解决

    。输入模式下,GPIO可以读取外部信号;输出模式下,GPIO可以控制外部设备。正确配置GPIO对于系统的正常运行至关重要。 2. 常见的GPIO错误 引脚配置错误 :GPIO引脚未正确配置为输入或输出。 电平错误 :输出电平与预
    的头像 发表于 01-09 09:46 3699次阅读

    伺服系统调试技巧与注意事项

    。了解这些组件的功能和它们之间的连接方式是调试的基础。 2. 检查硬件连接 在通电之前,必须确保所有的硬件连接都是正确的。这包括电机与驱动器之间的连接、编码器的接线、以及与控制系统的通信连接。
    的头像 发表于 12-10 10:15 1826次阅读