STM32-筆記26-WWDG窗口看門狗

一、簡介

????????窗口看門狗用于監測單片機程序運行時效是否精準,主要檢測軟件異常,一般用于需要精準檢測程序運行時間的場合。????????

????????窗口看門狗的本質是一個能產生系統復位信號提前喚醒中斷的6位計數器(有的地方說7位。其實都無所謂,本質是一樣的)。

??????? 產生復位條件:

  • 當遞減計數器值從 0x40 減到 0x3F 時復位(即T6位跳變到0)
  • 計數器的值大于 W[6:0] 值時喂狗會復位。

????????產生中斷條件:

  • 當遞減計數器等于 0x40 時可產生提前喚醒中斷 (EWI)。

在窗口期內重裝載計數器的值,防止復位,也就是所謂的喂狗。

二、WWDG工作原理及框圖

?三、WWDG寄存器及函數介紹

????????窗口看門狗內有一個7位的遞減計數器,并可以設置成自由運行。它可以被當成看門狗用于在發生問題時復位整個系統。它由主時鐘驅動,具有早期預警中斷功能;在調試模式下,計數器可以被凍結。

3.1 控制寄存器

3.2 配置寄存器

3.3 狀態寄存器

3.4 寄存器映像

3.5 函數

?等......

配置步驟

四、WWDG溢出時間計算

在上面的超時公式中:周期(時間 = Tpclk1) = 頻率的倒數 =?PCLK1(頻率)

4096 * 2^WDGTB / PCLK1? = 數一個數的時間單位是ms

PCLK1 = 36MHZ( 常等于)

(T[5:0]+1) = 個數

五、看門狗實驗

5.1 實驗目的

????????開啟窗口看門狗,計數器值設置為 0X7F ,窗口值設置為 0X5F ,預分頻系數為 8 。在 while 循環里喂狗,同時翻轉 LED1 狀態;在提前喚醒中斷服務函數進行喂狗,同時翻轉 LED2 狀態。

這里設置的窗口上限值為:

從開始計數,到記完數要復位的地方,也就是0X7F - 0X3F這段記58.25ms

復制項目文件夾19-串口打印功能,重命名位28-WWDG窗口看門狗

新建文件夾wwdg

打開項目

加載文件

加入wwdg驅動文件

代碼:

main.c

#include "sys.h"
#include "delay.h"
#include "led.h"
#include "uart1.h"
#include "wwdg.h"int main(void)
{HAL_Init();                         /* 初始化HAL庫 */stm32_clock_init(RCC_PLL_MUL9); /* 設置時鐘, 72Mhz */led_init();//初始化led燈uart1_init(115200);wwdg_init(0x7f,0x5f,WWDG_PRESCALER_8);printf("hello word!\r\n");if(__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) != RESET){printf("窗口看門狗復位!\r\n");__HAL_RCC_CLEAR_RESET_FLAGS();}elseprintf("外部復位!\r\n");while(1){ 
//        delay_ms(50);
//        wwdg_feed();
//        led1_Toggle();}
}

wwdg.c

#include "wwdg.h"
#include "led.h"WWDG_HandleTypeDef wwdg_handle = {0};//初始化窗口看門狗函數
void wwdg_init(uint8_t tr,uint8_t wr,uint32_t psc)
{wwdg_handle.Instance = WWDG;wwdg_handle.Init.Counter = tr;//計數器的值wwdg_handle.Init.Prescaler = psc;//預分頻系數wwdg_handle.Init.Window = wr;//窗口上限值wwdg_handle.Init.EWIMode = WWDG_EWI_ENABLE;//窗口看門狗早期喚醒啟用HAL_WWDG_Init(&wwdg_handle);
}//msp函數初始化
void HAL_WWDG_MspInit(WWDG_HandleTypeDef *hwwdg)
{__HAL_RCC_WWDG_CLK_ENABLE();HAL_NVIC_SetPriority(WWDG_IRQn,2,2);//搶占優先級和響應優先級HAL_NVIC_EnableIRQ(WWDG_IRQn);
}//中斷服務函數
void WWDG_IRQHandler(void)
{HAL_WWDG_IRQHandler(&wwdg_handle);
}//提前喚醒回調函數
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{//wwdg_feed();led2_Toggle();
}//喂狗函數
void wwdg_feed(void)
{HAL_WWDG_Refresh(&wwdg_handle);
}

wwdg.h

#ifndef __WWDG_H__
#define __WWDG_H__#include "sys.h"void wwdg_init(uint8_t tr,uint8_t wr,uint32_t psc);
void wwdg_feed(void);#endif

5.2 出現的結果

5.2.1 檢驗出現的結果1

