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的锅
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我后来经过很多次调试,发现是在运行W25Q62_Cmd(ENABLE)时进入hardfault。当我尝试把这个函数中关于FunctionlState的结构体变量屏蔽后,就不会进入hardfault.而且我单独把这个函数拉到主函数后运行也没有问题。
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);
}
}
我才发现你这样写。
一周热门 更多>