赞
踩
一、
1、
2、
3、
当T6:0>W6:0,比较结果=1,之后产生复位信号
当看门口控制寄存器T6为0时,经非变为1,与门输出为1,之后产生复位信号
4、
5、
6、
二、
1、
2、
3、
三、
四、现象:开始一灯亮一会就灭了,之后另一灯闪烁亮
1、wwdg.c文件
- #include "wwdg.h"
- #include "led.h"
- //保存WWDG计数器的设置值,默认为最大.
- u8 WWDG_CNT=0X7F;
- //初始化窗口看门狗
- //tr :T[6:0],计数器值
- //wr :W[6:0],窗口值
- //fprer:分频系数(WDGTB),仅最低2位有效
- //Fwwdg=PCLK1/(4096*2^fprer). 一般PCLK1=42Mhz
- void WWDG_Init(u8 tr,u8 wr,u32 fprer)
- {
-
- NVIC_InitTypeDef NVIC_InitStructure;
-
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE); //使能窗口看门狗时钟
- WWDG_CNT=tr&WWDG_CNT; //初始化WWDG_CNT. 确保初值第7位为0
- WWDG_SetPrescaler(fprer); //设置分频值
- WWDG_SetWindowValue(wr); //设置窗口值
- // WWDG_SetCounter(WWDG_CNT);//设置计数值
- WWDG_Enable(WWDG_CNT); //开启看门狗
-
- NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn; //窗口看门狗中断
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02; //抢占优先级为2
- NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //子优先级为3
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能窗口看门狗
- NVIC_Init(&NVIC_InitStructure);
-
- WWDG_ClearFlag();//清除提前唤醒中断标志位
- WWDG_EnableIT();//开启提前唤醒中断
- }
-
- //窗口看门狗中断服务程序
- void WWDG_IRQHandler(void)
- {
- WWDG_SetCounter(WWDG_CNT); //重设窗口看门狗值
- WWDG_ClearFlag();//清除提前唤醒中断标志位
- LED1=!LED1;
- }
2、
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "beep.h"
- #include "key.h"
- #include "wwdg.h"
- int main(void)
- {
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
- delay_init(168); //初始化延时函数
- LED_Init(); //初始化LED端口
- KEY_Init(); //初始化按键
- LED0=0; //点亮LED0
- delay_ms(300);
- WWDG_Init(0x7F,0X5F,WWDG_Prescaler_8); //计数器值为7f,窗口寄存器为5f,分频数为8
-
- while(1)
- {
- LED0=1; //熄灭LED灯
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。