【STM32】WWDG窗口看门狗实验【固件库】-Jojo

本文详细介绍了STM32的窗口看门狗(WWDG)的配置步骤,包括开启时钟、设置预分频器、窗口值、递减计数器,并启用中断。还展示了中断服务函数的实现,用于喂狗操作及LED状态翻转。此外,提供了初始化函数和头文件的示例代码,帮助读者理解和应用WWDG。
摘要由CSDN通过智能技术生成

前注:本文章主要讲解【固件库(标准库)】

内容为 'Jojo'编写,日常学习总结,内容如有不足、不妥之处请私信告知,谢谢!

硬件原理

配置步骤

1.打开WWDG时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);

2.设置预分频器的值

WWDG_SetPrescaler(fprer);

3.设置上窗口的值

WWDG_SetWindowValue(wr);

4.设置递减计数器的值

WWDG_SetCounter(tr);

5.使能并设置递减计数器的值

WWDG_Enable(0x7F);

6.清楚提前唤醒中断标志位

WWDG_ClearFlag();

7.中断配置

中断配置

void Wwdg_NVIC_Init(void)
{
	NVIC_InitTypeDef NVIC_InitStruct;
	NVIC_InitStruct.NVIC_IRQChannel=WWDG_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority=3;
	NVIC_Init(&NVIC_InitStruct);
}

8.开启WWDG中断(提前唤醒中断)

WWDG_EnableIT();

9.编写中断服务函数

void WWDG_IRQHandler(void)
{
	WWDG_SetCounter(0x7f);//喂狗
	//清楚提前唤醒中断标志位
	WWDG_ClearFlag();
	LED0=!LED0;
}

喂狗所用的函数

WWDG_SetCounter(0x7f);

文件

main.c

iwdg.c

#include "iwdg.h"
#include "led.h"
void Iwdg_Init(u8 per,u16 rlr)
{
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
	IWDG_SetPrescaler(per);
	IWDG_SetReload(rlr);
	IWDG_ReloadCounter();
	IWDG_Enable();
}

void Wwdg_Init(u8 tr,u8 wr,u32 fprer)
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);
	//设置预分频器的值
	WWDG_SetPrescaler(fprer);
	//设置上窗口的值
	WWDG_SetWindowValue(wr);
	//设置递减计数器的值
	WWDG_SetCounter(tr);
	//使能并设置递减计数器的值
	WWDG_Enable(0x7F);
	
	//清楚提前唤醒中断标志位
	WWDG_ClearFlag();
	//中断配置
	Wwdg_NVIC_Init();
	
	//开启WWDG中断(提前唤醒中断)
	WWDG_EnableIT();
}
void Wwdg_NVIC_Init(void)
{
	NVIC_InitTypeDef NVIC_InitStruct;
	NVIC_InitStruct.NVIC_IRQChannel=WWDG_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority=3;
	NVIC_Init(&NVIC_InitStruct);
}

void WWDG_IRQHandler(void)
{
	WWDG_SetCounter(0x7f);//喂狗
	//清楚提前唤醒中断标志位
	WWDG_ClearFlag();
	LED0=!LED0;
}

iwdg.h

#ifndef __IWDG_H
#define __IWDG_H

#include "sys.h"

void Iwdg_Init(u8 per,u16 rlr);

void Wwdg_Init(u8 tr,u8 wr,u32 fprer);
void Wwdg_NVIC_Init(void);
#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值