0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解MM32F0140的獨立看門狗

靈動MM32MCU ? 來源:靈動MM32MCU ? 作者:靈動MM32MCU ? 2022-07-15 10:30 ? 次閱讀

獨立看門狗(IWDG)的設(shè)計初衷是為了檢測和解決由軟件錯誤所引起的故障,與窗口看門狗的主要區(qū)別在于獨立看門狗可以作為一個處于主程序之外,由內(nèi)部低速時鐘(LSI)驅(qū)動,能夠完全獨立工作的模塊,當主時鐘發(fā)生故障或芯片處在低功耗模式的時候,獨立看門狗依舊可以繼續(xù)工作。

它的原理可以簡述為:當獨立看門狗計數(shù)器不斷遞減達到給定數(shù)值時,將產(chǎn)生一個系統(tǒng)復(fù)位信號使系統(tǒng)復(fù)位或產(chǎn)生中斷信號。

MM32F0140的獨立看門狗有一個特色功能,用戶可以通過配置選擇IWDG產(chǎn)生復(fù)位還是產(chǎn)生中斷功能,比如在stop模式下,用戶可以選擇中斷方式喚醒從而不用復(fù)位MCU,SRAM數(shù)據(jù)不用因為看門狗喚醒而被清除。

1產(chǎn)生復(fù)位或者中斷

MM32F014x的獨立看門狗內(nèi)部是自由運行的12位遞減計數(shù)器,當設(shè)置IWDG復(fù)位方式時,當計數(shù)達到0x0000時,會產(chǎn)生一個系統(tǒng)復(fù)位;當設(shè)置IWDG中斷方式時,當設(shè)置看門狗中斷生成值IGEN,每當計數(shù)器值遞減等于該值時,會產(chǎn)生一個中斷信號。

2計數(shù)器時鐘

IWDG是由低速時鐘源(LSI)驅(qū)動,經(jīng)過IWDG_PR預(yù)分頻器分頻得到,預(yù)分頻因子可以被設(shè)置為4,8,16,32,64,128,256,在開啟IWDG前需要先開啟LSI,如圖1所示。

faf4641a-034f-11ed-ba43-dac502259ad0.png

圖1

3重裝載寄存器

每次執(zhí)行喂狗操作,就會將重裝載寄存器(IWDG_RLR)的值重新加載到計數(shù)器中,從而避免產(chǎn)生復(fù)位或者中斷信號,該操作通常叫做喂狗操作。復(fù)位時重裝載寄存器(IWDG_RLR)的值為0xFFF,如圖2。

fb11f994-034f-11ed-ba43-dac502259ad0.png

圖2

4看門狗超時時間

IWDG的超時周期可以通過重裝載寄存器(IWDG_RLR)的值和預(yù)分頻寄存器(IWDG_PR)計算得到,公式如下:

Tout(ms)=((4×2^PR)×RLR)/40

當IWDG_RLR寄存器為最大值時,可以獲得最長的超時時間,參考時間如表1:

fb2ee996-034f-11ed-ba43-dac502259ad0.png

表1

5寄存器保護

獨立看門狗中的IWDG_PR,IWDG_RLR,IWDG_IGEN寄存器具有訪問保護功能,只能在向鍵值寄存器(IWDG_KR)寫入0x5555,才能修改以上被保護的寄存器的值。向鍵值寄存器寫入其他值或者重載操作時,寄存器依舊出在保護狀態(tài)。

6看門狗中斷

當開啟獨立看門狗后,計數(shù)器開始從其復(fù)位值0xFFF開始遞減,當IWDG_CR控制寄存器中的IRQ_SEL位置1時,計數(shù)器遞減到IWDG_IGEN設(shè)定的值后會產(chǎn)生一個中斷。獨立看門狗中斷被連接到EXTI24上,所以看門狗中斷可以使MCU從低功耗模式下喚醒,結(jié)合IWDG_IGEN寄存器的設(shè)定,可以模擬低功耗定時器來使用。

