stm32卡死在void HardFault_Handler(void)函数内

        在开发STM32项目时,添加了多个较大的局部变量后,程序无法正常运行。使用Keil的调试模式,发现程序卡死在void HardFault_Handler(void)函数内。经过研究,发现是栈或堆溢出导致的问题。

一种简单的解决方法是,在STM32的启动文件(例如:startup_stm32f407xx.s)中,增大以下两个值:
        Stack_Size     EQU    0x2000  ; 栈大小
        Heap_Size      EQU    0x2000  ; 堆大小
通过增大这两个值,可以有效解决栈或堆溢出的问题。

注:Stack_Size (EQU 0x400):
Stack_Size 表示栈的大小。在 STM32 微控制器中,栈用于存储局部变量、函数调用返回地址、保存的寄存器值等。栈大小为 0x400(即 1024 字节),这意味着分配给栈的内存空间为 1024 字节(1 KB)。
Heap_Size (EQU 0x200):
Heap_Size 表示堆的大小。堆用于动态内存分配,比如通过 malloc() 或 free() 进行的内存操作。这里 Heap_Size 被设置为 0x200(即 512 字节),这意味着堆的内存空间为 512 字节。

        然而,增大栈和堆的大小时,必须考虑芯片的内存容量,避免超出芯片的内存限制。

        因此,在调整栈和堆的大小时,应根据芯片的内存容量进行合理配置,以确保程序的稳定运行。

   

你可能感兴趣的:(stm32开发,stm32,嵌入式硬件,单片机)