STM32——獨立看門狗

文章目錄

    • 一、看門狗基礎介紹
      • (一)看門狗概述:
      • (二)看門狗的作用:
      • (三)看門狗的原理:
      • (四)為什么需要使用看門狗來提高系統的可靠性:(了解)
      • (五)硬件配置
      • (六)看門狗應用
      • (七)想了解高級功能和技巧可以參考以下方式:
    • 二、HAL庫獨立看門狗學習和時間溢出計算
    • 三、HAL庫獨立看門狗配置流程

一、看門狗基礎介紹

(一)看門狗概述:

看門狗(Watchdog)是一種用于提高系統可靠性的硬件或軟件機制。它的作用是監控系統的運行狀態,并在系統出現故障或停止響應時采取相應的措施,如復位系統或執行預定義的異常處理程序。

(二)看門狗的作用:

通過使用看門狗,系統能夠在出現故障或停止響應時快速檢測并采取措施。它可用于監控各種硬件和軟件故障,如死鎖、無限循環、崩潰等。看門狗是特別有用的,當系統處于無人監視或遠程控制的環境中時,可以確保系統自動恢復或采取適當的應對措施。

(三)看門狗的原理:

1.監控系統狀態:看門狗定時器會周期性地計數,當系統正常運行時,軟件會定期“喂狗”,即重置看門狗計數器,防止計數器溢出。如果系統在規定的時間內未能喂狗,即未能刷新看門狗計數器,說明系統可能出現了故障或停止響應。
2.超時觸發復位:看門狗定時器的計數器達到預設的閾值(重裝載值)時,會觸發看門狗超時事件。這意味著系統在規定的時間內未能喂狗,被認為是異常狀態。超時事件可以觸發復位電路,導致系統執行復位操作,將系統恢復到初始狀態。
3.系統恢復:當看門狗超時事件發生時,系統會執行相應的恢復操作。這可以包括重新初始化系統、重新加載程序或執行特定的異常處理程序,以確保系統能夠正常運行。

(四)為什么需要使用看門狗來提高系統的可靠性:(了解)

1.異常恢復:看門狗可以在系統出現異常或故障時觸發重啟操作。如果系統在運行過程中發生了死鎖、崩潰、無限循環或其他異常情況,看門狗能夠檢測到這些情況并通過重啟系統來恢復正常運行。這有助于避免系統持續處于不可用或不穩定狀態。
2.軟件故障保護:即使在軟件出現故障或異常的情況下,看門狗也能夠確保系統的可靠性。通過定期喂狗操作,軟件可以證明自己仍在正常運行。如果軟件由于某種原因無法進行喂狗操作(如死循環或異常跳轉),看門狗將檢測到這種情況并采取相應的恢復措施。
3.系統穩定性監控:看門狗可以監控系統的運行狀態和穩定性。它會定期計時,如果系統在設置的時間間隔內沒有進行喂狗操作,說明系統可能出現了故障或停滯。在這種情況下,看門狗將觸發重啟操作,以確保系統恢復到可靠的狀態。
4.預防嵌入式系統停頓:在嵌入式系統中,可能會出現一些無法預料的情況,導致系統停頓或無響應。看門狗可以幫助預防這些停頓情況的發生。通過設置適當的看門狗定時器周期和喂狗操作,可以確保系統在規定時間內持續運行,避免長時間的停頓或無響應。

(五)硬件配置

學習如何配置單片機的時鐘源和時鐘分頻器,以確保看門狗定時器的時鐘頻率正確,具體查看對應芯片的數據手冊或參考手冊,我用的是stm32f103的板子,STM32 的獨立看門狗由內部專門的 40Khz 低速時鐘驅動,即使主時鐘發生故障,它也仍然有效。這里需要注意獨立看門狗的時鐘是一個內部 RC 時鐘,所以并不是準確的 40Khz,而是在 30~60Khz 之間的一個可變化的時鐘,只是我們在估算的時候,以 40Khz 的頻率來計算,看門狗對時間的要求不是很精確,所以,時鐘有些偏差,都是可以接受的。(本段參考正點原子STM32HAL庫開發指南)
至于看門狗硬件引腳如何設置需要硬件工程師決定。

(六)看門狗應用

看門狗在實際應用中的用途,如監控系統死鎖、處理器失效等
學習如何合理設置看門狗的預分頻器和重裝載值,以達到適當的超時時間
研究如何在系統中處理看門狗復位,以確保系統能夠正確恢復并繼續正常運行

(七)想了解高級功能和技巧可以參考以下方式:

1.學習如何在看門狗定時器中斷中執行特定的操作
2.探索看門狗模塊的其他功能,如窗口模式、硬件喂狗等
3.研究如何在系統中處理看門狗異常,如故障檢測和容錯機制

二、HAL庫獨立看門狗學習和時間溢出計算

學習看門狗需要了解以下幾個寄存器
1.IWDG_KR
在這里插入圖片描述

