打印
[STM32F4]

程序一直卡在死循环void HardFault_Handler(void)里面

[复制链接]
3059|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 啸月cxy 于 2024-3-16 16:17 编辑

本人用stm32f407开发板和ads1118通信,用差分方式采集电压时,采取连续模式,ads1118的配置寄存器值设置为0x828B(写入SS,量程4.096v,连续模式,128SPS,使能上拉电阻),但是在采集数据时发现只能采集一次数据,如果电压改变的话我必须按下复位键之后让程序重新运行一次才能再采集一次,我用单步调试发现程序进入了void HardFault_Handler(void)这个死循环函数里面,注释是Go to infinite loop when Hard Fault exception occurs(当发生硬故障异常时,进入死循环),但是应该不是硬件的问题,开发板是正点原子的,ads1118也是买的模块,估计是程序没写好,但是又没有找到原因。请问各位大佬这个问题应该怎么解决呢,下面附上ads1118采集电压的程序[img][/img]

图3.png (19.88 KB )

主函数调用采集电压的函数

主函数调用采集电压的函数

图2.png (15.86 KB )

将获取的数据显示再lcd屏上

将获取的数据显示再lcd屏上

图1.png (240.42 KB )

连续模式获取ADC数据的函数

连续模式获取ADC数据的函数

使用特权

评论回复
沙发
两只袜子| | 2024-3-16 20:28 | 只看该作者
堆栈溢出?

使用特权

评论回复
板凳
zchong| | 2024-3-16 20:53 | 只看该作者
call stack 找到发生问题的地方,再仔细看看是对齐还是栈溢出等原因

使用特权

评论回复
地板
jcky001| | 2024-3-16 21:59 | 只看该作者
检查中断配置

使用特权

评论回复
5
cr315| | 2024-3-16 22:45 | 只看该作者
寄存器配置是否有误

使用特权

评论回复
6
admvip| | 2024-3-17 08:06 | 只看该作者
应该是sprintf函数惹的祸,数组指针跑飞了,覆盖了相关代码

使用特权

评论回复
7
香水城| | 2024-3-17 16:50 | 只看该作者
我比较倾向怀疑访问地址越界了,比方数组跨界之类的。。。

使用特权

评论回复
8
jerkoh| | 2024-3-17 18:59 | 只看该作者
LCD_SHOW_STRING 先屏蔽 测试看看hard不hard

使用特权

评论回复
9
田舍郎| | 2024-3-17 21:07 | 只看该作者
这个大概率是定义外部接口中存在问题

使用特权

评论回复
10
AProgrammer| | 2024-3-18 09:19 | 只看该作者
本帖最后由 AProgrammer 于 2024-3-18 09:26 编辑

改成ads_value_str[32]试试?
不显示声明数组长度,会按照初始化列表的元素个数分配空间。

使用特权

评论回复
11
fionababy| | 2024-3-18 10:21 | 只看该作者
在我碰到的类似硬错误里,数组越界大概占到了95%,哈哈哈!得严谨的查查

使用特权

评论回复
12
LcwSwust| | 2024-3-18 10:34 | 只看该作者
楼主的ads_value_str[]空间只有1字节,sprintf往里存字符串的时候就溢出了。

使用特权

评论回复
13
imdx| | 2024-3-18 11:15 | 只看该作者
HardFault错误追踪库
https://github.com/xjtuecho/CmBacktrace
只能帮你到这里了

使用特权

评论回复
14
小夏天的大西瓜| | 2024-3-18 17:47 | 只看该作者
用差分方式采集电压这个具体原理是怎样的呢?

使用特权

评论回复
15
AProgrammer| | 2024-3-20 10:49 | 只看该作者
楼主问题解决了吗?

使用特权

评论回复
16
Wonderwall2018| | 2024-3-21 16:14 | 只看该作者
同意6楼的观点。sprintf用于浮点数时会出问题。

使用特权

评论回复
17
Wonderwall2018| | 2024-3-21 16:18 | 只看该作者
之前我遇到这个问题时,解决方案是,自己写一个mysprintf函数,来解决处理浮点数的bug。

使用特权

评论回复
18
Stahan| | 2024-3-21 16:44 | 只看该作者
可以把浮点数转换为整数再运算

使用特权

评论回复
19
LinkMe| | 2024-3-21 18:51 | 只看该作者
进入中断得时候就能看到是从哪个错误进来得。

使用特权

评论回复
20
szt1993| | 2024-3-25 14:52 | 只看该作者
一般情况下应该是数组越界导致的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

21

帖子

0

粉丝