新手上路
- 积分
- 28
- 金钱
- 28
- 注册时间
- 2021-1-11
- 在线时间
- 9 小时
|
1金钱
各位大佬,我添加了窗口看门狗,设置窗口上限为0x7f,然后测试其复位功能。我在函数中DMA的中断函数中添加while(1),可以触发看门狗复位,但是放在main函数中的while循环里,看门狗就失效了,请问为什么呀?
代码如下:
1)看门狗生效:
void DMA2_Stream0_IRQHandler(void)
{
//printf("Enter dma inteerupt\r");
if(DMA_GetITStatus(DMA2_Stream0, DMA_IT_TCIF0))
{
DMA_ClearITPendingBit(DMA2_Stream0, DMA_IT_TCIF0);
}
Adc_Dma_Enter = 1 ;
while(1);
}
2看门狗失效:
在此函数中添加while循环
void AdcDataCalculate(void)
{
while(1){};
}
main函数:
int main(void)
{
// uint8_t i;
uint16_t wwdg_tr, wwdg_wr;
/*
ST固件库中的启动文件已经执行了 SystemInit() 函数,该函数在 system_stm32f4xx.c 文件,主要功能是
配置CPU系统的时钟,内部Flash访问时序,配置FSMC用于外部SRAM
*/
bsp_Init(); /* 硬件初始化 */
Tim4_Start();
Tim2_Start();
bsp_InitWwdg(0x7f, 0x7F, WWDG_Prescaler_8);
wwdg_wr = WWDG->CFR & 0X7F;
/* 进入主程序循环体 */
while (1)
{
/*feed the dog*/
wwdg_tr = WWDG->CR & 0X7F;
//printf("WWDG_TR is %d.\r\n",wwdg_tr);
if( wwdg_tr < wwdg_wr )
{
WWDG_SetCounter(127);
}
if(Adc_Dma_Enter)
{
AdcDataCalculate();// while循环放在此函数里
Adc_Dma_Enter = 0;
}
}
}
|
|