OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5263|回复: 0

添加窗口看门狗后,在函数中添加while(1)测试,无法复位

[复制链接]

1

主题

1

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2021-1-11
在线时间
9 小时
发表于 2021-2-24 16:22:08 | 显示全部楼层 |阅读模式
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;
        }

    }
}




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-13 23:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表