7部分庫函數(shù)參考

PVU_CheckStatus();

IWDG_WriteAccessCmd(0x5555);

IWDG_SetPrescaler(IWDG_Prescaler);

修改預(yù)分頻寄存器(IWDG_PR),修改前需要先向鍵值寄存器(IWDG_KR)寫入0x5555。

RVU_CheckStatus();

IWDG_WriteAccessCmd(0x5555);

IWDG_SetReload(Reload & 0xfff);

修改重裝載寄存器(IWDG_RLR),修改前需要先向鍵值寄存器(IWDG_KR)寫入0x5555。

IVU_CheckStatus();

IWDG_WriteAccessCmd(0x5555);

IWDG_SetIGen(0x7ff);

修改中斷生成寄存器(IWDG_IGEN),修改前需要先向鍵值寄存器(IWDG_KR)寫入0x5555。

IWDG_EnableIT();

開啟看門狗中斷,如果需要看門狗復(fù)位方式需要設(shè)置:IWDG_Reset();

IWDG_ReloadCounter();

IWDG_Enable();

重載計數(shù)器、開啟IWDG計數(shù)器。

IWDG_ClearITPendingBit();

清除看門狗中斷標志位。

8程序配置

8.1 開啟獨立看門狗

開啟看門狗前需要先打開LSI,配置預(yù)分頻寄存器,配置重裝載寄存器,然后開啟IWDG計數(shù)器,以下示例代碼對IWDG進行初始化,配置預(yù)分頻因子為16,重裝載寄存器從最大值(0xFFF)開始計數(shù),最大看門狗超時時間大概為1.6秒,代碼如下:

voidIWDG_Init(void)
{
//開啟低速時鐘,等待時鐘穩(wěn)定
RCC_LSICmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY)==RESET);

//設(shè)置預(yù)分頻寄存器
PVU_CheckStatus();
IWDG_WriteAccessCmd(0x5555);
IWDG_SetPrescaler(0x02);//選擇對LSI進行16分頻

//設(shè)置重裝載寄存器
RVU_CheckStatus();
IWDG_WriteAccessCmd(0x5555);
IWDG_SetReload(0xfff);//重裝載寄存器設(shè)置為0xFFF

//將重裝載寄存器的值加載到計數(shù)器,并開啟計數(shù)器
IWDG_ReloadCounter();
IWDG_Enable();
}

8.2 重裝載計數(shù)器(喂狗)

在任何時候向IWDG_KR寄存器寫入0xAAAA,就會將重裝載寄存器(IWDG_RLR)中的值加載到計數(shù)器中,避免產(chǎn)生復(fù)位或者中斷,可以使用如下庫函數(shù):

IWDG_ReloadCounter();

或者直接操作寄存器,但要特別注意,在喂狗后最多需要5個LSI的振蕩周期。

IWDG->KR = 0xAAAA;

8.3 開啟看門狗中斷

如需要開啟看門狗中斷,在配置IWDG時需要配置IWDG_CR中的IRQ_SEL和IWDG_IGEN寄存器,在開啟看門狗之前加入如下代碼:

1)配置中斷生成寄存器(IWDG_IGEN),并開啟看門狗中斷

IVU_CheckStatus();
IWDG_WriteAccessCmd(0x5555);
IWDG_SetIGen(0x7FF);//將IWDG_IGEN配置為0x7FF,當計數(shù)器到該值時會產(chǎn)生中斷
IWDG_EnableIT();

2)使能NVIC和外部中斷源

{
EXTI_InitTypeDefEXTI_InitStruct;
NVIC_InitTypeDefNVIC_InitStruct;

RCC_APB1PeriphClockCmd(RCC_APB1ENR_PWR,ENABLE);
//EnabletheIWDGInterrupt
NVIC_InitStruct.NVIC_IRQChannel=WWDG_IWDG_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPriority=0;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStruct);

