CUBEMX+keil5使用STM32H7系列芯片时烧写后调试进入HardFault_Handler函数
目录
2.1 问题复现:利用CUBEMX+keil5生成简单的电灯工程
一、概述
大家好,这是我第一次做博客,写的不好还请见谅!!
本文主要解决当前用户在开发STM32H7系列芯片时,在通过CUBEMX生成工程后烧写出现的硬件问题,调试发现程序卡死在HardFault_Handler函数,本文提出相应解决方法。

二、现象描述
2.1 问题复现:利用CUBEMX+keil5生成简单的点灯工程
以下是我为了复刻现象所做的一个简单的点灯工程,步骤如下:
烧写模式:单线烧写

晶振选择:外部25MHZ晶振

选择PC13作为GPIO输出口

时钟树

生成工程并打开

烧写工程:在烧写工程后会发现,Build Output窗口虽然烧写成功了,但是显示有些区域没有都找到算法

调试:在开启调试后,我们会发现,直接自己运行到HardFault_Handler函数,卡死在了这里,这就说明我们的硬件方面有问题,导致了单片机没有正常的完成硬件方面的初始化,进而程序根本没法进入main函数

2.2 问题分析:算法文件问题
由上图可以知道,我们在烧写程序后出现有些区域找不到算法的问题,所以我选择去看看算法文件那边是否出现问题,下图是此时工程的Flash Download界面,我们乍一看会发现其算法文件是不对的,通过查阅H7的数据手册,其Flash容量就是1MB,确实是0x8000000H-0x80FFFFFH,经过换算,这是1MB的地址容量,但是我看了一下知识包,只有2MB的版本,我通过查阅资料发现,推断可能是CUBEMX出现的BUG或者是知识包的更新问题,经过反复几次实验,还有在同学电脑上面验证,这个问题普遍存在,目前我的CUBEMX知识包版本如下图所示。


2.3 解决方法:重新添加算法文件
经过上述分析,我选择重新添加算法文件(.FLM)。重新添加后的地址,发现其地址范围正常了,由原来的0x8000000H-0x80FFFFFH变成0x8000000H-0x81FFFFFH,内存范围变成了2MB大小,但是实际上我的实际Flash大小为1MB,由于我目前没有找到1MB的算法文件,所以我打算用2MB的算法文件试一试,但是当我程序达到1MB以上或者接近1MB时,我的程序很有可能出错,经过查阅资料,Flash内部被分成了很多小区域,小的程序可能只用到了1MB一下的区域,如果程序内存大了,很有可能出问题。


2.4 问题解决:程序可以正常跑

三、问题总结
这个问题我的推断是CUBEMX对于H7系列芯片的相关开发还处于探索阶段,出现BUG很正常,不过这个BUG对于初学者的我来说,我进行了3天的调试分析,才得到结果。目前我先用这个2MB的算法文件,如果后面找到对应的算法文件,自己加上即可。对于H7这种高性能性芯片,CUBEMX的开发功能还在持续更新中,后续我还会出一个关于H7系列内部SRAM的分配与使用问题。希望这个博客可以帮到大家,我就不设置关注可见了,希望大家喜欢我给我点个关注呦!!
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)