新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32F10x 學習筆記7(獨立看門狗IWDG 模塊)

        STM32F10x 學習筆記7(獨立看門狗IWDG 模塊)

        作者: 時間:2016-11-20 來源:網絡 收藏
        按照STM32參考手冊的說法:“獨立看門狗(IWDG)由專用的低速時鐘(LSI)驅動,即使主時鐘發生故障它也仍然有效。IWDG最適合應用于那些需要看門狗作為一個在主程序之外,能夠完全獨立工作,并且對時間精度要求較低的場合。WWDG最適合那些要求看門狗在精確計時窗口起作用的應用程序。”

        本文引用地址:http://www.104case.com/article/201611/318842.htm

        簡單的說,STM32中的IWDG其核心就是一個12bits的向下遞減的計數器,當計數器計數到零時就會觸發系統復位。因此,要在每次計數到零之前將其復位到一個初始值。這個初始值就在重裝載寄存器(IWDG_RLR)中存放,其默認值為0xFFF,我們也可以將其改為其他值。

        計數器的時鐘由LSI時鐘經過分頻后提供,預分頻因子由預分頻寄存器(IWDG_PR)的值來確定。具體的說IWDG_PR寄存器只有最低的3位是有效的,其他高位永遠都為0,這最低的3位就決定了預分頻因子,這3位的值與預分頻因子的關系如下。

        1. 000:預分頻因子=4
        2. 100:預分頻因子=64
        3. 001:預分頻因子=8
        4. 101:預分頻因子=128
        5. 010:預分頻因子=16
        6. 110:預分頻因子=256
        7. 011:預分頻因子=32
        8. 111:預分頻因子=256

        除了上面介紹的兩個寄存器,IWDG還有另外兩個寄存器,合起來共四個寄存器,分別是:

        鍵寄存器(IWDG_KR)

        預分頻寄存器(IWDG_PR)

        重裝載寄存器(IWDG_RLR)

        狀態寄存器(IWDG_SR)

        所謂鍵寄存器(IWDG_KR),可以認為就是個控制寄存器,開啟看門狗,喂狗需要操作鍵寄存器,修改其他寄存器值也需要先操作鍵寄存器(IWDG_KR)。

        開啟看門狗

        向鍵寄存器(IWDG_KR)寫入0xCCCC,啟動看門狗工作。IWDG一旦啟動了就不會停止,除非掐斷單片機的供電。

        1. IWDG->KR=0xCCCC;

        STM32F10x_StdPeriph_Driver提供了如下函數。

        1. voidIWDG_Enable(void);

        喂狗

        向鍵寄存器(IWDG_KR)寫入0xAAAA,這時計數器的值會復位為重裝載寄存器(IWDG_RLR)的值。

        否則,當計數器為0時,看門狗會產生復位。

        1. IWDG->KR=0xAAAA;

        STM32F10x_StdPeriph_Driver提供了如下函數。

        1. voidIWDG_ReloadCounter(void);

        修改預分頻因子

        向鍵寄存器(IWDG_KR)寫入0x5555,向預分頻寄存器(IWDG_PR)寫入新值。

        注意這兩步之間不能有其他的對IWDG的操作。

        1. IWDG->KR=0x5555;
        2. IWDG->PR=value;

        利用STM32F10x_StdPeriph_Driver則需要如下調用兩個函數。

        1. IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
        2. IWDG_SetPrescaler(value);

        修改重裝載寄存器的值

        向鍵寄存器(IWDG_KR)寫入0x5555,向重裝載寄存器(IWDG_RLR)寫入新值。

        注意這兩步之間不能有其他的對IWDG的操作。

        1. IWDG->KR=0x5555;
        2. IWDG->RLR=value;

        利用STM32F10x_StdPeriph_Driver則需要如下調用兩個函數。

        1. IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
        2. IWDG_SetReload(value);

        預分頻寄存器、重裝載寄存器與看門狗超時時間的關系如下表所示。


        上面的介紹都沒有涉及到狀態寄存器(IWDG_SR)。這個寄存器不太常用,需要了解的可以參閱STM32參考手冊。

        另外,當用調試器調試代碼時,我們希望在產生斷點時,計數器能夠停止計數。這可以通過設置DBGMCU_CR的第8位(DBG_IWDG_STOP位)來實現。

        0:看門狗計數器仍然正常工作;

        1:看門狗計數器停止工作。

        操作代碼如下:

        1. DBGMCU->CR|=0x100;

        STM32F10x_StdPeriph_Driver中也提供了相應的操作函數:

        1. DBGMCU_Config(DBGMCU_IWDG_STOP,ENABLE);



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 游戏| 敦化市| 道孚县| 乌拉特中旗| 巴东县| 元朗区| 昌乐县| 罗甸县| 德安县| 合江县| 布尔津县| 海林市| 五莲县| 昭觉县| 镇巴县| 达拉特旗| 蛟河市| 新乐市| 河津市| 崇文区| 庄河市| 宁蒗| 白朗县| 渝中区| 东乡县| 建昌县| 贵州省| 吉水县| 太白县| 新巴尔虎左旗| 渑池县| 清水县| 厦门市| 洛川县| 黄浦区| 洞口县| 彭山县| 安国市| 图们市| 浦江县| 襄城县|