历史上的今天
今天是:2025年01月08日(星期三)
2019年01月08日 | 关于STM32处理器的HardFault_Handler错误原因
2019-01-08 来源:eefocus
STM32xx处理器是ST公司采用Cortex-M的IP核实现的处理器,拥有紧凑代码量以及非常高的性价比,在单片机领域占用量非常强劲。本人所在的公司甚至用STM32F207直接替代了一些使用S3C4510B处理器的场景,因为S3C4510B面临着停产的危险,为了产品过度平稳,STM32F处理器也是一种不错的选择,可以应用于一些简单的单板设备或者必须不需要大量存储和内存的情况,开发过程中也遇到了STM32F初学者经常会遇到的一个系统中断错误提示:HardFault_Handler。
HandFault_Handler错误原因在我使用碰到过的有3种情况:
(1) 堆栈空间溢出
堆栈空间溢出问题,主要是通过增大工程中类似startup_stm32f2xx.s文件中的宏定义Stack_Size和Heap_Size来修改此问题,至于项目工程中遇到大致的堆栈空间读者可以通过MDK在线调试查看或者读者自行分析下函数调用的深度来分析。
(2) 数据访问未对齐
数据未对齐访问一般是由于指针造成的。读者可以通过打印相应变量的地址看是否为4字节对齐,比如下面给出的例子,因为你不能保证performP->rxPkt[4]或者performP->rxPkt[0]的地址就是4的整数倍,如果强制进行unsigned int *转化访问,就会出现HardFault_Hander错误:

(3) 数组越界或者指针越界等非法访问。
后续如果有发现其他原因造成HardFault_Hander错误,欢迎自己和大家补充。多多益善。
史海拾趣
|
在Win CE 5.0下,首次通过局域网访问另外一台电脑的时候会弹出一个对话框,要求输入对方的用户名、密码和域名。像下图所示的: 我想知道的是,有没有这样一个函数,提供了这几个参数的接口,以便我在写程序时就可以把用户名、密码写进去,而不需 ...… 查看全部问答> |
|
在移植之前先了解Bootloader 的一些通用概念,对理解它的代码会有所帮助。 嵌入式Linux 系统从软件的角度通常可以分为以下4 个层次。 (1)引导加载程序,包括固化在固件(firmware)中的boot 代 ...… 查看全部问答> |
|
对它的高速度PWM感兴趣,如果不写复杂的算法和人机界面,单纯用汇编语言可行吗?哪些开发工具最简单易用? 我的意思是既然STM32那么便宜,功能强大速度快,干脆大大小小的项目都用这个,省得好多种单片机感觉很累。… 查看全部问答> |




