單片機系統在外界的干擾下會出現程序跑飛的現象導致出現死循環,看門狗電路就是為了避免這種情況的發生。看門狗的作用就是在一定時間內(通過定時計數器實現)沒有接收喂狗信號(表示 MCU 已經掛了),便實現處理器的自動復位重啟(發送復位信號)。
STM32的看門狗
STM32芯片一共有兩個看門狗,一個是獨立看門狗(IWDG),另一個是窗體看門狗(WWDG)
先來講講獨立看門狗:
STM32 的獨立看門狗由內部專門的 40Khz 低速時鐘驅動,即使主時鐘發生故障,它也仍然有效。這里需要注意獨立看門狗的時鐘是一個內部 RC 時鐘,所以并不是準確的 40Khz,而是在 30~60Khz 之間的一個可變化的時鐘,只是我們在估算的時候,以 40Khz 的頻率來計算,看門狗對時間的要求不是很精確,所以,時鐘有些偏差,都是可以接受的。獨立看門狗有自由運行的遞減計數器
獨立看門狗的時鐘由獨立的RC振蕩器提供(可在停止和待機模式下工作)
獨立看門狗被激活后,則在計數器計數至0x000時產生復位
獨立看門狗的配置工作代碼:
1 void IWDG_Init(u8 prer,u16 rlr)
2 {
3 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //①使能對寄存器 I 寫操作
4 IWDG_SetPrescaler(prer); //②設置 IWDG 預分頻值:設置 IWDG 預分頻值
5 IWDG_SetReload(rlr); //②設置 IWDG 重裝載值,注意不能大于0xfff
6 IWDG_ReloadCounter(); //③按照 IWDG 重裝載寄存器的值重裝載 IWDG 計數器
7 IWDG_Enable(); //④使能 IWDG
8 }
9 //喂獨立看門狗
10 void IWDG_Feed(void)
11 {
12 IWDG_ReloadCounter();//reload
13 }
主邏輯區代碼:
1 delay_init();//延時函數初始化
2 NVIC_Configuration(); //設置 NVIC 中斷分組 2:2 位搶占優先級,2 位響應優先級
3 KEY_Init(); //按鍵初始化
4 IWDG_Init(4,625); //與分頻數為 64,重載值為 625,溢出時間為 1s
5 while(1)
6 {
7 if(KEY_Scan(0)==KEY_UP)
8 {
9 IWDG_Feed(); //如果 按鍵按下,則喂狗
10 }
11 delay_ms(10);
12 }
再來看看窗體看門狗
窗口看門狗(WWDG)通常被用來監測由外部干擾或不可預見的邏輯條件造成的應用程序背離正常的運行序列而產生的軟件故障。除非遞減計數器的值在 T6 位(WWDG->CR 的第六位)變成 0 前被刷新,看門狗電路在達到預置的時間周期時,會產生一個 MCU 復位。在遞減計數器達到窗口配置寄存器(WWDG->CFR)數值之前,如果 7 位的遞減計數器數值(在控制寄存器中)被刷新, 那么也將產生一個 MCU 復位。這表明遞減計數器需要在一個有限的時間窗口中被刷新。條件復位
─當遞減計數器的值小于0x40,(若看門狗被啟動)則產生復位。
─當遞減計數器在窗口外被重新裝載,(若看門狗被啟動)則產生復位。
如果啟動了看門狗并且允許中斷,當遞減計數器等于0x40時產生早期喚醒中斷(EWI),它可以被用于重裝載計數器以避免WWDG復位
看門狗時間計算公式:
窗口看門狗的超時公式如下:
Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /Fpclk1;
其中:
Twwdg:WWDG 超時時間(單位為 ms)
Fpclk1:APB1 的時鐘頻率(單位為 Khz)
WDGTB:WWDG 的預分頻系數
T[5:0]:窗口看門狗的計數器低 6 位
窗口看門狗的配置工作代碼:
1 void WWDG_Init(u8 tr,u8 wr,u32 fprer)
2 {
3 RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG 時鐘使能
4 WWDG_CNT=tr&WWDG_CNT; //初始化 WWDG_CNT.
5 WWDG_SetPrescaler(fprer); //設置 IWDG 預分頻值
6 WWDG_SetWindowValue(wr); //設置窗口值
7 WWDG_Enable(WWDG_CNT);
8 //使能看門狗,設置 counter
9 WWDG_ClearFlag(); //清除提前喚醒中斷標志位
10 WWDG_NVIC_Init(); //初始化窗口看門狗 NVIC
11 WWDG_EnableIT(); //開啟窗口看門狗中斷
12 }
13 //重設置 WWDG 計數器的值
14 void WWDG_Set_Counter(u8 cnt)
15 {
16 WWDG_Enable(cnt); //使能看門狗,設置 counter .
17 }
18 //窗口看門狗中斷服務程序
19 void WWDG_NVIC_Init()
20 {
21 NVIC_InitTypeDef NVIC_InitStructure;
22 NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn; //WWDG 中斷
23 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //搶占 2 子優先級 3 組 2
24 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //搶占 2,子優先級 3,組 2
25 NVIC_Init(&NVIC_InitStructure); //NVIC 初始化
26 }
27 void WWDG_IRQHandler(void)
28 {
29 WWDG_SetCounter(WWDG_CNT);
30 //當禁掉此句后,窗口看門狗將產生復位
31 WWDG_ClearFlag();
32 //清除提前喚醒中斷標志位
33 LED1=!LED1;
34 //LED 狀態翻轉
35 }
主邏輯區代碼:
1 int main(void)
2 {
3 delay_init();//延時函數初始化
4 NVIC_Configuration(); //設置 NVIC 中斷分組 2
5 usart1_init();串口1初始化
6 LED_Init(); //LED 初始化
7 KEY_Init(); //按鍵初始化
8 LED0=0;
9 delay_ms(500);
10 WWDG_Init(0X7F,0X5F,WWDG_Prescaler_8);//計數器值為 7f,窗口寄存器為 5f,//分頻數為 8
11 while(1)
12 {
13 LED0=1;
14 }
15 }
使用區別
再來分析一下獨立看門狗(IWDG)和窗體看門狗(WWDG)的區別:
(1)獨立看門狗沒有中斷,窗口看門狗有中斷
(2)獨立看門狗有硬件軟件之分,窗口看門狗只能軟件控制
(3)獨立看門狗只有下限,窗口看門狗又下限和上限
(4)獨立看門狗是12位遞減的。窗口看門狗是7位遞減的
(5)獨立看門狗是用的內部的大約40KHZ RC振蕩器,窗口看門狗是用的系統時鐘APB1ENR
功能不重復說明
功能不重復,獨立看門狗用于防止系統死機,而窗口看門狗用于保證系統運行的正確性.
比如一個系統有一個工作線程和一個IDLE線程,系統正常運行時,工作線程運行200ms,暫停100ms.必須嚴格保證此運行時序.
此時就可以在工作線程中啟動一個窗口看門狗,在IDLE線程中清狗.
如果不足200ms就進到了IDLE線程,說明工作線程未能達到工作時間,出現了故障,窗口看門狗復位就被被觸發.
如果超過300ms還未進入IDLE線程,說明工作線程未能及時完成,也會觸發窗口看門狗.
獨立看門狗應用就很簡單了,系統必須在計數器歸零前喂狗,否則看門狗觸發,系統復位.
總之就是,窗口看門狗用于保證已知時序的系統正常運行,獨立看門狗保證系統不死機,兩個看門狗各有其應用場景,所以不重復.
上一篇:STM32F407IG臨時堆棧劃分
下一篇:STM32 keil4 extern問題
推薦閱讀
史海拾趣
AntennaHome公司自創立之初,便以技術創新為核心競爭力。公司的創始人在無線通信領域擁有深厚的技術背景和豐富的行業經驗,他們敏銳地捕捉到了市場對于高性能天線產品的需求。于是,公司投入大量資源進行研發,成功開發出了一款具有高效能、低損耗特點的新型天線產品,這一創新為公司在市場上贏得了良好的口碑。
隨著電子行業的快速發展和變革,Bogen Communications Inc公司面臨著巨大的挑戰。為了應對這些變革,公司不斷調整戰略、優化組織結構、提升研發能力。同時,公司還密切關注行業動態和市場需求,及時調整產品方向和市場策略。通過這些努力,公司成功地適應了行業變革,保持了穩健的發展態勢。
EUPEC一直致力于技術創新和研發,不斷推動電力半導體技術的進步。在多個關鍵領域,EUPEC都取得了重要的技術突破,如提高電力轉換效率、降低能耗等。這些技術突破不僅提升了EUPEC產品的競爭力,也為客戶帶來了實實在在的經濟效益。同時,EUPEC還積極拓展國際市場,產品廣泛應用于電解鋁、高壓直流輸電、軟啟動、直流傳動、高壓無功補償設備等領域。
隨著電子行業的不斷發展,晶豪科技也積極應對市場變化。公司擴大代工廠的晶圓開工規模,以滿足不斷增長的客戶需求。這一舉措不僅使公司能夠更靈活地應對市場波動,還為客戶提供了更穩定的產品供應。同時,隨著晶圓開工量的增加,公司的銷售額也實現了穩步增長。
在技術創新和產品創新的基礎上,Corex Intervest Inc公司開始積極拓展市場。公司通過參加國際電子展覽、與各大電商平臺合作等方式,不斷提升品牌知名度和影響力。同時,公司還注重與客戶的溝通與合作,根據客戶需求定制產品方案,贏得了客戶的廣泛信任和好評。
include #include #define _MHZ_ 11 sbit LED1=P0^0; sbit LED2=P0^1; sbit P0_2=P0^2; sbit P0_3=P0^3; sbit K1=P0^4; sbit K2=P0^5; sbit P0_6=P0^6; sbit P0_7=P0^7; sbit LED3=P1^0; sbit LED4=P1^1; sbi ...… 查看全部問答∨ |
|
evc 2003下運行基于對話框的mfc程序后,無法最小化,無法查看今日界面。下載了sdk中的例子也是一樣的。如果采用隱藏對話框窗口的話,則能夠查看今日界面,但任務列表中,找不到應用程序,請問如何只是將對話框最小化,同時能夠在任務列表中回復原界 ...… 查看全部問答∨ |
|
1、點穴:深入了解至少一種處理器/控制器的體系結構,熟悉其匯編指令。 2、掌法:精通C語言,掌握加載技術和編譯鏈接知識。 3、兵刃:了解常用存儲、通信和人機接口設備,熟練編寫設備驅動程序。 4、陣法:嵌入式操作系統的理論和實踐。 5、兵 ...… 查看全部問答∨ |
|
本帖最后由 dontium 于 2015-1-23 13:24 編輯 高頻電路中對衰減器的特性阻抗有要求,請問是這個衰減器的特性阻抗是分別看輸入阻抗和輸出阻抗 還是什么啊~~~ … 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 英飛凌發布“在中國、為中國”本土化戰略 三十而勵啟新篇
- 智慧農業:英特爾處理器驅動更加可持續、高效的農業發展
- 英偉達正在用“物理AI”,徹底顛覆自動駕駛、工業、機器人和智慧城市
- 臺積電-東京大學實驗室啟用,雙方聯手推動半導體研究和教育
- ?意法半導體大巴窯工廠落地創新冷卻系統,提升可持續發展能力
- Nordic Semiconductor聯同Omnispace和Gatehouse Satcom完成5G NB-IoT衛星演示
- 英偉達開啟“攻城略地”模式,擬在歐洲建設20座AI工廠
- 臺積電:日本JASM第二晶圓廠預計今年下半年動工
- 工信部:支持車企“60天賬期”承諾,促進產業健康發展
- 全球十大芯片代工廠最新排名!中芯國際沖擊世界第二
- 將低功耗設計進行到底——評論、轉發贏大禮!
- 芯幣競拍:感恩教師節專場
- Keysight示波器主題月有獎系列活動之 注冊大獎天天抽 搶樓踩中亦有獎
- Microchip有獎直播:VectorBlox™ SDK 報名中
- 有獎直播|ADI 慣性MEMS應用那些事
- 借助 Microchip 生態系統中的 PIC® 和 AVR® 單片機開啟嵌入式到云端之旅 系列在線研討會
- 帶你零起點入門STM32(專為嵌入式應用而開發的內核)
- 福祿克首款熱成像萬用表Fluke-279FC 即將上市!填寫問卷贏好禮嘍!
- EEWorld Datasheet 伴你同行!快來領取200芯積分福利啦~
- 泰克福袋:示伴功倍,萬能福袋派送中