新手上路
- 积分
- 26
- 金钱
- 26
- 注册时间
- 2020-9-21
- 在线时间
- 6 小时
|
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LED_Init();
KEY_Init(); //按键初始化
LED0=0;
delay_ms(300);
WWDG_Init(0X7F,0X5F,WWDG_Prescaler_8);//计数器值为7f,窗口寄存器为5f,分频数为8
while(1)
{
LED0=1;
}
}
void WWDG_IRQHandler(void)
{
WWDG_SetCounter(WWDG_CNT); //当禁掉此句后,窗口看门狗将产生复位
WWDG_ClearFlag(); //清除提前唤醒中断标志位
LED1=!LED1; //LED状态翻转
}
问题1:主程序执行到WWDG_Init()会调用其中的WWDG_IRQHandler这个中断服务函数,中断服务函数执行完毕后(即LED1状态翻转)程序应该执行while(1)死循环(LED0灭掉),但是实验现象中为什么LED1还会继续反复翻转呢?
问题2:按照视频里注释掉蓝色代码(不喂狗),实验现象里确实红灯(LED0)闪烁,同时绿灯(LED1)也微弱闪烁-----------【此处有两点疑问:1、视频里说LED1(绿灯)不会亮,但实际情况是绿灯微亮且闪烁,为什么?;2、依然注释掉喂狗代码,在主函数while循环中LED0(紫色加粗代码)的前后行先后依次加入delay_ms(300),红灯闪烁情况不同,在前面加入delay红灯会常亮,后面加入时会闪烁,这里不能理解的是注释掉喂狗后当计数器小于0x3f应该复位,按道理不应该执行while循环才对(debug看了一下确实也没有执行while语句),既然没有执行while为什么加入delay函数位置不同会导致现象不同】
|
|