当前位置:首页 > 单片机 > 单片机
[导读]一。 窗口看门狗和独立看门狗的区别1)独立看门狗没有中断,窗口看门狗有中断2)独立看门狗有硬件软件之分,窗口看门狗只能软件控制3)独立看门狗只有下限,窗口看门狗又下限和上限4)独立看门狗是12位递减的。窗口看

一。 窗口看门狗和独立看门狗的区别



1)独立看门狗没有中断,窗口看门狗有中断

2)独立看门狗有硬件软件之分,窗口看门狗只能软件控制

3)独立看门狗只有下限,窗口看门狗又下限和上限

4)独立看门狗是12位递减的。窗口看门狗是7位递减的

5)独立看门狗是用的内部的大约40KHZ RC振荡器,窗口看门狗是用的系统时钟APB1ENR

接下来介绍一下独立看门狗和窗口看门狗,这里我们就不讲解程序了,很简单的,配置一下寄存器就可以使用了。

独立看门狗没有中断功能,只要在计数器减到0(下限)之前,重新装载计数器的值,就不会产生复位,独立看门够有硬件和软件之分,硬件是通过烧写器的“设定选项几节等”配置,一旦开启了硬件看门狗,那么就停不下来了,只能在重新配置“设定选项几节等”才能关掉硬件看门狗,软件看门狗只需要设置IWDG->KR=0XCCCC;就可以启动看门狗了,软件狗可以在系统复位时关掉,如果在在初始化里开启软件看门狗,那就开启了软件看门狗,

独立看门狗是12位递减的寄存器,使用片子内部的RC振荡器,这个振荡器是关不掉的。

窗口看门狗是7位递减计数器,有中断,这个中断的作用是在计数器达到下限0x40的时候,产生中断,让你喂狗,如果你不喂狗,计数器的值变为0x3f的时候,将会产生系统复位,即使是喂狗,也应该在中断里快速喂狗,要不时间长了计数器减一也会变成0x3f产生复位,这个时间根据芯片手册的公式进行计算即可得到,窗口看门狗只有软件开启方式,还有一个上限值,这个值如果大于计数器的初始值,那么就没有任何作用了,这个值小于计数器的初始值得时候,当计数器的值大于上限值时你对计数器进行装载,将会产生复位,只有在计数器减到小于上限值时,你才能重新装载计数器,意思就是说只有计数器的值在上限值和下限值之间你才能装载计数器,否则就会产生系统复位,当上限值小于下限值,也没有意义。

独立看门狗Iwdg——独立于系统之外,因为有独立时钟,所以不受系统影响的系统故障探测器。主要用于监视硬件错误。

窗口看门狗wwdg——是系统内部的故障探测器,时钟与系统相同。如果系统时钟不走了,这个狗也就失去作用了。主要用于监视软件错误。

//发现1:当窗口值大于等于计数器的值,无论怎么更改配置的顺序,都是正确的运行结果

//发现2:当窗口值小于计数器的值,顺序一旦改变就运行错误

经过测试发现,当初始化的顺序不是正常顺序的话,就会把WWDG->SR置1,为什么我也不知道,谁知道片子里面怎么搞的。你在开启中断就进入中断的,这时你又进行喂狗,就会复位的,因为这时计数器的值>上限窗口的值,所以会复位,所以就会一直出错下去

解决办法是,初始话的时候最后两句是先清除中断标志然后在开启中断,如果你不这么干,那么在初始化的时候很可能把WWDG->SR置位,那么你在开启中断,就会毫不犹豫的进入中断,你在中断重装计数器值得时候,就会产生复位


二。窗口看门狗的 3 个寄存器

1.控制寄存器(WWDG_CR)


WDGA位:看门狗的激活位,该位由软件置1,并且一定要注意的是该位一旦设置,就只能在硬件复位后才能清零了。

T[6: 0]用来存储看门狗的计数器值

2.配置寄存器(WWDG_CFR)


W0-W6:设置上窗口值

WDGTB:设置计数器的计数频率 ,PCLK1也就是APB1的时钟

EWI:提前唤醒中断,我们一般用该位来设置中断,当窗口看门狗的计数器值减到 0X40 的时候,如果该位设置,并开启了中断,则会产生中断,我们可以在中断里面向 WWDG_CR 重新写入计数器的值,来达到喂狗的目的。

3.状态寄存器(WWDG_SR)

该寄存器用来记录当前是否有提前唤醒的标志。该寄存器仅有位 0 有效,其他都是保留位。当计数器值达到 40h 时,此位由硬件置 1。它必须通过软件写 0 来清除。对此位写 1 无效。即使中断未被使能,在计数器的值达到 0X40的时候,此位也会被置 1。

4. 喂狗的方法有两种:

a:中断的方法

b:查询的方法,查询状态寄存器

三。启用窗口看门狗的步骤

1.使能 WWDG 时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG 时钟使能

2.设置窗口值和分频数

设置上窗口值的函数是:

void WWDG_SetWindowValue(uint8_t WindowValue);

设置分频数的函数是:

void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);

这个函数同样只有一个入口参数就是分频值。决定了计数器的计数频率

3.开启 WWDG 中断并分组

开启 WWDG 中断的函数为:

