有关窗口看门狗的问题,请大家帮帮我><谢谢大家

2019-07-20 19:27发布

小弟用的是正点原子的探索者开发板,在做窗口看门狗实验时遇到以下问题,请大家帮我解决一下

main.c
#include"stm32f4xx.h"
#include"LED.h"
#include"WWDG.h"
#include"delay.h"
u8 a,b;
u32 p;
int main()
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
led_init();
delay_init(168);
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
delay_ms(300);
WWDG_Init(WWDG_Prescaler_8,0x5F,0x7F);
while(1)
{
  GPIO_SetBits(GPIOF,GPIO_Pin_9);//红灯
}
}


WWDG.c
#include"stm32f4xx.h"
#include"WWDG.h"
u8 d=0x7f;
void WWDG_Init(u32 p,u8 a,u8 b)
{
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);

WWDG_SetPrescaler(p);
WWDG_SetWindowValue(a);
WWDG_SetCounter(b);
  WWDG_Enable(b);                                                                                                  ①

NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);

WWDG_ClearFlag();
WWDG_EnableIT();
}
void WWDG_IRQHandler(void)
{
WWDG_SetCounter(d);
WWDG_ClearFlag();                                                                                                                                   ②
GPIO_WriteBit(GPIOF,GPIO_Pin_10,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOF,GPIO_Pin_10)));//绿灯         ③
}



WWDG.h
#ifndef __WWDG_H
#define __WWDG_H
#include"stm32f4xx.h"
void WWDG_Init(u32 p,u8 a,u8 b);
void WWDG_IRQHandler(void);
#endif


以上是本次试验的正确部分代码(LED.c和LED.h没有给出),实验结果是红灯亮灭后绿灯一直闪烁
问题一是:为什么将①行的函数放在WWDG_EnableIT();后面执行,结果是红灯会一直亮。
问题二是:为什么讲②③行函数换位置,结果会是红灯不停地闪。
请大家帮我解答一下,谢谢了









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