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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32F10x 學(xué)習(xí)筆記7獨(dú)立看門(mén)狗IWDG 模塊

          STM32F10x 學(xué)習(xí)筆記7獨(dú)立看門(mén)狗IWDG 模塊

          作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏
          按照STM32參考手冊(cè)的說(shuō)法:“獨(dú)立看門(mén)狗(IWDG)由專用的低速時(shí)鐘(LSI)驅(qū)動(dòng),即使主時(shí)鐘發(fā)生故障它也仍然有效。IWDG最適合應(yīng)用于那些需要看門(mén)狗作為一個(gè)在主程序之外,能夠完全獨(dú)立工作,并且對(duì)時(shí)間精度要求較低的場(chǎng)合。WWDG最適合那些要求看門(mén)狗在精確計(jì)時(shí)窗口起作用的應(yīng)用程序。”

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

          簡(jiǎn)單的說(shuō),STM32中的IWDG其核心就是一個(gè)12bits的向下遞減的計(jì)數(shù)器,當(dāng)計(jì)數(shù)器計(jì)數(shù)到零時(shí)就會(huì)觸發(fā)系統(tǒng)復(fù)位。因此,要在每次計(jì)數(shù)到零之前將其復(fù)位到一個(gè)初始值。這個(gè)初始值就在重裝載寄存器(IWDG_RLR)中存放,其默認(rèn)值為0xFFF,我們也可以將其改為其他值。

          計(jì)數(shù)器的時(shí)鐘由LSI時(shí)鐘經(jīng)過(guò)分頻后提供,預(yù)分頻因子由預(yù)分頻寄存器(IWDG_PR)的值來(lái)確定。具體的說(shuō)IWDG_PR寄存器只有最低的3位是有效的,其他高位永遠(yuǎn)都為0,這最低的3位就決定了預(yù)分頻因子,這3位的值與預(yù)分頻因子的關(guān)系如下。

          000: 預(yù)分頻因子=4 100: 預(yù)分頻因子=64 001: 預(yù)分頻因子=8 101: 預(yù)分頻因子=128010: 預(yù)分頻因子=16 110: 預(yù)分頻因子=256 011: 預(yù)分頻因子=32 111: 預(yù)分頻因子=256 

          除了上面介紹的兩個(gè)寄存器,IWDG還有另外兩個(gè)寄存器,合起來(lái)共四個(gè)寄存器,分別是:

          鍵寄存器(IWDG_KR)

          預(yù)分頻寄存器(IWDG_PR)

          重裝載寄存器(IWDG_RLR)

          狀態(tài)寄存器(IWDG_SR)

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

          開(kāi)啟看門(mén)狗

          向鍵寄存器(IWDG_KR)寫(xiě)入0xCCCC,啟動(dòng)看門(mén)狗工作。IWDG一旦啟動(dòng)了就不會(huì)停止,除非掐斷單片機(jī)的供電。也就是說(shuō)看門(mén)狗不受休眠或RESET的影響。

          IWDG->KR = 0xCCCC;

          STM32F10x_StdPeriph_Driver提供了如下函數(shù)。

          void IWDG_Enable(void);

          喂狗

          向鍵寄存器(IWDG_KR)寫(xiě)入0xAAAA,這時(shí)計(jì)數(shù)器的值會(huì)復(fù)位為重裝載寄存器(IWDG_RLR)的值。

          否則,當(dāng)計(jì)數(shù)器為0時(shí),看門(mén)狗會(huì)產(chǎn)生復(fù)位。

          IWDG->KR = 0xAAAA;

          STM32F10x_StdPeriph_Driver提供了如下函數(shù)。

          void IWDG_ReloadCounter(void);

          修改預(yù)分頻因子

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

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

          IWDG->KR = 0x5555;IWDG->PR = value;

          利用STM32F10x_StdPeriph_Driver則需要如下調(diào)用兩個(gè)函數(shù)。

          IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);IWDG_SetPrescaler(value);

          修改重裝載寄存器的值

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

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

          IWDG->KR = 0x5555;IWDG->RLR = value;

          利用STM32F10x_StdPeriph_Driver則需要如下調(diào)用兩個(gè)函數(shù)。

          IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);IWDG_SetReload(value);

          預(yù)分頻寄存器、重裝載寄存器與看門(mén)狗超時(shí)時(shí)間的關(guān)系如下表所示。



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

          另外,當(dāng)用調(diào)試器調(diào)試代碼時(shí),我們希望在產(chǎn)生斷點(diǎn)時(shí),計(jì)數(shù)器能夠停止計(jì)數(shù)。這可以通過(guò)設(shè)置DBGMCU_CR的第8位(DBG_IWDG_STOP位)來(lái)實(shí)現(xiàn)。

          0:看門(mén)狗計(jì)數(shù)器仍然正常工作;

          1:看門(mén)狗計(jì)數(shù)器停止工作。

          操作代碼如下:

          DBGMCU->CR |= 0x100;

          STM32F10x_StdPeriph_Driver中也提供了相應(yīng)的操作函數(shù):

          DBGMCU_Config(DBGMCU_IWDG_STOP, ENABLE);


          評(píng)論


          技術(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); })();