STM32单片机的看门狗问题

2019-08-16 20:58发布

看门狗初始化,溢出时间是6.4ms
#include "iwdg.h"
void InitIWDG(void)
{
        IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
        IWDG_SetPrescaler(IWDG_Prescaler_256);               // 40K/256=156HZ(6.4ms)
        IWDG_SetReload(1250);                                           // 1250 = 8s/6.4ms
        IWDG_ReloadCounter();       // Î11·
        IWDG_Enable();
}
如果下面的程序中的延时时间为2000ms,来一次喂狗,岂不是还没延时完成就已经看门狗复位了?

void PowerOFFPhone(void)
{
        GPIO_WriteBit(GPIOB, RestPhone, Bit_RESET);
        SoftDelayms(2000);
        IWDG_ReloadCounter();
        SoftDelayms(2000);
        IWDG_ReloadCounter();
        SoftDelayms(2000);
        IWDG_ReloadCounter();
        SoftDelayms(2000);
        IWDG_ReloadCounter();
        SoftDelayms(2000);
        IWDG_ReloadCounter();
        SoftDelayms(1000);
        IWDG_ReloadCounter();
        GPIO_WriteBit(GPIOB, RestPhone, Bit_SET);
        BKP_WriteBackupRegister(BKP_DR1, 0X0000);    // phone off state
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
虾兵蟹将
1楼-- · 2019-08-16 23:04
就是那样了,你可以把延时弄到for循环里,延时几毫秒就喂食一次
操作系统
2楼-- · 2019-08-16 23:12
不使用延时函数
water2017
3楼-- · 2019-08-17 04:39
操作系统 发表于 2017-7-23 20:55
不使用延时函数

如果程序中需要用到10ms以上的延时,看门狗只有6.4ms溢出,怎么处理?
water2017
4楼-- · 2019-08-17 07:03
 精彩回答 2  元偷偷看……
虾兵蟹将
5楼-- · 2019-08-17 09:50
water2017 发表于 2017-7-23 21:23
如果程序中需要用到10ms以上的延时,看门狗只有6.4ms溢出,怎么处理?
for(i=0;i

这样应该可以
操作系统
6楼-- · 2019-08-17 15:39
water2017 发表于 2017-7-23 21:21
如果程序中需要用到10ms以上的延时,看门狗只有6.4ms溢出,怎么处理?

延时方法多的是.最差的一种就是 延时函数.建议使用定时器或者时钟节拍.记数来延时.

一周热门 更多>