一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

jf_pJlTbmA9 ? 來源:靈動MM32MCU ? 作者:靈動MM32MCU ? 2023-10-27 09:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、WWDG簡介

窗口看門狗(WWDG)是喂狗時間有上下限范圍的看門狗,主要用于檢測由外部干擾和不可預(yù)測的邏輯條件導(dǎo)致程序跑飛了所引起的軟件問題,根據(jù)程序正常執(zhí)行的時間設(shè)置刷新看門狗的一個時間窗口,保證不會提前刷新看門狗或滯后刷新看門狗,可以用于檢測出程序是否按照正常的路徑運(yùn)行或者是非正常的跳過某些程序段的情況。

復(fù)位

當(dāng)WWDG計數(shù)器的值大于設(shè)定的上限窗口值時喂狗,將產(chǎn)生復(fù)位;當(dāng)計數(shù)器的值從下限固定值0x40變成0x3F時,低于窗口看門狗的下限,也會產(chǎn)生復(fù)位。

計數(shù)器時鐘

WWDG計數(shù)器時鐘由CK計時器時鐘經(jīng)過預(yù)分頻器分頻得到,預(yù)分頻器的時基由配置寄存器(WWDG_CFGR)的WDGTB位配置,如圖1所示,CK計時器時鐘=PCLK1/4096,可將CK計時器時鐘進(jìn)行2分頻/4分頻/8分頻/不分頻。

“圖1.WWDG計數(shù)器時鐘配置
圖1.WWDG計數(shù)器時鐘配置

計數(shù)器

WWDG的計數(shù)器是一個遞減計數(shù)器,每4096x2WDGTB個PCLK1周期減1,WDGTB的值如圖1所示??刂萍拇嫫?WWDG_CR)的T位用于存儲看門狗的7位計數(shù)器值,如圖2所示,計數(shù)器所有位置1時為最大值0x7F,其下限固定值為0x40,當(dāng)計數(shù)器值從0x40下降到0x3F時,產(chǎn)生看門狗復(fù)位。WWDG的喂狗操作必須在計數(shù)器值小于窗口寄存器值時操作,只有該情況下喂狗不會產(chǎn)生復(fù)位。

“圖2.WWDG計數(shù)器位
圖2.WWDG計數(shù)器位

窗口值

如圖3所示,WWDG的上限窗口值由配置寄存器(WWDG_CFGR)的W位控制,為保證窗口的價值,上限窗口值必須大于0x40且小于等于0x7F。

“圖3.WWDG上限窗口值
圖3.WWDG上限窗口值

提前喚醒中斷

利用提前喚醒中斷(EWI) 可以避免復(fù)位并且重載計數(shù)器。操作配置寄存器(WWDG_CFGR)中的EWI位開啟中斷,當(dāng)計數(shù)器遞減到0x40時,產(chǎn)生提前喚醒中斷,可以在中斷處理函數(shù)中向控制寄存器(WWDG_CR)重載計數(shù)器的值來達(dá)到喂狗的目的,從而防止復(fù)位。

2、實(shí)驗

本實(shí)驗配置WWDG計數(shù)器時鐘的預(yù)分頻系數(shù)為8分頻,配置重載計數(shù)器窗口的上限值為0x7F,時鐘初始化后,串口打印"wwdg_basic example.",初始化WWDG后使能提前喚醒中斷(EWI),在中斷處理函數(shù)中判斷是否已經(jīng)重裝載計數(shù)器到指定次數(shù),若未達(dá)到則重裝載一次WWDG計數(shù)器,并記錄重裝載次數(shù),達(dá)到指定次數(shù)則不再重裝載計數(shù)器。

初始化WWDG后進(jìn)入死循環(huán),每經(jīng)過一段延時,串口打印一個".",表示CPU仍在工作,直到WWDG復(fù)位,串口再次打印"wwdg_basic example."。

啟用WWDG外設(shè)時鐘 enable_clock()

實(shí)驗使用WWDG,串口打印輸出結(jié)果,串口使用引腳屬于GPIOA組,因此需要啟用WWDG、UART1及GPIOA的外設(shè)時鐘。

void enable_clock()
{
    /* Enable WWDG clock. */
    RCC->APB1ENR |= RCC_APB1_PERIPH_WWDG;
    /* Enable GPIOA clock. */
    RCC->AHB1ENR |= RCC_AHB1_PERIPH_GPIOA;
    /* Enable UART1 clock. */
    RCC->APB2ENR |= RCC_APB2_PERIPH_UART1;
}

配置引腳 pin_init()

由于實(shí)驗現(xiàn)象通過串口顯示,故配置UART的TX(PA9)與RX(PA10)引腳。

