色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

MM32F0140學習筆記——窗口看門狗(WWDG)

jf_pJlTbmA9 ? 來源:靈動MM32MCU ? 作者:靈動MM32MCU ? 2023-10-27 09:45 ? 次閱讀

1、WWDG簡介

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

復位

當WWDG計數器的值大于設定的上限窗口值時喂狗,將產生復位;當計數器的值從下限固定值0x40變成0x3F時,低于窗口看門狗的下限,也會產生復位。

計數器時鐘

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

“圖1.WWDG計數器時鐘配置
圖1.WWDG計數器時鐘配置

計數器

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

“圖2.WWDG計數器位
圖2.WWDG計數器位

窗口值

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

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

提前喚醒中斷

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

2、實驗

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

初始化WWDG后進入死循環,每經過一段延時,串口打印一個".",表示CPU仍在工作,直到WWDG復位,串口再次打印"wwdg_basic example."。

啟用WWDG外設時鐘 enable_clock()

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

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()

由于實驗現象通過串口顯示,故配置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,配置時鐘頻率、波特率、數據長度、停止位、傳輸模式及是否使用校驗。

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位配置預分頻系數為8分頻,W位配置重載計數器窗口的上限值為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;
}

中斷服務程序 WWDG_IWDG_IRQHandler()

中斷服務程序中判斷是否已經重裝載計數器到指定次數,若未達到則重裝載一次WWDG計數器,并記錄重裝載次數,若達到則不再重裝載計數器。向狀態寄存器(WWDG_SR)的EWIF位寫0,清除提前喚醒中斷標志。

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()

本實驗設置初始化后進入while循環,循環中隔一段延時進行一次串口打印,表示當前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()函數

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

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

“圖4.實驗現象
圖4.實驗現象

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 看門狗
    +關注

    關注

    10

    文章

    560

    瀏覽量

    70789
收藏 人收藏

    評論

    相關推薦

    MM32之窗口看門狗WWDG

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

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

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

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

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

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

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

    【MCU】基于STM32CubeMX 實現窗口看門狗 WWDG

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

    MCU學習筆記_WWDG窗口看門狗

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

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

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

    詳解MM32F0140的獨立看門狗

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

    STM32窗口看門狗(WWDG)開源

    電子發燒友網站提供《STM32窗口看門狗(WWDG)開源.zip》資料免費下載
    發表于 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學習筆記

    基于MM32F0140的UDS Bootloader學習筆記
    的頭像 發表于 10-30 17:11 ?767次閱讀
    基于<b class='flag-5'>MM32F0140</b>的UDS Bootloader<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>

    MM32F0140學習筆記——CRC

    MM32F0140學習筆記——CRC
    的頭像 發表于 11-10 18:27 ?607次閱讀
    <b class='flag-5'>MM32F0140</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>——CRC

    MM32F0140 SPI學習筆記

    MM32F0140 SPI學習筆記
    的頭像 發表于 09-26 16:51 ?592次閱讀
    <b class='flag-5'>MM32F0140</b> SPI<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>

    MM32F0140 DMA學習筆記

    MM32F0140 DMA 學習筆記
    的頭像 發表于 09-18 16:57 ?703次閱讀
    <b class='flag-5'>MM32F0140</b> DMA<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>

    MM32F0140 UART學習筆記

    MM32F0140 UART學習筆記
    的頭像 發表于 09-26 16:45 ?755次閱讀
    <b class='flag-5'>MM32F0140</b> UART<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>

    MM32F0140 GPIO學習筆記

    MM32F0140 GPIO學習筆記
    的頭像 發表于 09-26 16:42 ?551次閱讀
    <b class='flag-5'>MM32F0140</b> GPIO<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>
    主站蜘蛛池模板: 5566精品资源在线播放| 大胸美女被cao哭| 毛片免费观看的视频在线| 4hu四虎免费影院www| 亚洲精品无码成人AAA片| 久久一er精这里有精品| 特黄特色大片免费播放器试看| 国产A级毛片久久久久久久| 亚洲视频在线观看| 欧美精品一区二区蜜臀亚洲| 丁香美女社区| 成人在线视频国产| 中文字幕久久久| 睡觉被偷偷进入magnet| 恋夜影视列表免费安卓手机版| 国产精品成人影院在线观看| 最近的2019中文字幕国语完整版| 丝瓜视频樱桃视频在线观看免费| 日日噜噜夜夜狠狠视频| 美女脱三角裤| 精品熟女少妇AV免费观看| 成人国产一区| 丰满少妇69激懒啪啪无码| 91精品乱码一区二区三区| 亚洲国产精品特色大片观看| 欧美性xxx免费看片| 九九99国产香蕉视频| 国产成人教育视频在线观看| jizz老师| 2020精品极品国产色在线| 18未满不能进的福利社| 亚洲字幕久久| 午夜性爽视频男人的天堂在线| 欧美性情一线免费http| 日本 一二三 不卡 免费| 精品一区二区三区色花堂| 久久久久综合| 精品无码久久久久久久动漫 | 午夜神器老司机高清无码| 小草观看免费高清视频| 日本免费一本天堂在线|