×
单片机 > 单片机程序设计 > 详情

STM学习笔记--窗口看门狗WWDG

发布时间:2020-05-30 发布时间:
|
STM32的窗口看门狗

 

时钟来源:APB1àPCLK1最大72MHz

 

1:窗口看门狗的特性:

  (1)可编程的自由运行递减计数器

  (2)复位条件:a:当递减计数器,计数值小于0X40时,产生复位。

                 b:当递减计数器在窗口外(计数器>WWDG_CFR)被重装载,则产生复位

 

  (3)启动看门狗,且允许中断,递减计数器等于0X40,产生早期唤醒中断(EWI),在中断中重转载计数器,避免WWDG复位。

 

工作原理:

 

 

 

由框图可以看出:

 

APB1的时钟经过(预分频器)WDGTB,CNT为7位【T6àT0】递减计数器计数,看门狗控制寄存器(WWDG_CR)装载入CNT。

当计数器T6位由1à0时,立即产生复位信号。注意WWDG_CR的值范围为0XFF-0XC0之间。

看门狗配置寄存器WWDG_CFR设置窗口的高度,当T6:0>W6:0时,写入WWDG_CR则立即产生复位信号;当T6:0

 

 

 

寄存器:

WWDG_CR

 

 

 

WWDG_SR:包含提前唤醒中断,即减到0X40时

 

 

 

WWDG_CFR:窗口配置寄存器,EWI只能由硬件复位后清除,当到0X40时,立即产生中断。

 

 

 

//来自正点原子@ALIENTEK程序

//保存WWDG计数器的设置值,默认为最大.

u8 WWDG_CNT=0x7f;

//初始化窗口看门狗

//tr   :T[6:0],用于存储计数器的值

//wr   :W[6:0],用于存储窗口值

//fprer:窗口看门狗的实际设置

//低2位有效.Fwwdg=PCLK1/4096/2^fprer.

void WWDG_Init(u8 tr,u8 wr,u8 fprer)

{                                                

       RCC->APB1ENR|=1<<11;     //使能wwdg时钟

       WWDG_CNT=tr&WWDG_CNT;   //初始化WWDG_CNT.                                                             

       WWDG->CFR|=fprer<<7;    //PCLK1/4096再除2^fprer

       WWDG->CFR|=1<<9;        //使能提前唤醒中断

       WWDG->CFR&=0XFF80;    

       WWDG->CFR|=wr;                 //设定窗口值    

       WWDG->CR|=WWDG_CNT|(1<<7); //开启看门狗,设置7位计数器                                                       

       MY_NVIC_Init(2,3,WWDG_IRQChannel,2);//抢占2,子优先级3,组2         

}

//重设置WWDG计数器的值

void WWDG_Set_Counter(u8 cnt)

{

       WWDG->CR|=(cnt&0x7F);//重设置7位计数器

}

//窗口看门狗中断服务程序

void WWDG_IRQHandler(void)

{                                    

       u8 wr,tr; 

      wr=WWDG->CFR&0X7F;

       tr=WWDG->CR&0X7F;

       if(tr

       WWDG->SR=0X00;//清除提前唤醒中断标志位

       LED1=!LED1;

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项