12、窗口看門狗

目錄

1、窗口看門狗概述

2、常用寄存器和庫函數配置

3、窗口看門狗實驗


1、窗口看門狗概述

之所以稱為窗口就是因為其喂狗時間是一個有上下限的范圍內(窗口),你可以通過設定相關寄存器,設定其上限時間(下限固定)。喂狗的時間不能過早也不能過晚。

獨立看門狗限制喂狗時間在0-x內,x由相關寄存器決定。喂狗的時間不能過晚。

窗口看門狗工作示意圖:

?窗口看門狗工作過程總結:

STM32F的窗口看門狗中有一個7位的遞減計數器T[6:0],它會在出現下述2種情況之一時產生看門狗復位:

  • 當喂狗的時候如果計數器的值大于某一設定數值W[6:0]時,此設定數值在WWDG_CFG寄存器定義。
  • 當計數器的數值從0x40減到0x3F時[T6位跳變到0]。

如果啟動了看門狗并且允許中斷,當遞減計數器等于0x40時產生早期喚醒中斷(EWI),它可以用于喂狗以避免WWDG復位。

為什么要窗口看門狗:

對于一般的看門狗,程序可以在它產生復位前的任意時刻刷新看門狗,但這有一個隱患,有可能程序跑亂了又跑回到正常的地方,或跑亂的程序正好執行到了刷新看門狗操作,這樣的情況下一般的看門狗就檢測不出來了。

如果使用窗口看門狗,程序員可以根據程序正常執行的時間設置刷新看門狗的一個時間窗口,保證不會提前刷新看門狗也不會滯后刷新看門狗,這樣可以檢測出程序沒有按照正常的路徑運行非正常地跳過了某些程序段的情況。

窗口看門狗其他注意事項:

  • 上窗口值W[6:0]必須大于下窗口0x40.否則就無窗口了。
  • 窗口看門狗時鐘來源PCLK1(APB1總線時鐘)分頻后。
2、常用寄存器和庫函數配置
  • 控制寄存器WWDG_CR
  • 配置寄存器WWDG_CFR
  • 狀態寄存器WWDG_SR

窗口看門狗配置過程:

  • 使能看門狗時鐘
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE); //使能窗口看門狗時鐘
  • 設置分頻系數
    WWDG_SetPrescaler(fprer); //設置分頻值
  • 設置上窗口值
    WWDG_SetWindowValue(wr); //設置窗口值
  • 開啟提前喚醒中斷并分組(可選)
    WWDG_EnableIT();//開啟提前喚醒中斷NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn;  //窗口看門狗中斷
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02;  //搶占優先級為2
    NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;					//子優先級為3
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;  //使能窗口看門狗
    NVIC_Init(&NVIC_InitStructure);
  • 使能看門狗
    WWDG_Enable(WWDG_CNT);  //開啟看門狗
  • 喂狗
    WWDG_SetCounter(WWDG_CNT); //重設窗口看門狗值
  • 編寫中斷服務函數
    //窗口看門狗中斷服務程序 
    void WWDG_IRQHandler(void)
    {WWDG_SetCounter(WWDG_CNT); //重設窗口看門狗值WWDG_ClearFlag();//清除提前喚醒中斷標志位LED1=!LED1;
    }
3、窗口看門狗實驗

main.c

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "beep.h"
#include "key.h"
#include "wwdg.h"//ALIENTEK 探索者STM32F407開發板 實驗7
//窗口看門狗實驗 -庫函數版本
//技術支持:www.openedv.com
//淘寶店鋪:http://eboard.taobao.com
//廣州市星翼電子科技有限公司    
//作者:正點原子 @ALIENTEK int main(void)
{ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2delay_init(168);  //初始化延時函數LED_Init();				//初始化LED端口KEY_Init();		  	//初始化按鍵LED0=0;				   //點亮LED0delay_ms(300);WWDG_Init(0x7F,0X5F,WWDG_Prescaler_8); 	//計數器值為7f,窗口寄存器為5f,分頻數為8	   while(1){LED0=1;  //熄滅LED燈}
}

wwdg.c

