以下程序不知道为什么LED1的灯一直亮!!!我用的是窗口看门狗!!
#include "stm32f4xx.h"
#include "led.h"
#include "key.h"
#include "io_bit.h"
#include "systick.h"
#include "usart.h"
#include "string.h"
#include "stdio.h"
#include "exti.h"
#include "sw_exti.h"
#include "iwdg.h"
#include "wwdg.h"
void delay(u32 n)
{
while(n--)
{
;
}
}
int main(void)
{
char data[100] = {0};
led_init(); //初始化led
//beep_init(); //初始化蜂鸣器
key_init(); //初始化key
//systick_init_1us(); //滴答定时器启动,为1us
//systick_init_nus(200); //任意us系统滴答定时
//systick_init_nms(200); //任意ms系统滴答定时
usart_1_init(84,9600); //使能串口
exti_init(); //初始化外部中断
sw_exti_init(); //初始化软件中断
//iwdg_init(000,666); //初始化独立看门狗
wwdg_init(0,0x66,0x53);
delay(100000);
LED1 = 0 ;
while(1)
{
delay(1000000);
LED1 = 0;
}
}
#include "wwdg.h"
#include "led.h"
//该函数为窗口看门狗函数
/*
函数功能:实现窗口看门狗函数
形参: pr为分频值,win为窗口值,cnt为计数值
备注:我这里没有使用重新写入计数器的方法使其复位
*/
void wwdg_init(u8 pr,u8 win,u8 cnt)
{
uint32_t priority = 0;
//初始化PCLK1的时钟
RCC->APB1ENR |= 1 << 11;
//配置WWDG相关的寄存器
//配置看门狗计数器的值 -> 这个值是用来判断什么时候产生变化的
//设置窗口值 必须大于0x40 小于0x7f 这里是7位
WWDG->CFR &= (win);
//设置分频
WWDG->CFR |= (pr << 7);
//设置计数值
WWDG->CR &= (cnt);
WWDG->CR |= 1 << 7; //使能看门狗
//中断使能
WWDG->CFR |= 1 << 9;
//设置NVIC
NVIC_SetPriorityGrouping(7-2);//设置优先级分组
priority = NVIC_EncodePriority(7-2,1,3);//设置优先级编码
NVIC_SetPriority(WWDG_IRQn,priority); //优先级设置
NVIC_EnableIRQ(WWDG_IRQn);
}
/*
函数功能:重新设置WWDG计数器的值
函数形参:计数器的值
*/
void wwdg_set_count(u8 cnt)
{
WWDG->CR = (cnt & 0X7F);
}
/*
函数功能:WWDG看门狗中断服务函数
*/
void WWDG_IRQHandler(void)
{
wwdg_set_count(0x53);
WWDG->SR &=~(1 << 0); //清除中断标志
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>