STM32硬件错误的调试技巧

发布者:清新心情最新更新时间:2024-02-18 来源: elecfans关键字:STM32  硬件错误  调试技巧 手机看文章 扫描二维码
随时随地手机看文章

在用Keil对STM32的程序进行仿真时程序有时会跑飞,停止仿真程序会停在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  硬件错误  调试技巧 引用地址:STM32硬件错误的调试技巧

上一篇:STM32芯片的内部架构如何
下一篇:基于STM32的小说阅读器

推荐阅读最新更新时间:2024-11-10 10:48

STM32驱动舵机
舵机控制原理: 提供周期为20ms的pwm信号,调节pwm的占空比为0.5ms-2.5ms可使舵机从0-180度线性变化 舵机控制程序: 首先我们要利用stm32定时器产生合适周期的pwm输出信号,这里使用的是PWM高级定时器1的CH1(即PA8),可以通过配置输入参数arr和psc产生合适的频率的pwm脉冲信号。 //高级定时器1pwm输出初始化 //arr:自动重装值(周期) psc:时钟预分频数 void tim1_pwmInit(uint16_t arr, uint16_t psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeD
[单片机]
关于STM32进入低功耗模式后无法烧写程序的解决办法
我们经常要设置STM32在某个时候进入低功耗模式,很多人在进入低功耗模式调试的时候,无法再次烧写程序,解决办法是: 1.必须将boot0拉高,boot1(PB2)拉低,然后(必须)重启电源,单片机会进入ISP编程模式,这时候通过串口1就可以下载程序。 2.先按住复位按钮,然后点击MDK的下载,然后放开复位,有的板子没有复位脚,将NRST引出也可以。 3.用仿真 器下载时,如果仿真器连了复位线,下载设置里将硬复位打开就可以。(目前问题boot0拉高才可以,但是应该跟启动方式无关) HW RESER 跟SYSRESERREQ都可以 使用ST-Link下载程序时提示“flash timeout.reset the target
[单片机]
关于<font color='red'>STM32</font>进入低功耗模式后无法烧写程序的解决办法
STM32】串口接收任意字符串
前言 之前写了一篇STM32hal库串口中断接收任意字符 实际上是不完美的,他接收到换行符就完蛋了。 花了点时间深入研究了一下hal库的串口中断函数,发现他其实是不完美的,有一些BUG。 所以查了资料,找了很久,才找到这个博主的文章: STM32CubeMX5.1.0使用教程,以STM32L431为例(三):串口通信 cube配置 设置串口波特率和中断 生成工程文件,去hal库的 stm32l4xx_it 里注释掉串口中断函数(官方有问题,我们自己写!) usart.h: usart.h: /* Define to prevent recursive inclusion -------------------
[单片机]
【<font color='red'>STM32</font>】串口接收任意字符串
STM32中数据类型定义 U8 U16 U32解释说明
stdint.h 这里放着C语言的标准表达方式 typedef signed char int8_t; typedef signed short int int16_t; typedef signed int int32_t; typedef signed __int64 int64_t; typedef unsigned char uint8_t; typedef unsigned short int uint16_t; typedef unsigned int uint32_t; typedef unsigned __int
[单片机]
<font color='red'>STM32</font>中数据类型定义 U8 U16 U32解释说明
STM32的JTAG下载模式
SWJ:串行线JTAG配置 (Serial wire JTAG configuration) SWJ(串行线JTAG)支持JTAG或SWD访问Cortex的调试端口。 系统复位后的默认状态是启用SWJ但没有跟踪功能,这种状态下可以通过JTMS/JTCK脚上的特定信号选择JTAG或SW(串行线)模式。
[单片机]
STM32串口DMA容易忽视的问题
昨天晚上在STM32串口DMA的问题上纠结了好长时间,所以今天上午写篇博客来谈谈我对串口DMA发送的理解 讨论三个问题:1、什么叫串口DMA 请求;2、串口简要复习;3、串口DMA发送流程。 1、什么叫串口DMA 请求(战舰STM32开发板) 说这个问题之前先简单回顾DMA的基本特性。先导出原子哥的PPT内容: DMA 全称Direct Memory Access,即直接存储器访问。 DMA传输将数据从一个地址空间复制到另一个地址空间。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实现和完成的。 STM32有两个DMA控制器(DMA2只存在于大容量产品中),DMA1有7个通道,DMA2有5个
[单片机]
<font color='red'>STM32</font>串口DMA容易忽视的问题
GD32单片机STM32远程下载手机程序升级固件下载局域网网页升级工具
GD32、STM32单片机,是我们最常见的一种MCU。通常我们在使用STM32单片机都会遇到程序在线升级下载的问题。 GD32/STM32单片机的在线下载通常需要以下几种方式完成: 1、使用ST/GD提供的串口下载工具,本地完成固件的升级下载。 2、自行完成系统BootLoader的编写,将系统程序分为BootLoader和APP两个部分,BootLoader完成固件升级。 3、使用STM32/GD固件服务器,完成固件的升级,固件服务器https://simplewifi.taobao.com/ 几种方式各有优缺点: 使用ST提供的方法进行固件升级,方法简单,不需要额外的开发。但是,只能本地完成STM32单片机的升级。
[单片机]
GD32单片机<font color='red'>STM32</font>远程下载手机程序升级固件下载局域网网页升级工具
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved