STM32學習和實踐筆記(30):窗口看門狗(WWDG)實驗

1.WWDG介紹

1.1 WWDG簡介

? 上一章我們已經介紹了IWDG,知道它的工作原理就是一個12位遞減計數器不斷遞減計數,當減到0之前還未進行喂狗的話,產生一個MCU復位。

窗口看門狗WWDG其實和獨立看門狗類似,它是一個7位遞減計數器不斷的往下遞減計數,當減到一個固定值 0X40 時還不喂狗的話,產生一個MCU復位,這個值叫窗口的下限,是固定的值,不能改變,這個和獨立看門狗是類似的。只不過獨立看門狗是減0之前要復位,這里要在0X40之前要復位。

不同的是,窗口看門狗的計數器的值在減到某一個數之前喂狗的話也會產生復位,這個值叫窗口的上限,上限值由用戶獨立設置。窗口看門狗計數器的值必須在上窗口和下窗口之間可以刷新(喂狗),才不會產生復位。這也是窗口看門狗中“窗口”兩個字的含義。????? ?

這很容易理解,7位計數器的最大值是127,? ?窗口下限 0X40是64,這是固定的。假定我將窗口上限值設為100,那么,當窗口看門狗啟動后,它就從127開始遞減,在它減到100之前,不能去刷新也就是重新裝載100,否則會產生復位。只有在其遞減到100以下,64之前,才可以重載100。如果掉到64以下(64來還不會復位,63就復位)還沒有重載(喂狗)100,那么也會產生復位。

1.2 WWDG結構框圖

? 要更好的理解窗口看門狗,就需要了解它內部的結構

(1)標號1:WWDG時鐘(在APB1總線上,因此需要將APB1總線時鐘打開.APB1總線時鐘通常為36MHZ。)

(2)標號2:WDG預分頻器器

? 分頻后的計數器時鐘為:CK_CNT= PCLK1/4096/(2^WDGTB)。

除以4096是中文參考手冊內公式規定,沒有為什么。WDGTB叫做分頻因子,取值可以是0,1,2,3四種情況。

假定取值為0,那么2的0次方為1.CK_CNT= PCLK1/4096/1=36MHZ/4086=8.78KHZ。

3)標號3:7位遞減計數器

? 窗口看門狗的超時時間計算公式如下:

? Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /PCLK1;

? ????????Twwdg為窗口看門狗的超時時間,單位為ms。

? ????????PCLK1為APB1的時鐘頻率,最大36MHz。

? ????????WDGTB為窗口看門狗的預分頻系數。

? ????????T[5:0]為窗口看門狗的計數器低6位。

通常不使用這個公式來計算溢出時間,因為當計數由最大值0X7F(或者用戶指定某個超過0X40的值)遞減到0X40(0011 1111)時,如果我們打開了提前喚醒中斷功能,那么這時就會產生一個中斷提醒我們應該喂狗了,于是重置初值,重新開始計數。因為計到0X40時可以產生中斷,所以不需要計算溢出時間以決定在多長時間內必須喂狗。當然,計算一下,心里了解多長時間必須喂狗也是可以的。

當遞減到0X40并且產生中斷喂狗時,必須在一個計數周期內完成喂狗,否則0X40再減1,就會啟動MCU復位,程序就會重啟。

(4)標號4:看門狗配置寄存器

這個就是喂狗時設置上窗口值,其值范圍就是0X7F到0X40之間

(5)標號5:系統復位信號

2.WWDG配置步驟

? 接下來我們介紹下如何使用庫函數對WWDG進行配置。這個也是在編寫程序中必須要了解的。具體步驟如下:(WWDG相關庫函數在stm32f10x_wwdg.c和stm32f10x_wwdg.h文件中)。

1)使能WWDG時鐘

RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);

2)設置WWDG窗口值和分頻數

void WWDG_SetWindowValue(uint8_t WindowValue);

void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);

分頻系數可以為WWDG_Prescaler_1、WWDG_Prescaler_2、WWDG_Prescaler_4、W

WDG_Prescaler_8

(3)開啟WWDG中斷并分組??????????????????????????????

NVIC_Init();

WWDG_EnableIT();

(4)設置計數器初始值并使能WWDG???????????????????????????????

void WWDG_Enable(uint8_t Counter);

void WWDG_SetCounter(uint8_t Counter);

(5)編寫WWDG中斷服務函數

WWDG_IRQHandler

WWDG_ClearFlag();

3.硬件電路

? 由于WWDG是STM32內部資源,因此本硬件電路非常簡單,只有D1、D2指示燈連接,D1指示燈用來提示系統是否被復位,D2指示燈用來作為喂狗提示,每進入中斷喂狗D2指示燈狀態翻轉一次。

4.寫窗口看門狗控制程序

? 本實驗所要實現的功能是:

用D1指示燈的先亮后滅,表示系統重啟了,系統每次重啟時D1指示燈點亮500ms時間,然后熄滅。

用D2指示燈不斷翻轉閃爍來表示正在喂狗。

程序框架如下:

(1)初始化WWDG(使能WWDG時鐘,設置窗口及分頻值,使能中斷等)

(2)編寫窗口看門狗中斷函數

(3)編寫主函數

main.c

#include "system.h"
#include "led.h"
#include "SysTick.h"
#include "wwdg.h"int main()
{SysTick_Init(72);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中斷優先級分組LED_Init();led1=0;delay_ms(500);//LED1 如果沒有及時喂狗,LED就會熄滅500ms,提示系統重啟了WWDG_Init();while(1){led1=1;}
}

wwdg.c

#include "wwdg.h"
#include "led.h"
#include "SysTick.h"void WWDG_Init()
{NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);   WWDG_SetPrescaler(WWDG_Prescaler_8);WWDG_SetWindowValue(0x5f);//只有在0x5F到0x40之間喂狗,系統才不會復位,不會重啟//設置中斷優先級,使能定時器中斷通道NVIC_InitStructure.NVIC_IRQChannel=	WWDG_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =2;NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);WWDG_Enable(0x7f);//設定計數器的初值,這里設的是最大值0x7fWWDG_ClearFlag();WWDG_EnableIT();}void WWDG_IRQHandler(void)
{//delay_ms(1);//用來檢查不喂狗時的情況WWDG_SetCounter(0x7f);WWDG_ClearFlag();led2=!led2;
}

程序燒寫到開發板上運行后是正常的,實驗成功!

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

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

相關文章

Vue3在Element UI 表格中自定義時間格式化顯示

Vue3在Element UI 表格中自定義時間格式化顯示 一、前言1、準備工作2、實現步驟1. 引入 Element UI 組件2. 自定義時間格式化函數3. 格式化日期邏輯 3、完整示例4、結論 一、前言 在開發 Web 應用程序時,常常需要在表格中展示時間數據。Element UI 是一個流行的 Vu…

【Python】 如何在Python中創建GUID UUID

基本原理 GUID(全局唯一標識符)和UUID(通用唯一標識符)都是用來在分布式系統中唯一標識信息的。在Python中,我們可以使用內置的uuid模塊來生成這些唯一標識符。 UUID有幾種不同的版本,每種版本都有其特定…

軟考-必須要背的內容

一、設計模式 1、創建型 抽象工廠:提供一個接口,創建一系列的相關相互依賴的對象,無需指定具體的類; eg:系統軟件,支持多種數據庫 生成器:將一個復雜類的表示與構造相分離,使得相…

Scrapy順序執行多個爬蟲

Scrapy順序執行多個爬蟲 有兩種方式: 第一種:bat方式運行 新建bat文件 cd C:\python_web\spiders\tiktokSelenium & C: & scrapy crawl spider1 & scrapy crawl spider2 & scrapy crawl spider3 & scrapy crawl spider4 第二種&a…

IOS開發者證書快捷申請

App Uploader 在進行iOS應用開發中,可以借助appuploader輔助工具進行證書制作、上傳和安裝測試等操作。首先,您需要訪問官方網站獲取最新版本的appuploader。最新版本已經優化了與Apple賬號的登錄流程,無需支付688元,并提供了Windows版和Mac版供用戶選擇。下載完成后,解壓…

USART串口通信(stm32)

一、串口通信 通信的目的:將一個設備的數據傳送到另一個設備,擴展硬件系統 通信協議:制定通信的規則,通信雙方按照協議規則進行數據收發 STM32F103C8T6 USART資源: USART1、 USART2、 USART3 自帶波特率發生器&…

方正暢享全媒體新聞采編系統 binary.do SQL注入漏洞復現

0x01 產品簡介 方正暢享全媒體新聞生產系統是以內容資產為核心的智能化融合媒體業務平臺,融合了報、網、端、微、自媒體分發平臺等全渠道內容。該平臺由協調指揮調度、數據資源聚合、融合生產、全渠道發布、智能傳播分析、融合考核等多個平臺組成,貫穿新聞生產策、采、編、發…

【華三包過】2024年/華三H3C/云計算GB0-713

H3CNE-cloud-云計算-713 想轉行 想繼續深入 題庫覆蓋百分百,題庫有新版106道新版113道舊版88道 H3C認證云計算工程師(H3C Certified Network Engineer for Cloud,簡稱H3CNE-Cloud) 認證定位于全面掌握虛擬化技術原理及相關產品/…

半導體行業AI機器視覺的應用探討(3)-效益如何評估

作為半導體廠的IT經理,評估AI機器視覺帶來的經濟收益和管理收益是一個多維度的過程,需要綜合考慮成本節約、效率提升、質量改進等多個方面。以下是一個具體的評估方案: 1. 成本效益分析(CBA) **步驟**: - **初始投資成本**:列出所有與AI機器視覺系統相關的初始投資,包…

c++二進制輸出

輸入一個數&#xff0c;輸出n個數&#xff0c;數可以是0或1&#xff1b;輸入&#xff1a;4輸出&#xff1a;0010&#xff1b;提示&#xff1a;本題要用到rand(),srand(time(0));代碼如下&#xff1a;#include<bits/stdc.h> #include<windows.h> using namespace s…

MySQL的數據庫和表

查看數據庫 命令行的方式&#xff1a; cd /mysql/bin mysql.exe -uroot -p IP&#xff08;不是連接自己&#xff09; 端口&#xff08;不是3306&#xff09; show databases; 直接使用圖形化界面點擊&#xff1a; 查看庫里的表 使用命令行查看&#xff1a; 進入mysql數據庫 u…

JavaFX學習教程二

一、JavaFX 體系結構 JavaFX 場景圖(Scene Graph)是構建 JavaFX 應用程序的起點&#xff0c;一種樹狀數據結構&#xff0c;用于排列&#xff08;和分組&#xff09;圖形對象&#xff0c;以便于邏輯表示。 stage:舞臺&#xff0c;操作系統窗口的 JavaFX 表示&#xff0c;是所有…

Nodejs+Socket.io+Web端完成聊天

前言 源碼獲取:nodeexpresssocket.ioweb: 聊天demo (gitee.com) 目錄結構 后端依賴 啟動方式 前端是html正常啟動 后端是node app.js 后端app.js核心代碼 const express require(express) const app express() var http require(http).Server(app) var io require(so…

掌握C++回調:按值捕獲、按引用捕獲與弱引用

文章目錄 一、按引用捕獲和按值捕獲1.1 原理1.2 案例 二、弱引用2.1 原理2.2 案例一2.3 案例二&#xff1a;使用base庫的弱引用 三、總結 在C回調中&#xff0c;當使用Lambda表達式捕獲外部變量時&#xff0c;有兩種捕獲方式&#xff1a;按值捕獲和按引用捕獲。 一、按引用捕獲…

Matlab自學筆記三十:元胞數組的修改、添加、刪除和連接

1.說明 元胞數組的子數組或元素也是元胞型的&#xff0c;其元素內容&#xff08;值&#xff09;是本身類型&#xff0c;因此&#xff0c;在添、刪、改和連接處理時&#xff0c;必須明確每個元素的值的類型和大小&#xff0c;否則&#xff0c;編程報錯是不可避免的了。看本文前…

Python 點云裁剪

點云裁剪 一、介紹1.1 概念1.2 函數講解二、代碼示例2.1 代碼實現2.2 代碼講解三、結果示例一、介紹 1.1 概念 點云裁剪 :根據待裁剪對象的多邊形體積(json文件)實現點云的裁剪。 1.2 函數講解 下面代碼示例中主要用到了兩個函數。 讀取待裁剪對象的多邊形體積信息(json文…

淺談C++函數

目錄 一、函數的概念二、調用函數的兩個前提三、函數傳參的三種形式四、函數返回類型 一、函數的概念 函數是C程序的基本模塊&#xff0c;通常一個C程序由一個或多個函數組成。函數可以完成用戶指定的任務&#xff0c;一般分為庫函數和用戶自定義的函數。函數由函數頭和函數體…

先進制造aps專題六 aps軟件開發最大的難點,設備甘特圖開發

aps軟件開發最大的難點&#xff0c;設備甘特圖開發 一般認為&#xff0c;aps軟開發中&#xff0c;算法是難的&#xff0c;排程算法難&#xff0c;優化算法更難&#xff0c;但其實最大的難點是設備甘特圖開發 aps軟件設備甘特圖開發的幾個難點如下 1 和項目甘特圖一行顯示一個…

02. Flink 快速上手

02. Flink 快速上手 1、創建項目導入依賴 pom文件&#xff1a; <properties><flink.version>1.17.0</flink.version> </properties><dependency><groupId>org.apache.flink</groupId><artifactId>flink-streaming-java<…

k8s配置pods滾動發布

背景 采用微服務架構部署的應用&#xff0c;部署方式都要用到容器化部署k8s容器編排&#xff0c;最近我在公司負載的系統也是用的上述架構部署&#xff0c;但是隨著系統的運行&#xff0c;用戶提的需求就會越多&#xff0c;每次更新的話都要停機發布&#xff0c;最用戶側來說就…