久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > STM32 之 外部開門狗(iwdg)

STM32 之 外部開門狗(iwdg)

作者: 時間:2016-12-03 來源:網絡 收藏
獨立看門狗(IWDG)由專用的40kHz的低速時鐘驅動,

即使主時鐘發生故障它也仍然有效。
窗口看門狗由從APB1時鐘分頻后得到的時鐘驅動,
通過可配置的時間窗口來檢測應用程序非正常的過遲或過早的操作。

本文引用地址:http://cqxgywz.com/article/201612/325145.htm

IWDG最適合應用于那些需要看門狗作為一個在主程序之外,
能夠完全獨立工作,并且對時間精度要求較低的場合。

WWDG最適合那些要求看門狗在精確計時窗口起作用的應用程序

IWDG主要性能
●自由運行的遞減計數器
●時鐘由獨立的RC振蕩器提供(可在停止和待機模式下工作)
●看門狗被激活后,則在計數器計數至0x000時產生復位


下面是使用代碼:

C語言:Codee#18865
voidLSI_RCC_Configuration(void)
{
RCC_LSICmd(ENABLE);//打開LSI
while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY)==RESET);//等待直到LSI穩定
}


=================================================================================

voidIWDG_Configuration(void)
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);// 打開使能,因為iwdg的寄存器有寫保護,必須先寫入0x5555,才能操作寄存器
IWDG_SetPrescaler(IWDG_Prescaler_256);// 獨立看門狗使用內部低速振蕩器LSI,對LSI進行256分頻
IWDG_SetReload(2500);// 設定獨立看門狗計數器的計數值(0x000~0xFFF;0~4095),復位時間為16s
IWDG_ReloadCounter();// 重載獨立看門狗計數器,向寄存器寫入0xAAAA,或者更新計數值
IWDG_Enable();// 開啟看門狗,向寄存器寫入0xCCCC即可
}

喂狗程序直接使用IWDG_ReloadCounter();函數。

其中 LSI_RCC_Configuration(); // 內部低速時鐘配置 該函數可以不用,但是等低速內部時鐘穩定后再開外部看門狗比較好。


現在說說如何計算外部看門狗計數器復位的時間。

先給出datasheet上的預分頻和對應的時間范圍:

我們來舉個例子:

比如上面的代碼所示,預分頻256,然后計數值是2500次,則外部看門狗計數器復位時間為16秒。

首先LSI是40KHz,這里不考慮其上下浮動的情況。

  • 40000Hz / 256 = 156.25Hz 這里40KHz就是40000Hz進行256分頻后,計數器的頻率為156.25Hz;
  • 1 / 156.25Hz = 0.0064s156.25Hz換算成時間就是0.0064秒,即為每次計數用時0.0064秒;
  • 0.0064s * 2500 = 16s 則2500次計數用時16秒,16秒后計數初值被減到零,觸發復位,被狗咬到。


如何測試:

stm32 的速率比較高,如果用LED作測試可能無法看到他的復位效果。

所以還是用仿真器比較好用,下面是一個示意:



評論


技術專區

關閉