仿造固件库写函数,为何程序会跳进HardFault_Handler(void)

2019-10-12 13:35发布

void W25Q64_Cmd(FunctionalState NewState)
{
assert_param(IS_FUNCTIONAL_STATE(NewState));

if (NewState != DISABLE)
{
/* Enable the W25Q64 */
W25Q64_Cmd(ENABLE);
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
W25Q64_Cmd(DISABLE);
}
else
{
/* Disable the W25Q64 */
W25Q64_Cmd(ENABLE);
GPIO_SetBits(GPIOA,GPIO_Pin_2);
W25Q64_Cmd(DISABLE);
}
}
就这一段代码,调试的时候发现会被跳进HardFault_Handler(void)。这一段可以说是在固件库中的SPI_Cmd()中复制的,前面SPI_Cmd()调用没事,到这个函数调用就被跳进HardFault_Handler(void)了。
stm32f10x_conf.h中的USE_FULL_ASSERT已经被注释掉.
初步猜测是传入的参数 ENABLE的锅
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
msq001
1楼-- · 2019-10-12 19:26
hardfault一般是堆栈溢出或者内存的问题。
吕系小
2楼-- · 2019-10-12 20:25
msq001 发表于 2017-3-8 17:48
hardfault一般是堆栈溢出或者内存的问题。

我后来经过很多次调试,发现是在运行W25Q62_Cmd(ENABLE)时进入hardfault。当我尝试把这个函数中关于FunctionlState的结构体变量屏蔽后,就不会进入hardfault.而且我单独把这个函数拉到主函数后运行也没有问题。
msq001
3楼-- · 2019-10-13 00:58
吕系小 发表于 2017-3-10 16:37
我后来经过很多次调试,发现是在运行W25Q62_Cmd(ENABLE)时进入hardfault。当我尝试把这个函数中关于Funct ...


void W25Q64_Cmd(FunctionalState NewState)
{
assert_param(IS_FUNCTIONAL_STATE(NewState));

if (NewState != DISABLE)
{
/* Enable the W25Q64 */
W25Q64_Cmd(ENABLE);
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
W25Q64_Cmd(DISABLE);
}
else
{
/* Disable the W25Q64 */
W25Q64_Cmd(ENABLE);
GPIO_SetBits(GPIOA,GPIO_Pin_2);
W25Q64_Cmd(DISABLE);
}
}
我才发现你这样写。
吕系小
4楼-- · 2019-10-13 05:33
 精彩回答 2  元偷偷看……

一周热门 更多>