當主函數為下面這段代碼時,出現的結果是:

#include "sys.h"
#include "delay.h"
#include "led.h"
#include "uart1.h"
#include "wwdg.h"int main(void)
{HAL_Init();                         /* 初始化HAL庫 */stm32_clock_init(RCC_PLL_MUL9); /* 設置時鐘, 72Mhz */led_init();//初始化led燈uart1_init(115200);wwdg_init(0x7f,0x5f,WWDG_PRESCALER_8);printf("hello word!\r\n");while(1){ }
}

此時wwdg.c文件中,有喂狗操作。

串口窗口顯示結果為

并且開發板LED2瘋狂閃爍,表示在喚醒回調函數中成功喂狗

5.2.2 檢驗出現的結果2

當主函數為下面代碼時:

此時wwdg.c文件中,有喂狗操作。

串口窗口顯示結果為

并且開發板LED2瘋狂閃爍,表示由外部復位,并且在此時成功喂狗

5.2.3 檢驗出現的結果3

主函數代碼不變,wwdg.c文件如下圖所示:

串口窗口顯示結果為

并且開發板LED2瘋狂閃爍,表示此時沒有喂狗,看數數溢出由,窗口看門狗是否復位

5.2.4 檢驗出現的結果4

主函數代碼如下圖所示:

wwdg.c文件代碼如下:

串口窗口顯示結果為

LED1瘋狂閃爍,這個時候延遲10ms喂狗的,此時喂狗在窗口期前,這個時候數數溢出由看門狗會復位

5.2.5 檢驗出現的結果5

主函數代碼如下:

串口窗口顯示如下:

LED1瘋狂閃爍,在while函數中喂狗成功

5.3 關于疑問

在wwdg.c文件中,psc預分頻器的定義,這里使用的是uint16_t,沒有報錯

我的理解是:4096 * 8 = 32768 = 1000 0000 0000 0000,十六位夠用

這里如果定義的是uint8,則會報錯,如下圖所示:

翻譯如下:

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

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

相關文章

ARM CCA機密計算安全模型之固件更新

安全之安全(security)博客目錄導讀 目錄 1、遠程更新 2、本地更新 3、魯棒性 1、遠程更新 Arm歡迎關于CCA固件更新需求的反饋。一般而言,CCA固件更新過程可以描述如下: CCA固件更新客戶端使用固件更新協議與遠程更新服務通信。CCA固件更新客戶端將…

Assimp的ReadFileFromMemory函數踩坑

使用ReadFileFromMemory函數加載模型的問題 使用ReadFileFromMemory函數無法加載obj和md3等模型數據分散在多個文件中的模型。obj模型通常有一部分數據(如紋理數據)在mtl文件中保存,如果只把obj文件加載到內存中,并通過ReadFileF…

機組的概述

計算機系統組成 硬件系統和軟件系統 計算機硬件 1.馮諾依曼機基本思想 特點 1.采用“存儲程序”工作方式 2.硬件系統由運算器,存儲器,控制器,輸入輸出設備組成 3.指令和數據存在存儲器中,形式無區別 4.指令和數據用二進制代…

后端開發入門超完整速成路線(算法篇)

引言 后端開發是軟件開發中不可或缺的一部分,它涉及到服務器、數據庫、API等核心組件的構建和維護。對于初學者來說,掌握算法和數據結構是進入后端開發領域的基礎。本文將為你提供一個超完整的算法學習路線,幫助你快速入門,并在文…

主鍵有多種設計

1. 自增ID id bigint NOT NULL AUTO_INCREMENT COMMENT 主鍵ID 優點: 簡單直觀自動生成遞增有序,對索引友好 缺點: 可能暴露業務信息分布式系統下需要特殊處理合并數據時可能沖突 2. UUID/GUID id char(36) NOT NULL COMMENT 主鍵ID …

【面試】后端開發面試中常見數據結構及應用場景、原理總結

在后端開發面試中,常見的數據結構包括數組、鏈表、棧、隊列、二叉樹、平衡樹、堆、圖和哈希表等。以下是這些數據結構的總結,包括它們的應用場景、優缺點。 常見數據結構及其應用場景 數據結構應用場景數組存儲固定大小的數據集合,如學生成…

TypyScript從入門到精通

TypyScript從入門到精通 TypyScript 是什么?增加了什么環境搭建二、為何需要 TypeScript三、編譯 TypeScript四、類型聲明五、類型推斷基本類型六、類型總覽JavaScript 中的數據類型TypeScript 中的數據類型1. 上述所有 JavaScript 類型2. 六個新類型:3.…

Tableau數據可視化與儀表盤搭建-安裝教程

