小弟用的是正点原子的探索者开发板,在做窗口看门狗实验时遇到以下问题,请大家帮我解决一下
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();后面执行,结果是红灯会一直亮。
问题二是:为什么讲②③行函数换位置,结果会是红灯不停地闪。
请大家帮我解答一下,谢谢了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
能不能具体一点,我主要是不知道为什么这几条语句在不同位置的执行结果是不一样的
一周热门 更多>