void pin_init()
{
    /* PA9 - UART_TX. */
    GPIOA->CRH  = ~GPIO_CRH_MODE9_MASK;
    GPIOA->CRH  = ~GPIO_CRH_CNF9_MASK;
    GPIOA->CRH |= GPIO_CRH_MODE9(GPIO_Speed_50MHz);
    GPIOA->CRH |= GPIO_CRH_CNF9(GPIO_PinMode_AF_PushPull);
    GPIOA->AFRH  = ~GPIO_AFRH_AFR_MASK;
    GPIOA->AFRH |= (GPIO_AF_1 << GPIO_CRH_MODE9_SHIFT);

    /* PA10 - UART_RX. */
    GPIOA->CRH  = ~GPIO_CRH_MODE10_MASK;
    GPIOA->CRH  = ~GPIO_CRH_CNF10_MASK;
    GPIOA->CRH |= GPIO_CRH_CNF10(GPIO_PinMode_In_Floating);
    GPIOA->AFRH |= (GPIO_AF_1 << GPIO_CRH_MODE10_SHIFT);
}

UART初始化 uart_init()

初始化UART,配置時鐘頻率、波特率、數(shù)據(jù)長度、停止位、傳輸模式及是否使用校驗。

void uart_init()
{
    /* Clear the corresponding bit to be used. */
    UART1->CCR  = ~( UART_CCR_PEN_MASK | UART_CCR_PSEL_MASK | UART_CCR_SPB0_MASK | UART_CCR_SPB1_MASK | UART_CCR_CHAR_MASK );
    UART1->GCR  = ~( UART_GCR_AUTOFLOWEN_MASK | UART_GCR_RXEN_MASK | UART_GCR_TXEN_MASK );
    /* WordLength. */
    UART1->CCR |= UART_CCR_CHAR_MASK;
    /* XferMode. */
    UART1->GCR |= (UART_XferMode_RxTx << UART_GCR_RXEN_SHIFT);
    /* Setup baudrate, BOARD_DEBUG_UART_FREQ = 48000000u, BOARD_DEBUG_UART_BAUDRATE = 9600u. */
    UART1->BRR = (BOARD_DEBUG_UART_FREQ / BOARD_DEBUG_UART_BAUDRATE) / 16u;
    UART1->FRA = (BOARD_DEBUG_UART_FREQ / BOARD_DEBUG_UART_BAUDRATE) % 16u;
    /* Enable UART1. */
    UART1->GCR |= UART_GCR_UARTEN_MASK;
}

WWDG初始化 wwdg_init()

操作配置寄存器(WWDG_CFGR)的WDGPB位配置預(yù)分頻系數(shù)為8分頻,W位配置重載計數(shù)器窗口的上限值為0x7F,EWI位置1使能提前喚醒中斷,操作控制寄存器(WWDG_CR)的WDGA位置1,啟動看門狗。

void wwdg_init()
{
    WWDG->CFGR = WWDG_CFGR_WDGTB(WWDG_Prescaler_8) | WWDG_CFGR_W(WWDG_UPPER_LIMIT);  /* WWDG_UPPER_LIMIT = 0x7F, WWDG_Prescaler_8 = 3u. */
    NVIC_EnableIRQ(WWDG_IWDG_IRQn);
    WWDG->CFGR |= WWDG_CFGR_EWI_MASK;
    WWDG->CR |=  WWDG_CR_WDGA_MASK;
}

中斷服務(wù)程序 WWDG_IWDG_IRQHandler()

中斷服務(wù)程序中判斷是否已經(jīng)重裝載計數(shù)器到指定次數(shù),若未達(dá)到則重裝載一次WWDG計數(shù)器,并記錄重裝載次數(shù),若達(dá)到則不再重裝載計數(shù)器。向狀態(tài)寄存器(WWDG_SR)的EWIF位寫0,清除提前喚醒中斷標(biāo)志。

void WWDG_IWDG_IRQHandler(void)
{
    uint32_t status = WWDG->SR;
    if ( 0 != (WWDG_SR_EWIF_MASK   status) )
    {
        WWDG->SR  = ~WWDG_SR_EWIF_MASK;;
    }

    /* Stop reload WWDG counter aftert reload WWDG counter BOARD_WWDG_RELOAD_TIMES times. */
    if (100u > reload_times)    /* uint32_t reload_times = 0u. */
    {
        reload_times++;
        WWDG->CR = (WWDG->CR   ~WWDG_CR_T_MASK) | WWDG_CR_T(WWDG_RELOAD_VALUE);  /* WWDG_RELOAD_VALUE = 0x7f. */
    }
}

延時 soft_delay()

本實(shí)驗設(shè)置初始化后進(jìn)入while循環(huán),循環(huán)中隔一段延時進(jìn)行一次串口打印,表示當(dāng)前CPU仍在工作,故編寫軟件延時。

void soft_delay(uint32_t delay)
{
    for(uint32_t i = 0u; i < delay; i++)
    {
        for(uint32_t j = 0u; j < 10000u; j++)
        {
            __NOP();
        }
    }
}

main()函數(shù)

