在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            STM32之獨(dú)立看門狗

            作者: 時(shí)間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
            實(shí)驗(yàn)現(xiàn)象:

            開始LED1亮,LED2熄滅,若不隔時(shí)間按KEY1則發(fā)現(xiàn)LED2因獨(dú)立看門狗的作用使系統(tǒng)復(fù)位而不斷閃爍,若間斷的按KEY1則發(fā)現(xiàn)LED2不會(huì)閃爍,表明沒有復(fù)位。

            本文引用地址:http://www.biyoush.com/article/201611/322764.htm

            實(shí)驗(yàn)平臺(tái):

            基于STM32F103C8T6的彩屏開發(fā)板

            操作步驟:

            1)向IWDG_KR 寫入0X5555。
            通過這步,我們?nèi)∠鸌WDG_PR 和IWDG_RLR 的寫保護(hù),使后面可以操作這兩個(gè)寄存器。
            設(shè)置 IWDG_PR 和IWDG_RLR 的值。
            這兩步設(shè)置看門狗的分頻系數(shù),和重裝載的值。由此,就可以知道看門狗的喂狗時(shí)間(也
            就是看門狗溢出時(shí)間),該時(shí)間的計(jì)算方式為:
            Tout=((4×2^prer) ×rlr) /40
            其中Tout 為看門狗溢出時(shí)間(單位為ms);prer 為看門狗時(shí)鐘預(yù)分頻值(IWDG_PR 值),
            范圍為0~7;rlr 為看門狗的重裝載值(IWDG_RLR 的值);
            比如我們?cè)O(shè)定 prer 值為4,rlr 值為625,那么就可以得到Tout=64×625/40=1000ms,這樣,
            看門狗的溢出時(shí)間就是1s,只要你在一秒鐘之內(nèi),有一次寫入0XAAAA 到IWDG_KR,就不會(huì)導(dǎo)致看門狗復(fù)位(當(dāng)然寫入多次也是可以的)。這里需要提醒大家的是,看門狗的時(shí)鐘不是準(zhǔn)
            確的40Khz,所以在喂狗的時(shí)候,最好不要太晚了,否則,有可能發(fā)生看門狗復(fù)位。

            2)向IWDG_KR 寫入0XAAAA。
            通過這句,將使STM32 重新加載IWDG_RLR 的值到看門狗計(jì)數(shù)器里面。也可以用該命令
            來喂狗。
            3)向IWDG_KR 寫入0XCCCC。
            通過這句,來啟動(dòng) STM32 的看門狗。注意IWDG 在一旦啟用,就不能再被關(guān)閉!想要關(guān)
            閉,只能重啟,并且重啟之后不能打開IWDG,否則問題依舊,所以在這里提醒大家,如果不
            用IWDG 的話,就不要去打開它,免得麻煩。
            通過上面 3 個(gè)步驟,我們就可以啟動(dòng)STM32 的看門狗了,使能了看門狗,在程序里面就
            必須間隔一定時(shí)間喂狗,否則將導(dǎo)致程序復(fù)位。利用這一點(diǎn),我們通過一個(gè)LED 燈來指
            示程序是否重啟,來驗(yàn)證STM32 的獨(dú)立看門狗

            程序部分代碼:

            watchdong.h

            #ifndef WATCHDOG_H
            #define WATCHDOG_H
            void WatchDog_Init(u8, u16);//申明看門狗的初始化函數(shù)
            void WatchDog_Feed(void);//申明喂狗的函數(shù)
            #endif

            watchdong.c

            #include"common.h"
            #include"watchdog.h"
            //看門狗初始化,參數(shù):prer-分頻,reld-計(jì)數(shù)器重裝載值
            void WatchDog_Init(u8 prer, u16 reld)
            {
            IWDG->KR=0x5555; //允許訪問PR和RLR寄存器
            IWDG->PR=prer;//設(shè)置分頻
            IWDG->RLR=reld; //設(shè)定計(jì)數(shù)器初值
            IWDG->KR=0xaaaa;//初次裝初值
            IWDG->KR=0xcccc;//啟動(dòng)看門狗定時(shí)器
            }

            //喂狗
            void WatchDog_Feed(void)
            {
            IWDG->KR=0xaaaa;
            }
            該代碼就2 個(gè)函數(shù),void IWDG_Init(u8 prer,u16 rlr)是獨(dú)立看門狗初始化函數(shù),就是按照
            上面介紹的步驟來初始化獨(dú)立看門狗的。該函數(shù)有2 個(gè)參數(shù),分別用來設(shè)置與預(yù)分頻數(shù)與重裝
            寄存器的值的。通過這兩個(gè)參數(shù),就可以大概知道看門狗復(fù)位的時(shí)間周期為多少了。其計(jì)算方
            式上面有詳細(xì)的介紹,這里不再多說了。
            void IWDG_Feed(void)函數(shù),該函數(shù)用來喂狗,因?yàn)镾TM32 的喂狗只需要向鍵值寄存器寫
            入0XAAAA 即可,

            主函數(shù)
            #include
            #include"common.h"
            #include"led.h"
            #include"key.h"
            #include"watchdog.h"
            int main(void)
            {
            u8 temp2;
            Stm32_Clock_Init(9);//系統(tǒng)時(shí)鐘設(shè)置
            delay_init(72);//延時(shí)初始化
            LED_Init();//LED初始化
            KEY_Init();
            WatchDog_Init(4,625);//看門狗初始化
            LED1=1;
            LED2=0;
            while(1)
            {
            temp2=KEY_Scan(); //讀取按鍵值
            if(temp2==1)
            WatchDog_Feed();//喂狗

            }
            }



            關(guān)鍵詞: STM32獨(dú)立看門

            評(píng)論


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

            關(guān)閉