stm32第一次烧录或者上电运行卡死问题分析

news2025/3/11 4:52:47

问题描述

  • 单片机烧录代码(刚上电)无法立即运行,必须要复位一次或多次才能运行;
  • 跟踪调试会进入HardFault_Handler中断。

问题分析

  1. 烧录配置如下图,首先排除配置问题
  2. 那么该问题就比较让人头大了,理论上,如果代码有问题,那工程应该运行不起来才对;但是话又说回来,如果代码没问题,那为什么会出现这种运行卡死的情况?
  3. 常理上讲,一般代码进入HardFault_Handler,多半是跟硬件有关,这个时候就需要检查硬件相关的一些外设的配置了,如gpio、uart、spi、DMA等等,跟io相关的外设要尤其注意!!!
  4. 排查相关外设,最终发现某个gpio驱动存在问题(该io本来是要控制某一个开关的,拉低导通,但是由于硬件修改,已经把该io接地,这就导致本来已经接地的io又被我初始化了一遍,且默认拉高)

 方案验证

 由于硬件已经接地,所以开关处于常导通状态,此时不用再对该io做任何配置,屏蔽掉该io的相关初始化接口,最终问题解决。

反思及总结

        电平之间的相互冲突可能会导致硬件冲突,进而出现代码不能稳定运行的情况,所以在使能外设时一定要仔细检查相关的时钟配置是否正确(如spi、iic、adc等)、电平是否被钳位到稳定状态(拉高或者拉低,最好不要出现悬空!!!)、硬件资源是否存在冲突。

 备注

以下列举一些进入硬件错误中断的情况: 

1. 非法内存访问

  • 访问未分配的内存区域,例如:
    • 空指针访问 (NULL pointer)。
    • 超出有效范围的数组下标。
    • 访问不存在的外设寄存器地址。

2. 执行非法指令

  • 程序计数器(PC寄存器)跳转到非代码区域,导致执行无效指令。
  • 通常是函数指针错误、栈溢出或闪存内容被错误修改。

3. 堆栈溢出

  • 当任务栈或主栈使用超出分配的内存时,可能覆盖到其他内存区域,引发异常。
  • 常见原因:
    • 函数递归调用太深。
    • 大量局部变量分配,超过栈的容量。

4. 总线错误(Bus Fault)

  • 对外设或存储器执行无效的访问操作,可能因以下原因导致:
    • 非对齐的内存访问(具体取决于目标处理器,Cortex-M0 不支持非对齐访问,M3/M4 通常支持)。
    • 缓存一致性问题或外设配置错误。

5. 除以零

  • 在代码中执行除以零操作时会触发异常,除非已经禁用异常。

6. 非法优先级设置

  • NVIC 优先级分组与中断优先级配置错误可能导致异常。

7. MPU(内存保护单元)访问限制

  • 如果启用了 MPU(Memory Protection Unit),对受保护区域的访问将触发硬件异常。
  • 常见情况:
    • 用户代码访问了受保护的内存区域。
    • 不同的任务越界访问了非分配的内存。

8. 其他硬件异常

  • 在调试或运行过程中出现意外电气或硬件问题,例如:
    • 外设初始化错误。
    • 系统时钟配置错误。
    • 电源管理模块异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2272781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOV8训练好的best.pt模型转best.onnx并部署成python可调用

今天这篇博文是学习大佬作品以后,执行我的需求后的总结,做了一些代码调整,就此记录一下,非常感谢大佬提供如此好的输出。 已知yolov8 训练好的模型一般是pt格式,比如best.pt,现在我期望这个模型可以转成可以…

君正T41交叉编译ffmpeg、opencv并做h264软解,利用君正SDK做h264硬件编码

目录 1 交叉编译ffmpeg----错误解决过程,不要看 1.1 下载源码 1.2 配置 1.3 编译 安装 1.3.1 报错:libavfilter/libavfilter.so: undefined reference to fminf 1.3.2 报错:error: unknown type name HEVCContext; did you mean HEVCPr…

基于ASP.NET的动漫网站

一、系统架构与技术实现 系统架构:基于ASP.NET的MVC框架构建,实现网站的层次结构,使得网站更加易于维护和扩展。 技术实现:利用ASP.NET的技术特点,如强大的后端开发能力、丰富的UI控件等,结合前端技术如HT…

「Java 数据结构全面解读」:从基础到进阶的实战指南

「Java 数据结构全面解读」:从基础到进阶的实战指南 数据结构是程序设计中的核心部分,用于组织和管理数据。Java 提供了丰富的集合框架和工具类,涵盖了常见的数据结构如数组、链表、栈、队列和树等。本文将系统性地介绍这些数据结构的概念、…

安卓NDK视觉开发——手机拍照文档边缘检测实现方法与库封装

一、项目创建 创建NDK项目有两种方式,一种从新创建整个项目,一个在创建好的项目添加NDK接口。 1.创建NDK项目 创建 一个Native C项目: 选择包名、API版本与算法交互的语言: 选择C版本: 创建完之后,可…