下載 tableau.com/zh-cn/support/releases 滾動到最下方的下載 在下載的同時 我們點擊登錄,去注冊一個tableau的賬號 下面點擊我們下載好的tableau安裝程序 不要自定義安裝,會有路徑問題 點擊試用14天 點擊激活 激活學生 tableau.com/zh-cn/academic…

049_小馳私房菜_MTK Camera debug,通過adb 命令讀寫Camera sensor寄存器地址的值

一、讀取/寫入 某個寄存器地址的值 設備先adb root 1)讀取寄存器地址的值 /proc/driver # echo "0x0a34" > camsensor && dmesg |grep -i a34 2)往寄存器地址寫值 /proc/driver # echo "0x3304 0x66” > camsensor && dmesg |grep -…

Scala_【4】流程控制

第四章 分支控制if-else單分支雙分支多分支返回值嵌套分支 For循環控制包含邊界不包含邊界循環守衛循環步長嵌套循環循環返回值 While循環Break友情鏈接 分支控制if-else 單分支 雙分支 多分支 返回值 嵌套分支 For循環控制 Scala也為for循環這一常見的控制結構提供了非常多的…

Flink源碼解析之:Flink On Yarn模式任務提交部署過程解析

Flink源碼解析之:Flink On Yarn模式任務提交部署過程解析 一、Flink on Yarn部署模式概述 Apache Hadoop YARN 在許多數據處理框架中都很流行。 Flink 服務提交給 YARN 的 ResourceManager,后者會在 YARN NodeManagers 管理的機器上生成容器。 Flink 將…

Backend - C# 的日志 NLog日志

目錄 一、注入依賴和使用 logger 二、配置記錄文件 1.安裝插件 NLog 2.創建 nlog.config 配置文件 3. Programs配置日志信息 4. 設置 appsettings.json 的 LogLevel 5. 日志設定文件和日志級別的優先級 (1)常見的日志級別優先級 (2&…

ESP32自動下載電路分享

下面是一個ESP32系列或者ESP8266等電路的一個自動下載電路 在ESP32等模塊需要燒寫程序的時候,需要通過將EN引腳更改為低電平并將IO0引腳設置為低電平來切換到燒寫模式。 有時候也會采用先將IO接到一個按鍵上,按住按鍵拉低IO0的同時重新上電的方式進入燒寫…

QML自定義數值編輯框SpinBox樣式

代碼展示 import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 2.1Window {visible: truewidth: 640height: 480title: qsTr("Hello World")SpinBox {id: controlvalue: 50editable: truecontentItem: TextInput {z: 2text: control.textFromVal…

魅族手機調用tts失敗解決

安裝了閱讀、MultiTTS之后,發現閱讀的時候一直tts初始化失敗,換了多個tts軟件也不行。。。 解決方法:tts軟件設置后臺運行權限 打開“手機管家”權限管理后臺管理找到自己安裝的tts軟件(比如我是MultiTTS)&#xff0c…

1-markdown轉網頁樣式頁面 --[制作網頁模板] 【測試代碼下載】

markdown轉網頁 將Markdown轉換為帶有樣式的網頁頁面通常涉及以下幾個步驟:首先,需要使用Markdown解析器將Markdown文本轉換為HTML;其次,應用CSS樣式來美化HTML內容。此外,還可以加入JavaScript以增加交互性。下面我將…

Eplan 項目結構(高層代號、安裝地點、位置代號)

Eplan中的項目結構分為3個層次: (1)功能面結構。指明這個系統的功能,有什么用途。在EPlan中,指的就是"高層代號()"。 一般指的是線體。 (2)位置面結構。指明該…

《Armv8-A virtualization》學習筆記

1.MAIR 的全稱是 Memory Attribute Indirection Register。它是ARM架構中的一種寄存器,用于定義內存的屬性,并提供一種間接訪問內存屬性的機制。MAIR寄存器包含多個字段,這些字段指示不同類型內存的屬性,例如是否可以緩存、是否為…

NLP 復習大綱

CH3 激活函數意義 增強網絡表達能力,引入非線性因素 連續可導的非線性函數 盡可能簡單 導數的值域要在合適的范圍內 為什么會發生梯度消失 誤差傳播的迭代公式為: 其中需要用到激活函數的導數,而激活函數的導數值小于1時,誤差經過…

如何使用OBS Studio錄制屏幕?

可以進入官網或github進行下載: https://obsproject.com/download 安裝包解壓后進入bin 進入64-bit 選擇obs 64 進入OBS Studio后在來源內右鍵,選擇添加 選擇添加顯示器采集即可錄取整個屏幕,窗口采集可選擇窗口進行錄制 選擇對應顯示器即配置…