一、看門狗原理
1、單片機中有一個【寄存器(計數器)】專門用來倒計數,這個計數器倒計數是獨立于程序之外的,不受程序影響的。(程序是井,計數器是河,井水不犯河水,你跑你的程序,我記我的數,互不影響。)
2、但是:
這個【計數器】會有一個初值,這個值會逐次遞減,終有一刻會自減到0,當計數自減到0的時候,【系統】就會強制重啟,程序會從頭開始運行。
而當計數器每次倒計數到0之前,如果往計數器里面重新寫入一次數值,他就永遠不會倒計數到0,這時候系統也就不會重啟了。
3、所以:
程序員寫程序的時候,如果開啟了看門狗,會在程序中實現這樣一個功能——專門設定固定的時間循環往復的往【計數器】中寫入一個數值(喂狗)。
當程序正常運行的時候,每隔一段時間,【計數器】會被重新寫入數值,那么它永遠不會倒計時到0,
而當程序跑飛或者系統卡死,程序不能按照預想的要求來執行,也就不能在設定的時間去喂狗,那么計數器肯定會有一個時刻倒計數到0,系統就會重啟,程序就會從頭開始跑,又恢復到初始運行狀態。
4、所以:
看門狗的作用就是——不用人為的檢查程序是否正常運行,系統是否正常運行,需不需要重啟系統,如果程序跑飛或者系統卡死,則自動重新啟動系統,而不要人為的主動去重新啟動系統。
二、看門狗相關寄存器
1、 鍵值寄存器 IWDG_KR
2、 預分頻寄存器 IWDG_PR
3、 重裝載寄存器 IWDG_RLR
4、 狀態寄存器 IWDG_SR
三、配置看門狗步驟
1、使能寄存器可寫入(即:關閉寫保護)
向【鍵值寄存器(IWDG_KR)】寫入【0xAAAA】即可使【預分頻寄存器】和【重裝載寄存器】變得可以寫入數據。
2、配置預分頻值
數據位[2:0]。
預分頻因子:4/8/16/32/64/128/256
3、配置重裝載值
數據位[11:0].
4、重新裝載一次計數值(喂狗一次)
5、啟動看門狗
四、看門狗程序
1、使用庫函數
1)相關庫函數
1 關閉寫保護 IWDG_WriteAccessCmd();
2 配置預分頻值 IWDG_SetPrescaler();
3 配置重裝載值 IWDG_SetReload();
4 重新裝載計數器 IWDG_ReloadCounter();
5 使能看門狗(啟動看門狗) IWDG_Enable();
2)程序
/*
函數功能:初始化獨立看門狗
函數名:init_iwdg
返回值:void
參數: pre_scaler_value 預分頻值
reload_value 重裝載數值
*/
void init_iwdg(uint8_t pre_scaler_value, uint32_t reload_value)
{
IWDG_WriteAccessCmd(0x5555);//關閉寫保護:IWDG->KR = 0x5555;
IWDG_SetPrescaler(pre_scaler_value);//分頻因子為4,參數由main函數傳參傳進來,預分頻值為64,(4==100), IWDG->PR = 4, 即:IWDG->PR的bit[2]bit[1]bit[0]分別為100
IWDG_SetReload(reload_value);//配置重裝載值,參數由main函數傳參傳進來,3秒,公式:T(ms) == [(4 * 2^pre_Scaler) * reload] / 40;
IWDG_ReloadCounter();//第一次喂狗
IWDG_Enable();//使能看門狗
}
//喂狗API
void feed_iwdg(void)
{
IWDG_ReloadCounter();//喂狗,使STM32重新加載【IWDG_RLR中的值】到【看門狗計數器里面】。
}
2、直接配置寄存器
/*
函數功能:初始化獨立看門狗
函數名:init_iwdg
返回值:void
參數: pre_scaler_value 預分頻值
reload_value 重裝載數值
*/
void init_iwdg(uint8_t pre_scaler_value, uint32_t reload_value)
{
/*配置寄存器*/
IWDG->KR = 0x5555; //關閉寫保護,可以向IWDG_PR和IWDG_RLR寄存器中寫入數據。
IWDG->PR = pre_scaler_value; //配置預分頻因子,4 == 0100,表示與分頻因子為64
IWDG->RLR = reload_value; //配置重裝載值,公式:T(ms) == [(4 * 2^pre_Scaler) * reload] / 40;
/*初始化喂狗一次*/
IWDG->KR = 0xAAAA; //第一次喂狗。
/*啟動看門狗*/
IWDG->KR = 0xCCCC;
}
//喂狗API
void feed_iwdg(void)
{
IWDG->KR = 0xAAAA;//喂狗,使STM32重新加載【IWDG_RLR中的值】到【看門狗計數器里面】。
}
3、main函數
因為寄存器版本和庫函數版本只是初始化配置函數不同,不影響main函數,所以main函數是一樣的。
main函數中主要實現的功能就是:
while循環檢測是否有按鍵按下,若有,則喂狗
程序如下:
int main(void)
{
delay_init(); //延時函數初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
LED_Init(); //初始化與LED連接的硬件接口
KEY_Init(); //按鍵初始化
delay_ms(500); //延時
init_iwdg(4,1875); //初始化看門狗
LED0=0; //點亮LED0
while(1)
{
if (KEY_Scan(1))//循環檢測,當按下任何一個按鍵就喂狗一次
{
feed_iwdg();
}
delay_ms(10);
};
}
五、備注
本程序基本是完全照抄正點原子的程序,因為是看了一遍原子哥的程序,然后關掉自己重新寫的,所以一些語句可能不同,但是思路完全一樣,所以想要原版程序的童鞋可以直接去正點原子論壇找找原版。
上一篇:stm32正點原子學習筆記(29)獨立看門狗實驗
下一篇:STM32F0x2 IWDG(獨立看門狗)
推薦閱讀
史海拾趣
Exar始終注重通過收購和合并來增強自身的技術實力和市場競爭力。例如,2012年Exar收購了Integrated Memory Logic Limited(iML),這一舉措加強了其在存儲和數據管理領域的地位。通過收購iML,Exar獲得了更多的技術資源和市場份額,為其后續的發展提供了有力支持。
在公司的初創階段,DAYLIGHT就意識到技術研發對于企業發展的重要性。因此,公司投入大量資金用于研發新的電子產品和技術。經過幾年的努力,DAYLIGHT成功研發出一項具有革命性的電子芯片技術,這一技術大大提高了電子產品的性能和可靠性,使得DAYLIGHT的產品在市場上獲得了極高的聲譽。
在電子行業中,客戶服務質量直接關系到企業的聲譽和市場競爭力。Elprotronic Inc.深知這一點,因此一直致力于優化客戶服務體系。他們建立了專業的客戶服務團隊和客戶服務熱線電話等多種渠道來及時解答客戶的咨詢和問題。同時,公司還定期開展客戶滿意度調查活動收集客戶反饋和建議以便及時改進和優化產品和服務。這些努力使得Elprotronic Inc.在客戶服務方面贏得了良好的口碑和信譽也為公司的長期發展奠定了堅實的基礎。
請注意,以上故事均為虛構內容,旨在展示Elprotronic Inc.公司可能的發展路徑和故事。實際情況可能有所不同,具體細節請以公司官方發布的信息為準。
Apex Tool Group在追求經濟效益的同時,也積極履行社會責任,推動可持續發展。公司注重環保和節能,采用環保材料和節能技術生產電動工具。同時,Apex Tool Group還積極參與社會公益活動,為社區的可持續發展貢獻力量。這些舉措使得Apex Tool Group在電子行業中樹立了良好的企業形象,贏得了社會的廣泛認可。
雖然以上故事并非真實事件,但它們基于Apex Tool Group在電子行業中的發展和成就進行了合理推測和創作。這些故事展示了Apex Tool Group在創新、品質、全球化、定制化服務和社會責任等方面的努力和成就,為公司在電子行業中的發展提供了有力的支撐。
2020年,華潤微成功在科創板上市,開啟了公司發展的新篇章。上市以來,華潤微充分利用資本市場的力量,不斷擴大生產規模,提升技術水平。在科創板掛牌上市的推動下,公司業績實現了快速增長。2022年,公司營收突破百億大關,凈利潤達到26億元,較2019年增長5.5倍。這一成績的取得,充分展示了華潤微在電子行業中的強大實力和競爭力。
背景:隨著技術的成熟,Galaxy Microelectronics開始尋求與大型電子產品制造商的合作。
發展:2005年,Galaxy Microelectronics與一家領先的智能手機制造商達成合作協議,為其旗艦產品提供定制化的NAND閃存解決方案。這一合作不僅讓Galaxy Microelectronics的產品迅速進入市場,還顯著提升了其品牌知名度。隨后,公司陸續與多家知名電子產品廠商建立合作關系,進一步鞏固了其在閃存市場的地位。
;說明: ; 用于沒有燒寫ATmega16并行編程器的朋友,初用ATmega16的工程師在串行 ;編程時寫錯熔絲位,及加密位,造成不能再應用串行編程,構成不便,沒并行 ;編程將無法再使用,做了一個簡易的并行編程器(很簡單,用萬能板搭焊即可), ; ...… 查看全部問答∨ |
PTC熱敏電阻PTC是Positive Temperature Coefficient 的縮寫,意思是正的溫度系數,泛指正溫度系數很大的半導體材料或元器件.通常我們提到的PTC是指正溫度系 數熱敏電阻,簡稱PTC熱敏電阻.PTC熱敏電 阻是一種典型具有溫度敏感性的半導體 ...… 查看全部問答∨ |
對于鋰電池的保護,其方案有很多種,IC芯片也有很多種,現在指針對一節鋰電保護板設計介紹如下 一、電池保護板的原理 在鋰離子電池使用過程中,為避免使用者的錯誤使用而造成電池升溫,電池內電解液的分解而產生氣體使其內壓上升,金屬鋰等的釋出而 ...… 查看全部問答∨ |
|
自己寫了一個控制PWM輸出的程序,可是在示波器上沒有結果,求幫助 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> unsigned int Flash=0; void Port_init() //端口初始化 { PORTB=0X0F; DDRB ...… 查看全部問答∨ |
|
M4的板子買了好久 :(被坑了 186買的 傷心 之前想玩一下FPU 可惜那個DSP庫看不懂 也找不到教程 我研究了2個晚上總算會用那個FFT了.... 我的環境是 IAR 6.2 板子是STM32F4DISCOVERY 第一 首先下載官方的 STM32F4xx_DSP_S ...… 查看全部問答∨ |
語句:sibt dula=P2^6;//申明U1鎖存器的鎖存端 程序中有賦值語句:dula=1; 然后P2^6就輸出1,為啥?dula與P2^6指向同一地址?求指導… 查看全部問答∨ |
本帖最后由 paulhyde 于 2014-9-15 03:32 編輯 直入主題,不廢話。 首先2013與2011年競賽清單對比 2013年 1. 基本儀器清單60MHz雙通道數字示波器100MHz雙通道數字示波器低頻信號發生器(1Hz~1MHz)標準高頻信號發生器(1MHz~100MHz,可輸出 ...… 查看全部問答∨ |
將兩個頻率不同、幅度不同的正弦信號疊加在一起的時候,函數發生器的兩個通道應該是串聯起來,還是并聯起來。根據電路原理,電壓源不能并聯,所以應該是串聯起來。我用multisim進行仿真的時候,把兩個函數發生器并聯起來,軟件會報錯。但是,實際操 ...… 查看全部問答∨ |