STM32 IWDG(獨立看門狗)

1 IWDG簡介

STM32有兩個看門狗:一個是獨立看門狗(IWDG),另外一個是窗口看門狗。獨立看門狗也稱寵物狗,窗口看門狗也稱警犬。本文主要分析獨立看門狗的功能和它的應用。

獨立看門狗用通俗一點的話來解釋就是一個12位的遞減計數器,當計數器的值從某個值一直減到0的時候,系統就會產生一個復位信號,即IWDG_RESET。如果在計數器沒減到0之前,刷新了計數器的值的話,那么就不會產生復位信號,這個動作就是我們經常說的“喂狗”。看門狗功能由VDD供電,在停止模式和待機模式下仍能工作。

2 IWDG功能框圖剖析

IWDG功能框圖如下圖所示:

2.1 獨立看門狗時鐘

獨立看門狗的時鐘由獨立的RC震蕩器LSI提供,即使主時鐘發生故障它仍然有效,非常獨立。LSI的頻率一般為30~60kHz,根據溫度和工作場合情況有一定的漂移。我們一般取40kHz,所以獨立看門狗的定時時間不是非常精確,只適用于對時間精度要求比較低的場合。

2.2 計數器時鐘

遞減計數器的時鐘由LSI經過一個8位的預分頻器得到,我們可以操作預分頻器寄存器IWDG_PR來設置分頻因子,分頻因子可以是:[4,8,16,32,64,128,256],計數器時鐘CK_CNT=40/4×2^PRV,一個計數器時鐘周期計數器就減一。

2.3 計數器

獨立看門狗的計數器是一個12位的遞減計數器,最大值為0XFFF。當計數器減到0時,會產生一個復位信號IWDG_RESET,讓程序重新啟動運行。如果在計數器減到0之前刷新了計數器的值的話,就不會產生復位信號,重新刷新計數器值的這個動作俗稱“喂狗”。

2.4 重裝載寄存器

重裝載寄存器是一個12位的寄存器,里面裝著要刷新到計數器的值,這個值的大小決定獨立看門狗的溢出時間。超時時間Tout=(4×2^prv)/40×rlv(s),prv是預分頻器寄存器的值,rlv是重裝載寄存器的值。

2.5鍵寄存器

鍵寄存器IWDG_KR可以說是獨立看門狗的一個控制寄存器,主要有三種控制方式,往這個寄存器寫入下面3個不同的值有不同的效果。

鍵寄存器取值枚舉
鍵值鍵值作用
0XAAAA把RLR的值重裝載到CNT
0X5555PR和RLR這兩個寄存器可寫
0XCCCC啟動 IWDG

通過寫往鍵寄存器寫0XCCCC來啟動看門狗屬于軟件啟動的方式,一旦獨立看門狗啟動,它就關不掉,只有復位才能關掉它。

2.6 狀態寄存器

狀態寄存器SR只有位0,PVU和位1:RVU有效,這兩位只能由硬件操作,軟件操作不了。

RVU:看門狗計數器重裝載值更新,硬件置1表示重裝載值的更新正在進行中,更新完畢之后由硬件清0.

PVU:看門狗預分頻值更新,硬件置1指示預分頻值的更新正在進行中,當更新完成后,由硬件清0。

所以只有當RVU、PVU都等于0的時候,才可以更新重裝載寄存器和預分頻寄存器。

3 如何使用IWDG

獨立看門狗一般用來檢測和解決由程序引起的故障,比如一個程序正常運行的時間是50ms,在運行完這段程序之后緊接著進行喂狗,我們設置獨立看門狗的定時溢出時間為60ms,比我們需要監控的程序50ms多一點。如果超過60ms還沒有喂狗,那就說明我們的監控程序出故障了,運行出意外了,那么就會產生系統復位,讓程序重新運行。

3.1 IWDG 配置函數