WWDG_EnableIT(); //开启窗口看门狗中断

接下来是进行中断优先级配置,这里就不重复了,使用 NVIC_Init()函数即可。

4.设置计数器初始值并使能看门狗

void WWDG_Enable(uint8_t Counter);

该函数既设置了计数器初始值,同时使能了窗口看门狗。

5.编写中断服务函数

在中断服务函数里面也要将状态寄存器的 EWIF 位清空。

四。实例

//保存 WWDG 计数器的设置值,默认为最大.

u8 WWDG_CNT=0x7f;

//初始化窗口看门狗

//tr :T[6:0],计数器值

//wr :W[6:0],窗口值

//fprer:分频系数(WDGTB),仅最低 2 位有效

//Fwwdg=PCLK1/(4096*2^fprer).

void WWDG_Init(u8 tr,u8 wr,u32 fprer)

{

RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG 时钟使能

WWDG_CNT=tr&WWDG_CNT; //初始化 WWDG_CNT.

WWDG_SetPrescaler(fprer); //设置 IWDG 预分频值

WWDG_SetWindowValue(wr); //设置窗口值

WWDG_Enable(WWDG_CNT); //使能看门狗,设置 counter

WWDG_ClearFlag(); //清除提前唤醒中断标志位

WWDG_NVIC_Init(); //初始化窗口看门狗 NVIC

WWDG_EnableIT(); //开启窗口看门狗中断

}

//重设置 WWDG 计数器的值

void WWDG_Set_Counter(u8 cnt)

{

WWDG_Enable(cnt); //使能看门狗,设置 counter .

}

//窗口看门狗中断服务程序

void WWDG_NVIC_Init()

{

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn; //WWDG 中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //抢占 2 子优先级 3 组 2

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //抢占 2,子优先级 3,组 2

NVIC_Init(&NVIC_InitStructure); //NVIC 初始化

}

void WWDG_IRQHandler(void)

{

WWDG_SetCounter(WWDG_CNT); //当禁掉此句后,窗口看门狗将产生复位

WWDG_ClearFlag(); //清除提前唤醒中断标志位

LED1=!LED1; //LED 状态翻转

}

实验中每喂狗一次,LED1(绿灯)状态翻转一次,翻转一次的时间为:

main()程序中设置了分频数为8,见下表


LED1翻转一次时间为58.25ms


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

中断机制在单片机及嵌入式系统中是重中之重,我们必须深入理解。首先我们要明白一点:CPU执行指令代码,并非一直顺序地逐条执行,而是可能突然跳到某段代码上去的。因为这段代码的优先级更高,或者说它更加紧迫,CPU必须暂时放下手...

关键字: 中断 单片机 嵌入式系统

PIC单片机是基于RISC系统结构的单片机,最初的设计是支持PDP(编程数据处理器)计算机。大量的操作可以用来控制外围设备。PIC单片机比微控制器具有更快的程序执行能力。它是由微芯片技术公司于1889年发明的,是一种8位...

关键字: PIC单片机 定时器 中断

STC单片机是一款增强型51单片机,完全兼容MCS-51,还增加了新的功能,比如新增两级中断优先级,多一个外中断,内置EEPROM,硬件看门狗,具有掉电模式,512B内存等。还支持ISP下载,不用编程器,只要一个MAX2...

关键字: 单片机 看门狗 中断

什么是PIC中断程序呢?形象的生活比喻就比如你现在这在看我的文章,突然你的朋友喊你一起去烤地瓜,这时候你就中断了看文章和朋友烤地瓜去了,烤完地瓜之后你又回来看文章。烤地瓜这件事就好比中断程序,他中断了你看文章这件事。在程...

关键字: PIC 中断 标志位

MCS—51系列单片机内部只需两个外部接中断连源输入端,当外部接连源多于两个时,就必须进行拓宽,下面介绍几种简略的拓宽办法:

关键字: 单片机 软件 中断

最近在浏览星球主题的时候,发现一位球友打卡中断了,就去关心了一下他(瞧我这该死的责任心❤️),结果被他反手就问了下面这个问题。

关键字: 中断 Spring Boot 实战项目

实质上是加一的计数器。外部脉冲让他不断加一,当计数器溢出时,计数器的溢出相应的中断标志位置1,并向CPU发出中断请求。如果定时器/计数器工作为定时模式,则表示时间以到;如果工作于计数模式,则表示计数器、则表示计数值已满。

关键字: 周期 中断

中断的分类和区别

关键字: 轮询 中断

关注星标公众号,不错过精彩内容素材来源|STM32早期的MCU没有看门狗,就容易引起有些产品死机了不能重启工作。为了避免这个问题,后期的MCU在内部集成了看门狗的功能。为了满足更多使用场景,现在很多MCU都集成了两个看门...

关键字: MCU 独立看门狗 窗口看门狗

▼更多精彩推荐,请关注我们▼早期的MCU没有看门狗,就容易引起有些产品死机了不能重启工作。为了避免这个问题,后期的MCU在内部集成了看门狗的功能。为了满足更多使用场景,现在很多MCU都集成了两个看门狗:独立看门狗与窗口看...

关键字: 独立看门狗 窗口看门狗
关闭
关闭