#include "wwdg.h"
#include "led.h"
//	 
//本程序只供學習使用,未經作者許可,不得用于其它任何用途
//ALIENTEK STM32F407開發板
//看門狗 驅動代碼	   
//正點原子@ALIENTEK
//技術論壇:www.openedv.com
//創建日期:2014/6/12
//版本:V1.0
//版權所有,盜版必究。
//Copyright(C) 廣州市星翼電子科技有限公司 2014-2024
//All rights reserved				
//********************************************************************************
//V1.1 20140504
//增加了窗口看門狗相關函數。
// //保存WWDG計數器的設置值,默認為最大. 
u8 WWDG_CNT=0X7F;
//初始化窗口看門狗 	
//tr   :T[6:0],計數器值 
//wr   :W[6:0],窗口值 
//fprer:分頻系數(WDGTB),僅最低2位有效 
//Fwwdg=PCLK1/(4096*2^fprer). 一般PCLK1=42Mhz
void WWDG_Init(u8 tr,u8 wr,u32 fprer)
{NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE); //使能窗口看門狗時鐘WWDG_CNT=tr&WWDG_CNT;   //初始化WWDG_CNT. WWDG_SetPrescaler(fprer); //設置分頻值WWDG_SetWindowValue(wr); //設置窗口值
//	WWDG_SetCounter(WWDG_CNT);//設置計數值WWDG_Enable(WWDG_CNT);  //開啟看門狗NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn;  //窗口看門狗中斷NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02;  //搶占優先級為2NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;					//子優先級為3NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;  //使能窗口看門狗NVIC_Init(&NVIC_InitStructure);WWDG_ClearFlag();//清除提前喚醒中斷標志位WWDG_EnableIT();//開啟提前喚醒中斷
}//窗口看門狗中斷服務程序 
void WWDG_IRQHandler(void)
{WWDG_SetCounter(WWDG_CNT); //重設窗口看門狗值WWDG_ClearFlag();//清除提前喚醒中斷標志位LED1=!LED1;
}

效果視頻:

7、窗口看門狗實驗

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

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

相關文章

數據結構 棧和隊列 力扣例題AC——代碼以及思路記錄

20. 有效的括號 給定一個只包括 (,),{,},[,] 的字符串 s ,判斷字符串是否有效。 有效字符串需滿足: 左括號必須用相同類型的右括號閉合。左括號必須以正確的順序閉合。每個右括號都有一個對應…

mysql使用連接池

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、mysql連接池?二、使用步驟1.引入庫 前言 提示:這里可以添加本文要記錄的大概內容: 例如: 提示&#xff1a…

深入理解Flutter中的StreamSubscription和StreamController

在Flutter中,StreamSubscription和StreamController是處理異步數據流的重要工具。它們提供了一種方便的方式來處理來自異步事件源的數據。本文將深入探討它們的區別以及在實際應用中的使用場景。 StreamSubscription StreamSubscription代表了對數據流的訂閱&…

代碼隨想錄算法訓練營番外 刷題日記0301 || 29、兩數相除,31、下一個排列

29、兩數相除 思路:不斷相減就是求解的最直接方法,我這樣計算時間復雜度有點高 // 時間復雜度O(count*divisor) // 空間復雜度O(1)class Solution {int res 0;public int divide(int dividend, int divisor) {// dividend 是被除數if(dividend 0) …

技術棧選型的時候,ruby、go、java、vue、react應該怎么選擇?

選擇適合項目需求、團隊技術背景和偏好、開發速度、性能要求以及可擴展性的技術棧和框架是一個綜合考慮的過程,沒有一種通用的最佳選擇,取決于具體情況。 選擇Vue.js或React應該綜合考慮項目的需求、團隊的技術背景和偏好、生態系統的支持和發展趨勢等因…

隨記-點選驗證碼

文字驗證碼(點擊文字) 模板匹配(從一張圖片中尋找 icon),放棄,目前準確率不高,且處理過程復雜 灰度處理將 complete_image_path 截取并另存為 target_image_path, verify_image_path…

WPF真入門教程30--順風物流單據管理系統

1、教程回顧 到現在為止,真入門系列教程已完成了29刺由淺入深地講解,當然不可能講到了WPF的所有技能點,但讀者看到了wpf的內部各種功能及之間的聯系,在此基礎上,提供一個完整有效的綜合項目,本項目采用的是…

c++知識點之 --this

在成員函數中存在。struct和class每個成員函數都隱含一個名為this的指針形參,并且它是該成員函數的第一個參數,當某個對象調用成員函數時,就會把該對象的地址傳給被調用成員函數的隱式形參this。 this是一個指針 ,存放的是當前對象…

加密與安全_深入了解Hmac算法(消息認證碼)