void IWDG_Config(uint8_t prv,uint16_t rlv)
{//使能預分頻寄存器PR和重裝載寄存器RLR可寫IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//設置預分頻器值IWDG_SetPrescaler(prv);//設置重裝載寄存器值IWDG_RetReload(rlv);//把重裝載寄存器的值放到計數器中IWDG_ReloadCounter();//使能IWDGIWDG_Enable();}

IWDG配置函數有兩個形參,prv用來設置預分頻的值,可取值如下:

/*
*    @arg IWDG_Prescaler_4:      IWDG 預分頻值設置為4
*    @arg IWDG_Prescaler_8:      IWDG 預分頻值設置為8
*    @arg IWDG_Prescaler_16:     IWDG 預分頻值設置為16
*    @arg IWDG_Prescaler_32:     IWDG 預分頻值設置為32
*    @arg IWDG_Prescaler_64:     IWDG 預分頻值設置為64
*    @arg IWDG_Prescaler_128:    IWDG 預分頻值設置為128
*    @arg IWDG_Prescaler_256:    IWDG 預分頻值設置為256
*/

如果我們需要設置1s的超時溢出,prv可以取IWDG_Prescaler_64,rlv取625,即調用IWDG使得Tout=64/40*625=1s。

3.2 喂狗函數

void IWDG_Feed(void)
(//把重裝載寄存器的值放到計數器中,喂狗,防止IWDG復位//當計數器的值減到0的時候會產生系統復位IWDG_ReloadCounter();
)

3.3 main函數

int main(void)
{//配置LED GPIO,并關閉LEDLED_GPIO_Config();Delay(0X8FFFFF);//——————————————————————————————————————————————————————————//檢查是否為獨立看門狗復位if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST)!=RESET){//獨立看門狗復位//亮紅燈LED_RED;//清除標志RCC_ClearFlag();//如果一直不能喂狗,會一直復位,加上前面的延時,會看到紅燈閃爍//在1s時間內喂狗的話,則會持續亮綠燈}else{//不是看門狗復位(可能為上電復位或者手動按鍵復位之類的操作)//亮藍燈LED_BLUE;}//————————————————————————————————————————————————————————————//配置按鍵GPIOKey_GPIO_Config();//IWDG 1s超時溢出IWDG_Config(IWDG_Prescaler_64,625);//while部分是我們在項目中具體要寫的代碼,這部分的程序可以用獨立看門狗來監控//如果我們知道這部分代碼執行的時間,比如500ms,那么我們可以設置獨立看門狗的溢出時間是600ms//比500ms多一點,如果要被監控的程序沒出意外,正常執行的話,那么執行完畢之后就會執行喂狗程序//如果程序出意外了那程序就會超時,到達不了喂狗的程序,此時就會產生系統復位。//但是也不排除程序出意外了又恢復正常了,剛好喂狗了,歪打正著。所以要想更精確得監控程序//可以使用窗口看門狗,窗口看門狗規定必須在規定的窗口時間內喂狗while(1){//這里添加需要被監控的代碼,如果有就去掉按鍵模擬喂狗,把按鍵掃描程序去掉//——————————————————————————————————————————————————————————————if(Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN)==KEY_ON){//喂狗,如果不喂狗,系統就會復位,LED1就會滅一次//如果在1s時間內準時喂狗的話,則綠燈會亮,否則紅燈閃爍IWDG_Feed();//喂狗后亮綠燈LED_GREEN;}}//———————————————————————————————————————————————————————————————
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/37311.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/37311.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/37311.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于轉BigDecimal對象時,精度問題

//浮點型數值Double d 0.0003d;//轉BigDecimal對象BigDecimal a new BigDecimal(d);System.out.println(String.format("浮點類型數字:%.4f創建BigDecimal對象并且保留多位小數并且保留多位小數時,精度會變多,結果為%s",d,a.setScale(8, BigDecimal.ROUND_DOWN)));…

format()方法——格式化字符串

自學python如何成為大佬(目錄):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 語法介紹 format()可以對數據進行格式化處理操作,語法如下: format(value, format_spec) format_spec為格式化解釋。當參數…

【計算機畢業設計】092基于微信小程序二手閑置交易市場

🙊作者簡介:擁有多年開發工作經驗,分享技術代碼幫助學生學習,獨立完成自己的項目或者畢業設計。 代碼可以私聊博主獲取。🌹贈送計算機畢業設計600個選題excel文件,幫助大學選題。贈送開題報告模板&#xff…

PostgreSQL的系統視圖pg_stat_archiver

PostgreSQL的系統視圖pg_stat_archiver 在 PostgreSQL 數據庫中,pg_stat_archiver 視圖提供了關于歸檔進程(archiver process)的統計信息。歸檔進程負責將 WAL(Write-Ahead Logging)日志文件復制到歸檔存儲&#xff0…

探索區塊鏈:顛覆性技術的崛起

目錄 一、引言 二、區塊鏈技術概述 三、區塊鏈應用場景 四、區塊鏈面臨的挑戰 五、區塊鏈的未來展望 六、結語 一、引言 在數字化浪潮的推動下,區塊鏈技術以其獨特的去中心化、透明性和不可篡改性等特性,正在逐步改變我們的生活。從金融領域到供應…

基于Java的茶文化交流系統【附源碼+LW】

摘 要 計算機網絡發展到現在已經好幾十年了,在理論上面已經有了很豐富的基礎,并且在現實生活中也到處都在使用,可以說,經過幾十年的發展,互聯網技術已經把地域信息的隔閡給消除了,讓整個世界都可以即時通話…

MySQL數據庫存儲引擎

MySQL數據庫存儲引擎 存儲引擎概念 存儲引擎也稱為表類型 通過不同的技術比如說,存儲機制,索引技巧,鎖定水平等等,來提供不同的功能。 查看MySQL支持的存儲引擎 show engines\G; 常用引擎比較 對事務有需求 innodb …

TiDB-從0到1-數據導出導入

TiDB從0到1系列 TiDB-從0到1-體系結構TiDB-從0到1-分布式存儲TiDB-從0到1-分布式事務TiDB-從0到1-MVCCTiDB-從0到1-部署篇TiDB-從0到1-配置篇TiDB-從0到1-集群擴縮容 一、數據導出 TiDB中通過Dumpling來實現數據導出,與MySQL中的mysqldump類似,其屬于…

Spring Boot中如何配置和使用多數據源

Spring Boot中如何配置和使用多數據源 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!今天,我們將深入探討如何在Spring Boot應用中配置和使用多數據…

oracle with as 是什么并且怎么用

Oracle中的WITH AS語句,也被稱為Common Table Expressions(CTE),是一個用于定義臨時結果集或視圖的子句。這個臨時結果集或視圖只在當前的查詢中存在,并且在查詢完成后會被自動刪除。使用WITH AS可以提高SQL語句的可讀…

JavaWeb——MySQL:navicate客戶端工具簡單使用

目錄 1. 連接 2. 新建數據庫 3. 使用數據庫 4. 新建表 5.使用表 6. 導出數據庫 我這里是英文版,沒有進行漢化。 1. 連接 點擊左上角Connection,選擇MySQL,(我連接的是自己計算機上的數據庫)連接名輸入&#x…

使用ScheduledExecutorService進行任務調度

使用ScheduledExecutorService進行任務調度 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 在軟件開發中,任務調度是一項重要的技術需求&#xff…

抖音開放平臺運營同學聯系我了,非常感謝

大家好,我是小悟 是怎么個事呢? 前幾天在對接抖音開放平臺,服務商代開發小程序里面的小程序備案,上傳備案圖片接口遇到了問題,具體的問題可詳閱【抖音開放平臺,這誰寫的,要扣績效吧】。 評論…

Zoom視頻會議的虛擬背景功能:打造個性化會議體驗

在遠程工作和在線交流日益普及的今天,視頻會議已成為連接人們的橋梁。Zoom視頻會議軟件因其出色的音視頻質量和豐富的功能而廣受歡迎。其中,虛擬背景功能是Zoom的一大亮點,它不僅能夠保護用戶隱私,還能為會議增添趣味性。本文將詳…

Java編程基本功大揭秘 | 詳解深入分析Java線程池源碼和底層原理,掌握實戰技巧【1】

詳解深入分析Java線程池源碼和底層原理 文章大綱引言Java線程池概念及重要性 ThreadPoolExecutor類的概述ThreadPoolExecutor類的基本功能和作用**基本功能****核心作用** ThreadPoolExecutor主要構造函數及其參數繼承關系鏈功能介紹ThreadPoolExecutor 構造器構造器參數構造器…

c語言自動售貨機

C語言編寫的自動售貨機程序可以模擬真實自動售貨機的基本功能&#xff0c;例如選擇商品、顯示價格、付款和找零。下面是一個簡單的示例代碼&#xff0c;展示了一個基本的自動售貨機程序&#xff1a; #include <stdio.h>// 商品結構體 typedef struct {char name[30];int…

破解對LabVIEW的偏見

LabVIEW被廣泛應用于科學研究、工程測試和自動化控制領域&#xff0c;具有專業性和高效的開發能力。盡管有人對其存在偏見&#xff0c;認為不如C語言&#xff0c;但LabVIEW的圖形化編程、強大集成能力、豐富社區支持和專業功能&#xff0c;使其在許多實際應用中表現出色。通過多…

Go語言環境安裝

Go下載地址 哪個能用用哪個。 https://go.dev/ https://golang.google.cn/&#xff08;Golang官網的官方鏡像&#xff09; Windows 使用.msi安裝包安裝 下載msi文件 安裝 雙擊運行go1.22.4.windows-amd64.msi Next 勾選I accept the terms in the License Agreement&…

收藏 | SSL證書無效的原因和解決辦法

當瀏覽器訪問一個使用SSL證書保護的網站時&#xff0c;會檢查其證書的有效性。如果發現證書存在問題&#xff0c;瀏覽器會顯示“SSL證書無效”的警告信息&#xff0c;提醒用戶存在潛在的安全風險。 “SSL證書無效”的警告可能會導致用戶離開站點&#xff08;并且永遠不會返回&…

MySQL高級-SQL優化-小結

文章目錄 1、insert 優化2、主鍵優化3、order by 優化4、group by 優化5、limit 優化6、count 優化7、update 優化 1、insert 優化 insert&#xff1a;批量插入、手動控制事務、主鍵順序插入 大批量插入&#xff1a;load data local infile 2、主鍵優化 主鍵長度盡量短、順序插…