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

[复制链接]
 楼主| 啸月cxy 发表于 2024-3-16 16:15 | 显示全部楼层 |阅读模式
本帖最后由 啸月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]

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

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

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

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

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

主函数调用采集电压的函数
两只袜子 发表于 2024-3-16 20:28 | 显示全部楼层
堆栈溢出?
zchong 发表于 2024-3-16 20:53 | 显示全部楼层
call stack 找到发生问题的地方,再仔细看看是对齐还是栈溢出等原因
jcky001 发表于 2024-3-16 21:59 | 显示全部楼层
检查中断配置
cr315 发表于 2024-3-16 22:45 | 显示全部楼层
寄存器配置是否有误
admvip 发表于 2024-3-17 08:06 | 显示全部楼层
应该是sprintf函数惹的祸,数组指针跑飞了,覆盖了相关代码
香水城 发表于 2024-3-17 16:50 | 显示全部楼层
我比较倾向怀疑访问地址越界了,比方数组跨界之类的。。。
jerkoh 发表于 2024-3-17 18:59 | 显示全部楼层
LCD_SHOW_STRING 先屏蔽 测试看看hard不hard
田舍郎 发表于 2024-3-17 21:07 来自手机 | 显示全部楼层
这个大概率是定义外部接口中存在问题
AProgrammer 发表于 2024-3-18 09:19 | 显示全部楼层
本帖最后由 AProgrammer 于 2024-3-18 09:26 编辑

改成ads_value_str[32]试试?
不显示声明数组长度,会按照初始化列表的元素个数分配空间。
fionababy 发表于 2024-3-18 10:21 | 显示全部楼层
在我碰到的类似硬错误里,数组越界大概占到了95%,哈哈哈!得严谨的查查
LcwSwust 发表于 2024-3-18 10:34 | 显示全部楼层
楼主的ads_value_str[]空间只有1字节,sprintf往里存字符串的时候就溢出了。
imdx 发表于 2024-3-18 11:15 | 显示全部楼层
HardFault错误追踪库
https://github.com/xjtuecho/CmBacktrace
只能帮你到这里了
小夏天的大西瓜 发表于 2024-3-18 17:47 | 显示全部楼层
用差分方式采集电压这个具体原理是怎样的呢?
AProgrammer 发表于 2024-3-20 10:49 | 显示全部楼层
楼主问题解决了吗?
Wonderwall2018 发表于 2024-3-21 16:14 | 显示全部楼层
同意6楼的观点。sprintf用于浮点数时会出问题。
Wonderwall2018 发表于 2024-3-21 16:18 | 显示全部楼层
之前我遇到这个问题时,解决方案是,自己写一个mysprintf函数,来解决处理浮点数的bug。
Stahan 发表于 2024-3-21 16:44 来自手机 | 显示全部楼层
可以把浮点数转换为整数再运算
LinkMe 发表于 2024-3-21 18:51 | 显示全部楼层
进入中断得时候就能看到是从哪个错误进来得。
szt1993 发表于 2024-3-25 14:52 | 显示全部楼层
一般情况下应该是数组越界导致的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

21

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部