窗口看门狗红灯一直亮,没有闪烁,谁给帮忙看看怎么回事

2019-07-21 08:41发布

wwdg.c

#include "wwdg.h"
#include "led.h"


void IWDG_Init(u8 prer,u16 rlr)   //初始化独立看门狗函数
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);    //取消寄存器写保护,使能对寄存器IWDG_PR IWDG_RLR的写操作
IWDG_SetPrescaler(prer);                         //设置预分频系数为4,预分频值为64
IWDG_SetReload(rlr);                              //设置重装载值
IWDG_ReloadCounter();                             //进行计数器重装载
IWDG_Enable();                                  //使能IWDG
}




void IWDG_Feed(void)                              //设置喂狗函数
{

IWDG_ReloadCounter();                             //计数器重装载值

}






u8 WWDG_CNT=0x7f;

void WWDG_Init(u8 tr,u8 wr,u32 fprer)      //初始化窗口看门狗函数   tr 计数器值,wr窗口值,fprer 预分频系数
{
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);   //使能窗口看狗时钟
  WWDG_CNT=tr&WWDG_CNT;                               //初始化WWDG_CNT
        WWDG_SetPrescaler(fprer);                           //设置预分频系数
  WWDG_SetWindowValue(wr);                            //设置窗口值
        WWDG_Enable(WWDG_CNT);                              //使能看门狗,设置计数器counter
        WWDG_ClearFlag();                                    //清楚提前中断服务标志位
        WWDG_NVIC_Init();                                     //初始化窗口看门狗中断
        WWDG_EnableIT();                                    //开启提前唤醒中断分组

}







void WWDG_Set_Counter(u8 cnt)      //重设置wwdg  计数器值
{

WWDG_Enable(cnt);                 //使能看门狗  设置计数器

}









void WWDG_NVIC_Init()
{
NVIC_InitTypeDef  NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn;             //设置中断通道为窗口看门狗通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;   //设置抢占优先级为2
NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;          //设置响应优先级为2           
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;             //使能中断
NVIC_Init(&NVIC_InitStructure);                           //初始化中断服务函数
}

void WWDG_IRQHandler(void)
{


WWDG_SetCounter(WWDG_CNT);                //喂狗,禁掉词句  窗口看门狗函数将复位

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

LED1=!LED1;

}



main
#include "led.h"
        #include "delay.h"
        #include "sys.h"
        #include "usart.h"
        #include "wwdg.h"
       
        int main(void)
        {
       
        delay_init();    //初始化延时
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);    //设置中断优先级分组为2  2个抢占优先级  2个响应优先级
        uart_init(115200);                                 //设置串口波特率为115200
        LED_Init();                                        //初筛华led
        LED0=0;
        delay_ms(800);
       
WWDG_Init(0x8f,0x5f,WWDG_Prescaler_8);               // 设置窗口就看门狗的计数器值为7f 窗口值为5f 分频系数为8
        while(1)
        {
        LED0=1;
        }
       
       
        }
       



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。