<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          STM32之窗口看門狗(WWDG)

          作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
          前幾天學(xué)習(xí)STM32的兩條狗,先學(xué)習(xí)了寵物狗(IWDG),和其它MCU差不多,不多說了。學(xué)到警犬(WWDG)的時(shí)候,問題來了,沒有IWDG那么好理解了,看了半天沒有搞懂是怎么回事,計(jì)數(shù)器值、窗口值、在什么時(shí)候喂狗、什么時(shí)候產(chǎn)生中斷等等,一頭霧水。


          經(jīng)過兩天的推敲,個(gè)人理解如下:

          本文引用地址:http://www.ex-cimer.com/article/201611/321561.htm

          1、有個(gè)7位遞減計(jì)數(shù)器(WWDG->CR),就這個(gè)計(jì)數(shù)器和窗口計(jì)數(shù)器(WWDG->CFR)決定什么時(shí)候喂狗。

          狗喂早了,復(fù)位——“早”體現(xiàn)在計(jì)數(shù)器值(tr)>窗口值(wr),也就是計(jì)數(shù)器值還沒有減到窗口值以下;

          2、當(dāng) 0x40 < 計(jì)數(shù)器值(tr) < 窗口值(wr) 時(shí),這時(shí)候最適合喂狗了,也只有在這時(shí)候喂狗才合適;

          3、當(dāng)計(jì)數(shù)器的值從0x40變到0x3F的時(shí)候,將產(chǎn)生看門狗復(fù)位;當(dāng)然在要產(chǎn)生復(fù)位的前一段時(shí)間,如果開啟了提前喚醒中斷,那么就會(huì)進(jìn)入中斷,在中斷函數(shù)里,我們需要及時(shí)喂狗,否則會(huì)產(chǎn)生復(fù)位;

          4、據(jù)網(wǎng)上資料介紹,在這個(gè)中斷里面一般不進(jìn)行喂狗,一般是系統(tǒng)去世前的“遺囑”,比如存儲(chǔ)重要的數(shù)據(jù)等。這個(gè)就需要根據(jù)個(gè)人需要設(shè)計(jì)。

          下面擇取部分程序,可以根據(jù)程序說明,計(jì)算出喂狗的時(shí)間,大家注意推敲,歡迎交流!


          u8 WWDG_CNT = 0x7F;


          void WWDG_Init(u8 tr, u8 wr, u32 fprer)
          {
          RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG時(shí)鐘使能

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




          WWDG_SetPrescaler(fprer); // 設(shè)置IWDG預(yù)分頻值



          WWDG_SetWindowValue(wr); // 設(shè)置窗口值


          WWDG_Enable(WWDG_CNT); // 使能看門狗, 設(shè)置 counter

          WWDG_ClearFlag(); // 清除提前喚醒中斷標(biāo)志位

          WWDG_NVIC_Init(); // 初始化窗口看門狗 NVIC


          WWDG_EnableIT(); // 開啟窗口看門狗中斷
          }



          void WWDG_IRQHandler(void)
          {
          WWDG_ClearFlag(); // 清除提前喚醒中斷標(biāo)志位

          LED1 = !LED1; // LED1 狀態(tài)翻轉(zhuǎn)
          printf("進(jìn)入中斷!rn");
          }

          int main(void)
          {
          u8 tr, wr;

          delay_init();
          NVIC_Configuration(); // 設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級, 2位響應(yīng)優(yōu)先級
          LED_Init();
          KEY_Init();
          uart_init(9600);

          LED0 = 0;
          delay_ms(300);

          WWDG_Init(0x7F, 0x5F, WWDG_Prescaler_8); // 計(jì)數(shù)器值為7f, 窗口寄存器值為5f, 分頻數(shù)為8

          while(1)
          {
          LED0 = 1;

          wr=WWDG->CFR&0X7F; // 窗口值
          tr=WWDG->CR&0X7F; // 計(jì)數(shù)器值



          if(tr // 計(jì)數(shù)器值tr必須小于窗口值wr時(shí)才能喂狗,在之前喂狗則太早,會(huì)產(chǎn)生看門狗復(fù)位
          {
          WWDG_SetCounter(WWDG_CNT);
          printf("正在喂狗!rn");
          }


          }

          }

          實(shí)踐出真知!
          試驗(yàn)現(xiàn)象:DS0(紅燈)先亮,再滅,DS1無變化。
          試驗(yàn)現(xiàn)象說明:在規(guī)定的時(shí)間段及時(shí)的喂狗了,程序沒有進(jìn)入中斷函數(shù)。



          關(guān)鍵詞: STM32窗口看門狗WWD

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();