RCC_APB2PeriphClockCmd(RCC_APB2RSTR_SYSCFG,ENABLE);
EXTI_StructInit(&EXTI_InitStruct);

EXTI_ClearITPendingBit(EXTI_Line24);
//IWDGmaptoEXTI_Line24
EXTI_InitStruct.EXTI_Line=EXTI_Line24;
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_InitStruct.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_InitStruct);
}

3)編寫看門狗中斷服務(wù)函數(shù),由于和窗口看門狗共用一個中斷源,所以庫中函數(shù)名和窗口看門狗一致。

voidWWDG_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line24)!=RESET)
{
EXTI_ClearITPendingBit(EXTI_Line24);
IWDG_ClearIT();
IWDG_ReloadCounter();//可以在中斷中喂狗或者置標志位
}
}

9功能驗證

在測試驗證程序中在看門狗中斷服務(wù)函數(shù)添加printf("IWDG IRQ Mode ");下載程序可以看到MCU上電完成后會一直循環(huán)打印“IWDG IRQ Mode”。

fb4852d2-034f-11ed-ba43-dac502259ad0.png


圖3

針對需要短時間低功耗STOP模式喚醒的應(yīng)用場景,可以使用該方式喚醒,同時針對LSI精度不高的問題,可以通過HSI對LSI進行校準方式,從而獲取高精度的LSI時鐘源。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 看門狗
    +關(guān)注

    關(guān)注

    10

    文章

    557

    瀏覽量

    70666
  • 計數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2248

    瀏覽量

    94178
  • IWDG
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    5187
  • 獨立看門狗
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    3779
  • MM32
    +關(guān)注

    關(guān)注

    1

    文章

    106

    瀏覽量

    721

原文標題:靈動微課堂 (第222講) | MM32F0140學(xué)習(xí)筆記——獨立看門狗(IWDG)