MATLAB仿真:基于GS算法的经大气湍流畸变涡旋光束波前校正仿真

GS算法流程 GS(Gerchberg-Saxton)相位恢复算法是一种基于傅里叶变换的最速下降算法,可以通过输出平面和输入平面上光束的光强分布计算出光束的相位分布。图1是基于GS算法的涡旋光束畸变波前校正系统框图,在该框图中,已…

【React+TypeScript+DeepSeek】穿越时空对话机

引言 在这个数字化的时代,历史学习常常给人一种距离感。教科书中的历史人物似乎永远停留在文字里,我们无法真正理解他们的思想和智慧。如何让这些伟大的历史人物"活"起来?如何让历史学习变得生动有趣?带着这些思考&…

深入刨析数据结构之排序(上)

目录 1.内部排序 1.1概述 1.2插入排序 1.2.1其他插入排序 1.2.1.1 折半插入排序 1.2.1.2 2-路插入排序 1.3希尔排序 1.4快速排序 1.4.1起泡排序 1.4.2快速排序 1.4.2.1hoare版本 1.4.2.2挖坑版本 1.4.2.3前后指针版本 1.4.2.4优化版本 1.4.2.4.1小区间插入排序优…

AIA - APLIC之三(附APLIC处理流程图)

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 APLIC复位 APLIC复位后,其所有状态都变得有效且一致,但以下情况除外: 每个中断域的domaincfg寄存器(spec第 4.5.1 节);可能是machine-level interrupt domain的MSI地址配置寄存器(spec第4.5.3 和4.5…

openwrt 清缓存命令行

一、查看缓存 : free -m 二、清缓存:echo 3 > /proc/sys/vm/drop_caches  三、详解。 释放物理页缓存 echo 1 > /proc/sys/vm/drop_caches 释放可回收的slab对象,包含inode and dentry echo 2 > /proc/sys/vm/drop_caches 同时…

Linux -- 端口号、套接字、网络字节序、sockaddr 结构体

目录 什么是端口号? 什么是套接字? 网络字节序 struct sockaddr 结构体 什么是端口号? 我们日常上网的时候,主机其实是在进行两种操作: 1、把远端的数据拉取到本地,比如刷抖音的时候,手机向…

《数据结构》期末考试测试题【中】

《数据结构》期末考试测试题【中】 21.循环队列队空的判断条件为?22. 单链表的存储密度比1?23.单链表的那些操作的效率受链表长度的影响?24.顺序表中某元素的地址为?25.m叉树第K层的结点数为?26. 在双向循环链表某节点…

实际开发中,常见pdf|word|excel等文件的预览和下载

实际开发中,常见pdf|word|excel等文件的预览和下载 背景相关类型数据之间的转换1、File转Blob2、File转ArrayBuffer3、Blob转ArrayBuffer4、Blob转File5、ArrayBuffer转Blob6、ArrayBuffer转File 根据Blob/File类型生成可预览的Base64地址基于Blob类型的各种文件的下载各种类型…

《Opencv》基础操作详解(4)

接上篇:《Opencv》基础操作详解(3)-CSDN博客 目录 22、图像形态学操作 (1)、顶帽(原图-开运算) 公式: 应用场景: 代码示例: (2)…

大数据高级ACP学习笔记(2)

钻取:变换维度的层次,改变粒度的大小 星型模型 雪花模型 MaxCompute DataHub

尚硅谷· vue3+ts 知识点学习整理 |14h的课程(持续更ing)

vue3 主要内容 核心:ref、reactive、computed、watch、生命周期 常用:hooks、自定义ref、路由、pinia、miit 面试:组件通信、响应式相关api ----> 笔记:ts快速梳理;vue3快速上手.pdf 笔记及大纲 如下&#xff…

阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance)

阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance) 都是交流电路中描述电流和电压之间关系的参数,但它们的含义、单位和作用不同。下面是它们的定义和区别: …

在 SQL 中,区分 聚合列 和 非聚合列(nonaggregated column)

文章目录 1. 什么是聚合列?2. 什么是非聚合列?3. 在 GROUP BY 查询中的非聚合列问题示例解决方案 4. 为什么 only_full_group_by 要求非聚合列出现在 GROUP BY 中?5. 如何判断一个列是聚合列还是非聚合列?6. 总结 在 SQL 中&#…

B树与B+树:数据库索引的秘密武器

想象一下,你正在构建一个超级大的图书馆,里面摆满了各种各样的书籍。B树和B树就像是两种不同的图书分类和摆放方式,它们都能帮助你快速找到想要的书籍,但各有特点。 B树就像是一个传统的图书馆摆放方式: 1. 书籍摆放&…

回归预测 | MATLAB实现CNN-SVM多输入单输出回归预测

回归预测 | MATLAB实现CNN-SVM多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-SVM多输入单输出回归预测预测效果基本介绍模型架构程序设计参考资料 预测效果 基本介绍 CNN-SVM多输入单输出回归预测是一种结合卷积神经网络(CNN)和支持向量机&#…