main()函數(shù)結(jié)合上述操作,串口打印"wwdg_basic example.",初始化WWDG并使能提前喚醒中斷后進(jìn)入死循環(huán),循環(huán)中每經(jīng)過一段延時串口將打印一個 “.” ,表示CPU仍在工作,直到WWDG復(fù)位,實(shí)驗現(xiàn)象如圖4所示。

void main()
{
    enable_clock();
    pin_init();
    uart_init();
    printf("rnwwdg_basic example.rn");
    wwdg_init();
    while (1)
    {
        printf(".");
        soft_delay(100u);
    }
}

“圖4.實(shí)驗現(xiàn)象
圖4.實(shí)驗現(xiàn)象

來源:靈動MM32MCU
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請聯(lián)系小編進(jìn)行處理
審核編輯 黃宇

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

    關(guān)注

    10

    文章

    583

    瀏覽量

    71798
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    MM32之窗口看門狗WWDG

    來源 靈動MM32一、WWDG 簡介窗口看門狗通常被用來監(jiān)測由外部干擾或不可預(yù)見的邏輯條件造成的應(yīng)用程序背離正常的運(yùn)行序列而產(chǎn)生的軟件故障。除非遞減計數(shù)器的值在T6 位變成 0前被刷新
    發(fā)表于 05-10 17:57

    如何去使用Stm32F103的窗口看門狗WWDG

    Stm32F103的看門狗分為哪幾種?獨(dú)立看門狗IWDG的主要性能有哪些?窗口看門狗WWDG的主
    發(fā)表于 08-19 06:46

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

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

    STM32看門狗配置(獨(dú)立看門狗IWDG和窗口看門狗WWDG

    stm32自帶兩個看門狗模塊,獨(dú)立看門狗IWDG和窗口看門狗WWDG。看門狗主要作用是可用來檢測
    發(fā)表于 11-09 17:17 ?8591次閱讀
    STM32<b class='flag-5'>看門狗</b>配置(獨(dú)立<b class='flag-5'>看門狗</b>IWDG和<b class='flag-5'>窗口</b><b class='flag-5'>看門狗</b><b class='flag-5'>WWDG</b>)

    【MCU】基于STM32CubeMX 實(shí)現(xiàn)窗口看門狗 WWDG

    基于STM32CubeMX 實(shí)現(xiàn)窗口看門狗 WWDG第一部分 基礎(chǔ)理論基礎(chǔ)理論部分主要參考 STM32F10X 參考手冊1. WWDG 簡介
    發(fā)表于 11-01 16:24 ?10次下載
    【MCU】基于STM32CubeMX 實(shí)現(xiàn)<b class='flag-5'>窗口</b><b class='flag-5'>看門狗</b> <b class='flag-5'>WWDG</b>

    MCU學(xué)習(xí)筆記_WWDG窗口看門狗

    MCU學(xué)習(xí)筆記WWDG窗口看門狗1. WWDG窗口
    發(fā)表于 12-08 17:51 ?7次下載
    MCU<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>_<b class='flag-5'>WWDG</b><b class='flag-5'>窗口</b><b class='flag-5'>看門狗</b>

    STM32L051使用HAL庫操作實(shí)例(7)-(WWDG)窗口看門狗實(shí)驗

    要求更加嚴(yán)格。必須在限定的時間窗口內(nèi)刷新計數(shù)器。。窗口看門狗WWDG)激活后,滿足以下條件會產(chǎn)生復(fù)位。1.遞減計數(shù)器的值小于0x40時(即從0x40滾到0x3
    發(fā)表于 12-09 16:51 ?11次下載
    STM32L051使用HAL庫操作實(shí)例(7)-(<b class='flag-5'>WWDG</b>)<b class='flag-5'>窗口</b><b class='flag-5'>看門狗</b>實(shí)驗

    詳解MM32F0140的獨(dú)立看門狗

    獨(dú)立看門狗(IWDG)的設(shè)計初衷是為了檢測和解決由軟件錯誤所引起的故障,與窗口看門狗的主要區(qū)別在于獨(dú)立看門狗可以作為一個處于主程序之外,由內(nèi)部低速時鐘(LSI)驅(qū)動,能夠完全獨(dú)立工作的
    的頭像 發(fā)表于 07-15 10:30 ?2010次閱讀

    STM32窗口看門狗(WWDG)開源

    電子發(fā)燒友網(wǎng)站提供《STM32窗口看門狗(WWDG)開源.zip》資料免費(fèi)下載
    發(fā)表于 11-14 09:26 ?29次下載
    STM32<b class='flag-5'>窗口</b><b class='flag-5'>看門狗</b>(<b class='flag-5'>WWDG</b>)開源

    基于MM32F0140的UDS Bootloader學(xué)習(xí)筆記

    基于MM32F0140的UDS Bootloader學(xué)習(xí)筆記
    的頭像 發(fā)表于 10-30 17:11 ?1144次閱讀
    基于<b class='flag-5'>MM32F0140</b>的UDS Bootloader<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>

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

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

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

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

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

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

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

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

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

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