下面附上我的程序,烦请各位能指点下
窗口看门狗的源程序:
#include "wwdg.h"
#include "led.h"
uint8_t set1=0x7f;
void WWDG_Init(u32 prer,u8 value,u8 counter)
{
RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, ENABLE);
set1=set1&counter;
WWDG_SetPrescaler(prer);
WWDG_SetWindowValue(value);
WWDG_Enable(set1);
WWDG_ClearFlag();
WWDG_NVIC_Init();
WWDG_EnableIT();
}
void WWDG_NVIC_Init()
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void WWDG_IRQHandler(void)
{
WWDG_SetCounter(set1);
WWDG_ClearFlag();
LED1=0;
}
主函数:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "wwdg.h"
int main(void)
{
delay_init();
NVIC_Configuration();
uart_init(9600);
LED_Init();
LED0=0;
delay_ms(300);
WWDG_Init(WWDG_Prescaler_8,0X5F,0X7F);
printf("Reset System\r\n");
while(1)
{
LED0=1;
printf("System is running\r\n");
delay_ms(1000);
}
}
(1)我在线仿真,观察过看门狗的每个寄存器值得变化,都是正常的,可是进不了中断函数;如果进不了中断,应该复位,可是从串口调试助手上能够接收到一次“Reset System”,然后一直是"System is running",烦请各位能够指点,在这里谢过了~
|