STM32 Cubemx Freertos 工程, 用GDB进行debug时候, 跳进HardFault_Handler的问题

现象:  正常运行没问题,   但是一旦用gdb来debug, 开场很快就进hardfault

分析:

进了hardfault时候观察调用栈

STM32 Cubemx Freertos 工程, 用GDB进行debug时候, 跳进HardFault_Handler的问题_第1张图片

 竟然是从定时器中断过来的

也就是定时器中断执行这条时候

STM32 Cubemx Freertos 工程, 用GDB进行debug时候, 跳进HardFault_Handler的问题_第2张图片

 再往前推, 是初始化systick时候

STM32 Cubemx Freertos 工程, 用GDB进行debug时候, 跳进HardFault_Handler的问题_第3张图片

也就是说, 前一行把中断打开, 这一行打开定时器时钟, 马上进了一次中断, 然后就崩了... 

中断处理里面还在比较CCMR什么的寄存器呢, 这些东西还没有被初始化

把中断使能移动到定时器初始化之后就好了

STM32 Cubemx Freertos 工程, 用GDB进行debug时候, 跳进HardFault_Handler的问题_第4张图片

STM32 Cubemx Freertos 工程, 用GDB进行debug时候, 跳进HardFault_Handler的问题_第5张图片

原因: Hal驱动库版本老, 存在bug, 新版本已经修正. 

github上主线的timebase模板已经修正了: 

STM32 Cubemx Freertos 工程, 用GDB进行debug时候, 跳进HardFault_Handler的问题_第6张图片

果然我现在的库是老的,   那么更新一下看看

STM32 Cubemx Freertos 工程, 用GDB进行debug时候, 跳进HardFault_Handler的问题_第7张图片

升级到了1.8.5 结果也是不行的, 库里的时基模板文件已经修了这个bug, 但cubemx生成的还是一样

再试试升级cubemx本体

STM32 Cubemx Freertos 工程, 用GDB进行debug时候, 跳进HardFault_Handler的问题_第8张图片

 这回就好了,  能生成没bug的代码了

STM32 Cubemx Freertos 工程, 用GDB进行debug时候, 跳进HardFault_Handler的问题_第9张图片

 

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