MM32之独立看门狗

IWDG主要性能:


• 自由运行的递减计数器
• 时钟由独立的振荡器提供(可在停止和待机模式下工作)
• 看门狗被激活后,则在计数器计数至0x0000 时产生复位。


IWDG功能描述:

在键寄存器(IWDG_KR)中写入0xCCCC。开始启动独立看门狗;此时计数器开始从其复位值0xFFF 递减计数。当计数器计数到末尾0x000 时,会产生一个复位信号(IWGD_RESET)。无论何时,只要在键寄存器IWDG_KR 中写入0xAAAA,IWDG_RLR 中的值就会被重新加载到计数器,从而避免产生看门狗复位。


看门狗寄存器保护:

IWDG_PR 和IWDG_RLR 寄存器具有写保护功能。要修改这两个寄存器的值,必须先向IWDG_KR 寄存器中写入0x5555。以不同的值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。重装载操作(即写入0xAAAA)也会启动写保护功能。状态寄存器指示预分频值和递减计数器是否正在被更新。

下图为预分频寄存器IWDG_PR

由上图可知分频系数有最低的三位来决定4-256分频

独立看门狗(IWDG)

Tout=((4×2^prer) ×rlr) /40Khz

独立看门狗由内部专门的 40Khz 低速时钟(LSI)驱动。

其中 Tout 为看门狗溢出时间(单位为 s);

prer 为看门狗时钟预分频值(IWDG_PR 值),范围为 0~7;

(4×2^prer)整体为实际预分频值,预分频值可取值为4/8/16/32/64/128/256。

rlr 为看门狗的重装载值(IWDG_RLR 的值);

 

#include "WWDG.h"
#include "led.h"
void wwdg_init(u8 prer,u16 rlr)
{
    RCC->CSR|=RCC_CSR_LSION;//开启内部低速时钟
    IWDG->KR=0X5555;//使能对IWDG->PR和IWDG->RLR的写
    IWDG->PR=prer;  //设置分频系数 
    IWDG->RLR=rlr;  //从加载寄存器 IWDG->RLR 
    IWDG_Feed();//reload
    IWDG->KR=0XCCCC;//使能看门狗
}
void IWDG_Feed(void)
{
    IWDG->KR=0XAAAA;//reload											   
}


int main(void)
{
    u8 flage=0;
    delay_init();	     	//延时初始化
    LED_Init();		  	 	//初始化与LED连接的硬件接口    
    uart_nvic_init(SystemCoreClock/1000000,115200);	 //串口初始化为115200
   LED1=1;
    KEY_Init();
    printf("uart ok!\r\n");
    wwdg_init(4,625);
    while(1)
    {
        if(KEY_Scan(0)==WKUP_PRES)//按键喂狗函数
        {
            flage=30;
            IWDG_Feed();
            LED1=0;
        }
        delay_ms(500);
        if (flage>0)
        {
        flage--;
        IWDG_Feed();
        printf("IWDG_Feed ok!\r\n");
        }
    }	 
}

 看门狗的时间的计算在上面我们已经给出了计算的方法,大家看不懂的结合上面的计算过程看一下

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值