新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > STM学习笔记--窗口看门狗WWDG

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

作者:时间:2016-09-12来源:网络收藏

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

本文引用地址:http://www.eepw.com.cn/article/201609/296865.htm

  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;

  }



关键词: STM 看门狗

评论


相关推荐

技术专区

关闭