1.创建工程目录如下:

2.创建bsp_wwdg.c,bsp_wwdg.h,main.c这三个文件

bsp_wwdg.c代码如下:

#include "./wwdg/bsp_wwdg.h"

static uint8_t wwdg_cnt;

static void WWDG_NVIC_Config(void)
{
    //定义NVIC结构体
    NVIC_InitTypeDef NVIC_InitStructure;
    //给NVIC选择优先组
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
    //编写NVIC结构体成员
    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 WWDG_Config(uint8_t tr,uint8_t wr,uint32_t prv)
{
    wwdg_cnt = tr;
    //开启时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);
    //设置预分频器的值
    WWDG_SetPrescaler(prv);
    //设置窗口值
    WWDG_SetWindowValue(wr);
    //设置计数器的值,使能WWDG
    WWDG_Enable(tr);
    //清除提前唤醒中断标志位
    WWDG_ClearFlag();
    //配置WWDG中断优先级
    WWDG_NVIC_Config();
    //唤醒中断
    WWDG_EnableIT();


}


void WWDG_Feed_Config(void)
{
    WWDG_SetCounter(wwdg_cnt);
}

bsp_wwdg.h代码如下:

#ifndef __WWDG_H
#define    __WWDG_H

#include "stm32f4xx.h"

void WWDG_Config(uint8_t tr,uint8_t wr,uint32_t prv);
void WWDG_Feed_Config(void);

#endif /* __WWDG_H */

main.c代码如下:

#include "stm32f4xx.h"
#include "./led/bsp_led.h"
#include "./wwdg/bsp_wwdg.h"

void Delay(__IO u32 nCount); 

/**
  * @brief  主函数
  * @param  无
  * @retval 无
  */
int main(void)
{
    uint8_t wwdg_tr,wwdg_wr;
    /* LED 端口初始化 */
    LED_GPIO_Config();
    LED3(ON);
    Delay(0xFFFFFF);

    //初始化WWDG
    WWDG_Config(127,80,WWDG_Prescaler_8);
    //设置窗口值为0x5f
    wwdg_wr = WWDG->CFR & 0X7F;

    /* 控制LED灯 */
    while (1)
    {
        LED3(OFF);
        wwdg_tr = WWDG->CR & 0X7F;
        if(wwdg_tr<wwdg_wr)
        {
            WWDG_Feed_Config();
        }
    }
}

void Delay(__IO uint32_t nCount)     //简单的延时函数
{
    for(; nCount != 0; nCount--);
}

3.编译工程成功,烧录进开发板,如图所示:

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