在鍵寄存器(IWDG_KR)中寫入 0xCCCC,開始啟用獨立看門狗;此時計數器開始從其復位
值 0xFFF 遞減計數。當計數器計數到末尾 0x000 時,會產生一個復位信號(IWDG_RESET)。 無論何時,只要鍵寄存器 IWDG_KR 中被寫入 0xAAAA, IWDG_RLR 中的值就會被重新加載到計數器中從而避免產生看門狗復位。
IWDG_PR 和 IWDG_RLR 寄存器具有寫保護功能。要修改這兩個寄存器的值,必須先向
IWDG_KR 寄存器中寫入 0x5555。將其他值寫入這個寄存器將會打亂操作順序,寄存器將重新被保護。重裝載操作(即寫入 0xAAAA)也會啟動寫保護功能。
2.IWDG_PR 預分頻寄存器
該寄存器用來設置看門狗時鐘的分頻系數,最低為 4,最高位 256,該寄存器是一個 32 位的寄存器,但是我們只用了最低 3 位,其他都是保留位
在這里插入圖片描述

3.IWDG_RL重裝載寄存器
在這里插入圖片描述

4.獨立看門狗時間溢出計算

溢出時間Tout=重裝載值X看門狗時鐘周期
看門狗時鐘周期=1/(預分頻值X時鐘頻率)
預分頻值=1/(預分頻因子)

預分頻因子的確定要查看PR寄存器中的后三位,我們用的是100,對應的是64分頻因子,帶入上式子,如下所示就可以算出來溢出時間了,單位ms
在這里插入圖片描述
Ps:有同學問為什么設置500重裝載值和64預分頻因子呢?
其實是我自己在問啦哈哈哈哈哈,因為我第一次學看門狗。
很簡單,就看你要多久的溢出時間,我這個設置大概是1s溢出時間,你想改時間再設置其他數值即可!

三、HAL庫獨立看門狗配置流程

1.定義看門狗句柄

IWDG_HandleTypeDef IWDG_Handler;

2.看門狗配置初始化
分頻系數
重裝載值
看門狗初始化

void IWDG_Init(u8 prer,u16 rlr)
{IWDG_Handler.Instance=IWDG;IWDG_Handler.Init.Prescaler=prer;	//設置IWDG分頻系數IWDG_Handler.Init.Reload=rlr;		//重裝載值HAL_IWDG_Init(&IWDG_Handler);		//初始化IWDG,默認會開啟獨立看門狗	
}

3.喂狗函數

void IWDG_Feed(void)
{   HAL_IWDG_Refresh(&IWDG_Handler); 	//喂狗
}

4.While(1)按鍵喂狗

if(KEY_Scan(0)==WKUP_PRES) //如果WK_UP按下,喂狗
{
IWDG_Feed(); //喂狗
}
delay_ms(10);

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

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

相關文章

Linux 中的 rm 命令及示例

Linux 中的 rm 命令及示例 rm命令是Linux中最常見、最基礎的命令之一。即使您對 Linux 的使用經驗有限,您也很可能聽說過它。該命令的主要目的是刪除文件和目錄。使用此命令刪除文件和目錄無法撤消。 這意味著您應該謹慎使用此命令,因為如果沒有備份&am…

振南技術干貨集:制冷設備大型IoT監測項目研發紀實(5)

注解目錄 1.制冷設備的監測迫在眉睫 1.1 冷食的利潤貢獻 1.2 冷設監測系統的困難 (制冷設備對于便利店為何如何重要?了解一下你所不知道的便利店和新零售行業。關 于電力線載波通信的論戰。) 2、電路設計 2.1 防護電路 2.1.1 強電防護…

Colmap三維重建詳解與使用方法

圖片捕獲過程,請遵循以下指導方針以獲得最佳重建結果: 1 捕捉具有良好紋理的圖像。避免使用完全沒有質感的圖片(例如,白色的墻或空桌子)。如果場景本身沒有足夠的紋理,你可以放置額外的背景對象,如海報等。 2 在相似的照明條件下…

@Value和@Scheduled注解簡介