文章出處:【微信號:MindMotion-MMCU,微信公眾號:靈動MM32MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    獨立看門狗(IWDG)的基礎(chǔ)知識

      STM32F10xxx系列內(nèi)置兩個看門狗(獨立看門狗和窗口看門狗),提供了更高的安全性、時間的精確性和使用的靈活性。兩個
    發(fā)表于 10-19 17:10 ?4115次閱讀
    <b class='flag-5'>獨立</b><b class='flag-5'>看門狗</b>(IWDG)的基礎(chǔ)知識

    STM32中的獨立看門狗和窗口看門狗是什么

    在早期的MCU中是沒有看門狗這種東西的,所以產(chǎn)品就很容易出現(xiàn)死機,跑飛的情況。為了避免這種情況的出現(xiàn),后期的MCU都集成了看門狗的功能。但是目前看門狗發(fā)展到今天基本上分為兩大類:獨立
    的頭像 發(fā)表于 02-20 17:47 ?2575次閱讀
    STM32中的<b class='flag-5'>獨立</b><b class='flag-5'>看門狗</b>和窗口<b class='flag-5'>看門狗</b>是什么

    基于MM32F0140開發(fā)板的獨立看門狗(IWDG)設(shè)計筆記

    1、MM32F0140學(xué)習(xí)筆記——獨立看門狗(IWDG)  獨立看門狗(IWDG)的設(shè)計初衷是為了檢測和解決由軟件錯誤所引起的故障,與窗口
    發(fā)表于 09-15 16:43

    stm32看門狗時間計算 獨立看門狗和窗口看門狗的特性是什么

    本文為您講解STM看門狗時間計算(時限)與頻率計算,獨立看門狗和窗口看門狗的特性、區(qū)別與聯(lián)系。
    發(fā)表于 10-10 10:41 ?8704次閱讀

    什么是stm32看門狗獨立看門狗和窗口看門狗工作原理解析

    stm32有兩個看門狗,獨立看門狗和窗口看門狗,其實兩者的功能是類似的,只是喂狗的限制時間不同。 獨立
    的頭像 發(fā)表于 11-06 11:48 ?2.7w次閱讀
    什么是stm32<b class='flag-5'>看門狗</b>?<b class='flag-5'>獨立</b><b class='flag-5'>看門狗</b>和窗口<b class='flag-5'>看門狗</b>工作原理解析

    STM32:獨立看門狗、窗口看門狗的配置

    STM32單片機的看門狗獨立看門狗和窗口看門狗之分,這兩者的工作原理卻完全不同。
    發(fā)表于 02-08 16:15 ?18次下載
    STM32:<b class='flag-5'>獨立</b><b class='flag-5'>看門狗</b>、窗口<b class='flag-5'>看門狗</b>的配置

    STM32中的獨立看門狗和窗口看門狗

    一、前言 在早期的MCU中是沒有看門狗這種東西的,所以產(chǎn)品就很容易出現(xiàn)死機,跑飛的情況。為了避免這種情況的出現(xiàn),后期的MCU都集成了看門狗的功能。但是目前看門狗發(fā)展到今天基本上分為兩大類:獨立
    的頭像 發(fā)表于 12-22 16:58 ?1995次閱讀

    詳解獨立看門狗的實現(xiàn)原理

    這里以大家熟悉的STM32為例給大家講解一下獨立看門狗的配置以及工作過程。STM32F10xxx內(nèi)置兩個看門狗獨立
    發(fā)表于 12-22 17:01 ?3063次閱讀

    STM32中的獨立看門狗和窗口看門狗

    在早期的MCU中是沒有看門狗這種東西的,所以產(chǎn)品就很容易出現(xiàn)死機,跑飛的情況。為了避免這種情況的出現(xiàn),后期的MCU都集成了看門狗的功能。但是目前看門狗發(fā)展到今天基本上分為兩大類:獨立
    的頭像 發(fā)表于 01-30 14:38 ?1272次閱讀
    STM32中的<b class='flag-5'>獨立</b><b class='flag-5'>看門狗</b>和窗口<b class='flag-5'>看門狗</b>

    MM32F0140學(xué)習(xí)筆記——CRC

    MM32F0140學(xué)習(xí)筆記——CRC
    的頭像 發(fā)表于 11-10 18:27 ?528次閱讀
    <b class='flag-5'>MM32F0140</b>學(xué)習(xí)筆記——CRC

    MM32F0140學(xué)習(xí)筆記——窗口看門狗(WWDG)

    MM32F0140學(xué)習(xí)筆記——窗口看門狗(WWDG)
    的頭像 發(fā)表于 10-27 09:45 ?554次閱讀
    <b class='flag-5'>MM32F0140</b>學(xué)習(xí)筆記——窗口<b class='flag-5'>看門狗</b>(WWDG)

    MM32F0140 SPI學(xué)習(xí)筆記

    MM32F0140 SPI學(xué)習(xí)筆記
    的頭像 發(fā)表于 09-26 16:51 ?533次閱讀
    <b class='flag-5'>MM32F0140</b> SPI學(xué)習(xí)筆記

    MM32F0140 DMA學(xué)習(xí)筆記

    MM32F0140 DMA 學(xué)習(xí)筆記
    的頭像 發(fā)表于 09-18 16:57 ?644次閱讀
    <b class='flag-5'>MM32F0140</b> DMA學(xué)習(xí)筆記

    MM32F0140 UART學(xué)習(xí)筆記

    MM32F0140 UART學(xué)習(xí)筆記
    的頭像 發(fā)表于 09-26 16:45 ?705次閱讀
    <b class='flag-5'>MM32F0140</b> UART學(xué)習(xí)筆記

    MM32F0140 GPIO學(xué)習(xí)筆記

    MM32F0140 GPIO學(xué)習(xí)筆記
    的頭像 發(fā)表于 09-26 16:42 ?489次閱讀
    <b class='flag-5'>MM32F0140</b> GPIO學(xué)習(xí)筆記