#include "stm32f10x.h"
void RCC_Configuration(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD,ENABLE);
}
void WWDG_Configuration(void)
{
WWDG_SetPrescaler(WWDG_Prescaler_8); // 8M/4096/8=244Hz,4ms递减一个数值。
WWDG_SetWindowValue(0x5f); //7f-40=3f=63,,63*4=252ms,1s内复位四次。
WWDG_Enable(0x7f);
WWDG_ClearFlag(); 这句话为什么要加,
WWDG_EnableIT();
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
}
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel =WWDG_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void Delay(vu32 times)
{
for(;times!=0;times--);
}
int main(void)
{
RCC_Configuration();
GPIO_Configuration();
WWDG_Configuration();
NVIC_Configuration();
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
Delay(100000); //(1/8000000)*100000=1/80,一条指令要几个周期,所以延时要小于复位时间,才能执行灯灭指令
GPIO_SetBits(GPIOA,GPIO_Pin_8);
}
void WWDG_IRQHandler(void)
{
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
WWDG_SetCounter(0x7f);
WWDG_ClearFlag();
Delay(1000);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
}
1.WWDG_ClearFlag(); 这句话为什么要加,
2.去掉初始化中的WWDG_ClearFlag();
把中断中的喂狗命令去掉,LED0,LED1都闪烁,进入中断没问题,加上喂狗命令则LED0,LED1都稍微亮,而且一直亮。
3.加上初始化中的WWDG_ClearFlag();
则只有LED0闪烁。
应该在初始化中加上WWDG_ClearFlag();,为什么LED1没有闪烁?好像没有进入中断。
|