(1)SpringBoot讀取配置文件,使用Value注解獲取數據,中文亂碼問題解決辦法 new String(xxx.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8) (2)Scheduled注解 例如,Scheduled(…

前端處理返回數據為數組對象且對象嵌套數組并重名的數據,合并名稱并疊加數據

前端處理返回數據為數組對象且對象嵌套數組并重名的數據,合并名稱并疊加數據 var newList[]; var table{}; var dataObj{}; var finalList[]; var tableData[{brName:營業部,dateStr:2023-11-23,tacheArr:[{dealCnt:20,tacheName:奔馳}]},{brName:營業部,dateStr:2…

TypeError: Cannot read property ‘sendpost‘ of undefined

箭頭函數指向問題,定義let that this 解決

大寬帶服務器有什么優勢?

大寬帶服務器有什么優勢? 什么是大帶寬服務器?從屬性上看,大寬帶可以分為G口大帶寬、萬兆大帶寬等,從線路上看,可以分為電信、移動、聯通等,從地域屬性看,可以分為國內寬帶、國際寬帶。大寬帶是…

如何活躍谷歌開發者賬號,增加賬號的權重和真實性,從而延長應用在線時長?

眾所周知,每個谷歌開發者賬號都有一個初始權重,而權重的高低會影響到賬號的穩定性和真實性,從而影響應用上架的成功率和應用在線時長。 關于提高谷歌賬號權重、活躍度及穩定性,以下的方法和建議可供參考: 1、社區活動…

外設——CAN總線收發器TJA1043

目錄 1. 引腳 2. 工作模式 3. 5種模式和7種狀態標識的理解和使用 1. 引腳 2. 工作模式 該收發器相較于普通收發器,引腳多了幾個,就是功能等多了。TJA1043支持五種操作模式,就是通過控制引腳STB_N和EN來原則。五種模式: 正常模式…

OpenCV滑塊驗證碼圖像缺口位置識別

OpenCV圖像缺口位置識別 1、背景2、圖像缺口位置識別原理3、圖像缺口位置識別實現4、滑塊驗證碼HTTP圖像需要保存到本地嗎1、背景 在使用Selenium完成自動化爬蟲時,許多網站為了防止機器人爬取數據會使用驗證碼(例如滑塊驗證碼)。通過Selenium動作操作,爬蟲可以模擬用戶輸入…

前端工程、靜態代碼、Html頁面 打包成nginx 的 docker鏡像

1. 創建一個 mynginx的目錄 2. 將前端代碼文件夾(比如叫 front )復制到 mynginx 目錄下 3. 在mynginx 目錄下創建一個名為Dockerfile 的文件(文件名不要改),文件內容如下: # 使用官方的 Nginx 鏡像作為基…

神經網絡訓練技巧

1. 逐漸增加訓練數據規模,比如先在小數據集上訓練,之后再增大數據集繼續訓練。

網站權重是什么意思

網站權重是指搜索引擎對網站的評估指標,用以衡量網站的重要性 搜索引擎會根據網站權重來決定網站在搜索結果中的排名和位置,從而決定其在搜索中的可見度 網站權重是多方面因素的綜合評估,其中主要包括網站內容質量、外部鏈接量及質量、網站…

JS逆向之wasm逆向(二)

本文僅供技術交流和技術學習 不做其他用途 接著上一篇繼續講: 上篇地址: JS逆向之wasm逆向(二進制) 網址: aHR0cHM6Ly93d3cuN3E2Y3lqLmNvbTo5MDAxL3JlZ2lzdGVyNDY5Njg/aV9jb2RlPTQ0Mjc5OTU1 這個網站我們后面可以繼續講他的debugger 和滑塊…

[點云分割] Clustering of Pointclouds into Supervoxels

介紹 “Clustering of Pointclouds into Supervoxels” 是一種點云數據聚類的方法,用于將點云數據分割成具有相似特征的超體素(supervoxel)。 超體素是一種在點云數據中表示連續區域的方法,類似于像素在圖像中表示連續區域。超體…

C 語言 http通信

1,C語言本身不包含直接支持HTTP協議的功能,但你可以使用第三方庫來實現HTTP客戶端或服務器。 以下是一些常用的C語言HTTP庫: libcurl:一個支持多種協議的開源庫,包括HTTP、HTTPS、FTP等。它提供了一組簡單的API&…

因果發現31種高效經典方案匯總,附配套算法和代碼

因果發現(Causal Discovery)是一個復雜的過程,其目標是從大量的數據中確定變量之間的因果關系。這個過程通常涉及到的是如何從紛繁復雜的數據中發現其中隱含的因果關系。有時,研究者可以通過隨機實驗進行干預來發現因果關系&#…

解決PDF預覽時,電子簽章、日期等不顯示問題

文章目錄 問題描述問題排查問題解決 問題描述 在預覽PDF時,部分簽章或控件沒有顯示。如下圖: 正確應該要這樣: 問題排查 根據網上搜索,排查,我先看看,pdf.worker.js 里的這三行代碼,是否已經注…

JVM 類加載

① 類加載過程 從上面的圖片我們可以看出整個 JVM 執行的流程中,和程序員關系最密切的就是類加載的過程了,所以 接下來我們來看下類加載的執行流程。 對于一個類來說,它的生命周期是這樣的: 其中前 5 步是固定的順序并且也是類加載…

Android : Spinner(列表選項框) + BaseAdapter -簡單應用

??容器與適配器:????? http://t.csdnimg.cn/ZfAJ7 示例圖: 實體類 Demo.java package com.example.mygridviewadapter.entity;public class Demo {private String text;private int img;public Demo(String text, int img) {this.text…