独立看门狗 (IWDG)

1. IWDG是什么?

IWDG本质上就是定时器,只不过这个定时器比较特殊不会自动将重装载值写入计数器中。一旦开启需要在其计数器为0前将其重装载值重新写入计数器中,否则到0时会产生一个复位操作,所以该定时器因其功能被形象的叫做看门狗,即需要在骨头啃完前给它替换一个新骨头。

2. IWDG的特性

(1)IWDG的时钟源是LSI(内部低速时钟),可在待机和停止模式下运行
(2)IWDG的计数方式为递减计数,并在减到0时产生复位

3. IWDG配置过程以及示例代码

3.1 IWDG的配置流程梳理

配置的流程框图:

1
IWDG初始化流程:

(1) 开启LSI并等待其准备就绪

(2) 使能对IWDG_PR和IWDG_RLR的写访问(使能后才能对其进行写操作)

(3) 确保RVU和PVU都已复位(复位后才能将值写入)

(4) 写入我们想设置的预分频(IWDG_PR)和重装载值(IWDG_RLR)

(5) 将我们写的重载装值写入计数器

(6) 禁止对IWDG_PR和IWDG_RLR的写访问

(7) 启动IDWG,开始倒计时

相关寄存器功能:

2
3
4
5

3.2 IWDG初始化示例

//重装载值为x秒
void IWDG_Init(u16 x)
{
	//开启LSI时钟
	RCC_LSICmd(ENABLE);
	
	//等待LSI准备完毕
	while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);

	

	//打开对预分频和重载值的写访问
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
	
	//等待上一次对预分频写值操作完成
	while(IWDG_GetFlagStatus(IWDG_FLAG_PVU) == SET);
	//32分频
	IWDG_SetPrescaler(IWDG_Prescaler_256);

	//等待上一次对重载值写值操作完成
	while(IWDG_GetFlagStatus(IWDG_FLAG_RVU) == SET);	
	//设置重载值为1000
	IWDG_SetReload(125*x);
	
	//将重装载值写入计数器
	IWDG_ReloadCounter();	

	//关闭对预分频和重载值的写访问
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Disable);
	
	//使能独立看门狗
	IWDG_Enable();	
	
	
}
  • 16
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值