文章目錄 PreHMAC概述常見的Hmac算法Code隨機的key的生成 KeyGeneratorHmacMD5用Hmac算法取代原有的自定義的加鹽算法 HmacMD5 VS MD5HmacSHA256 Pre 加密與安全_深入了解哈希算法中我們提到, 存儲用戶的哈希口令時,要加鹽存儲,目的就在于抵…

操作系統系列學習——CPU管理的直觀想法

文章目錄 前言CPU管理的直觀想法 前言 一個本碩雙非的小菜雞,備戰24年秋招,計劃學習操作系統并完成6.0S81,加油! 本文總結自B站【哈工大】操作系統 李治軍(全32講) 老師課程講的非常好,感謝 【…

OpenLayers線性漸變和中心漸變(徑向漸變)

目錄 1.前言2.添加一個面要素3.線性漸變3.1 第一個注意點3.2 第二個注意點 4.中心漸變(徑向漸變)5.總結 1.前言 OpenLayers官網有整個圖層的漸變示例,但是沒有單個要素的漸變示例,我們這里來補充一下。OpenLayers中的漸變是通過fi…

python defaultdict

python中的dict是一個重要的數據類型,知道如何使用這個數據類型很簡單,但是這個類型使用過程中容易進入一些誤區,這篇文章主要對defaultdict方法的講解,深入的了解dict數據類型。 字典(dictionary)數據類型…

編譯鏈接實戰(22)C/C++代碼覆蓋率統計報告生成

文章目錄 GCOV 工具簡介gcov 使用lcov相關編譯選項 GCOV 工具簡介 gcov是一個測試代碼覆蓋率的工具,它是 gcc 自帶的查看代碼覆蓋率的工具。 與GCC結合使用,可以分析您的程序以幫助創建更高效、運行更快的代碼,并發現程序中未經測試的部分。…

PCIE 4.0 L0s/L1/L2

L0是PCIE設備正常工作的狀態,當設備鏈路處于非工作狀態可以跳轉大相應的低功耗狀態,L0s是一種可以快速恢復到L0的低功耗狀態;L1必須經過Reovery狀態才可以恢復到L0狀態;L2需要從Detect開始逐步進入到L0狀態。它們的恢復時間依次延…

麒麟銀河操作系統V10部署ffmpeg(也能用于Linux系統)

麒麟銀河操作系統V10部署ffmpeg(也能用于Linux系統) 部署ffmpeg用來處理視頻的各種操作 想使用ffmpeg,要先安裝nasm,yasm,x264之后,否則會報錯 nkvers 查看麒麟操作系統版本 cat /proc/version #查看linux版本信息 uname -a …

Android修行手冊-Chaquopy中opencv、numpy的初步應用

Unity3D特效百例案例項目實戰源碼Android-Unity實戰問題匯總游戲腳本-輔助自動化Android控件全解手冊再戰Android系列Scratch編程案例軟考全系列Unity3D學習專欄藍橋系列ChatGPT和AIGC 👉關于作者 專注于Android/Unity和各種游戲開發技巧,以及各種資源分…

SpringBoot源碼解讀與原理分析(三十八)SpringBoot整合WebFlux(一)WebFlux的自動裝配

文章目錄 前言第13章 SpringBoot整合WebFlux13.1 響應式編程與Reactor13.1.1 命令式與響應式13.1.2 異步非阻塞13.1.3 觀察者模式13.1.4 響應性13.1.5 響應式流13.1.6 背壓13.1.7 Reactor13.1.7.1 Publisher13.1.7.2 Subscriber13.1.7.3 Subscription13.1.7.4 Processor13.1.7.…

BF算法實現(Python,C++)

BF算法,即暴力(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是將目標串S的第一個字符與模式串T的第一個字符進行匹配,若相等,則繼續比較S的第二個字符和 T的第二個字符;若不相等,則比…

Leetcoder Day32| 貪心算法part05

763.劃分字母區間 字符串 S 由小寫字母組成。我們要把這個字符串劃分為盡可能多的片段,同一字母最多出現在一個片段中。返回一個表示每個字符串片段的長度的列表。 示例: 輸入:S "ababcbacadefegdehijhklij"輸出:[9,7…

今日早報 每日精選15條新聞簡報 每天一分鐘 知曉天下事 3月2日,星期六

每天一分鐘,知曉天下事! 2024年3月2日 星期六 農歷正月廿二 1、 氣象局:3月份仍有5次冷空氣影響我國;全國多地或提前入春。 2、 央行:將外籍來華人員移動支付單筆交易限額由1000美元提高到5000美元。 3、 神舟十七號航…