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

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

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

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

STM32入門學(xué)習(xí)筆記之看門狗實驗(下)

jf_78858299 ? 來源:滑小稽筆記 ? 作者:電子技術(shù)園地 ? 2023-02-16 11:27 ? 次閱讀

14.4.2 窗口看門狗實驗

功能:程序一運行使得接在PB5上的LED1亮300ms后關(guān)閉,進入死循環(huán)。等待WWDG中斷的到來,在中斷里面,喂狗,并對PE5上的LED2進行翻轉(zhuǎn)操作??梢钥吹絃ED2不停的閃爍,LED1只在剛啟動的時候閃一下。

(1)在上一個實驗的wdg.h文件的函數(shù)列表區(qū)域添加以下代碼。

void WWDG_Init( u8 tr, u8 wr, u8 fprer ) ; //窗口看門狗初始化

(2)在上一個實驗的wdg.c文件末尾添加以下代碼。

/***************************************************
Name    :WWDG_IRQHandler
Function  :窗口看門狗中斷服務(wù)程序
Paramater  :None
Return    :None
***************************************************/
void WWDG_IRQHandler()
{
  WWDG->CR = 0x7F ;                                          //重設(shè)置7位計數(shù)器
  WWDG->SR = 0x00 ;                                          //清除提前喚醒中斷標(biāo)志位
  LED2 != LED2 ;
}
/***************************************************
Name    :WWDG_Init
Function  :窗口看門狗初始化
Paramater  :
      tr:計數(shù)器值
      wr:窗口值
      fprer:分頻系數(shù)
Return    :None
***************************************************/
void WWDG_Init( u8 tr, u8 wr, u8 fprer )
{
  RCC->APB1ENR |= 1<<11 ;                                        //使能wwdg時鐘
  WWDG->CFR |= fprer<<7 ;    //PCLK1/4096再除2^fprer
  WWDG->CFR &= 0xFF80 ;
  WWDG->CFR |= wr ;                                          //設(shè)定窗口值
  WWDG->CR |= tr&0x7F ;                                        //設(shè)定計數(shù)器值
  WWDG->CR |= 1<<7 ;                                          //開啟看門狗
  NVIC_Init( 2, 3, WWDG_IRQn, 2 ) ;                                  //搶占2,子優(yōu)先級3,組2
  WWDG->SR = 0x00 ;                                          //清除提前喚醒中斷標(biāo)志位
  WWDG->CFR |= 1<<9 ;                                          //使能提前喚醒中斷
}

注:由于在中斷服務(wù)函數(shù)中引用了LED2,所以需要添加頭文件#include “l(fā)ed.h”。

(3)創(chuàng)建led.h文件,并輸入以下代碼。

#ifndef _LED_H_
#define _LED_H_


#include "sys.h"
/*********************************************************************************************************
                  硬    件    端    口
*********************************************************************************************************/
#define LED1  PBout( 5 )                                        //定義LED1端口
#define LED2  PEout( 5 )                                        //定義LED2端口
/*********************************************************************************************************
                  函    數(shù)    列    表
*********************************************************************************************************/
void LED_Init( void ) ;                                          //LED初始化


#endif

(4)創(chuàng)建led.c文件,并輸入以下代碼。

#include "led.h"


/***************************************************
Name    :LED_Init
Function  :LED初始化
Paramater  :None
Return    :None
***************************************************/
void LED_Init()
{
  RCC->APB2ENR |= 1<<3 ;
  GPIOB->CRL &= 0xFF0FFFFF ;
  GPIOB->CRL |= 0x00300000 ;

  RCC->APB2ENR |= 1<<6 ;
  GPIOE->CRL &= 0xFF0FFFFF ;
  GPIOE->CRL |= 0x00300000 ;

  LED1 = 1 ;
  LED2 = 1 ;
}

(5)在1.c文件中輸入以下代碼。

#include "sys.h"
#include "delay.h"
#include "usart1.h"
#include "led.h"
#include "wdg.h"
/***************************************************
Name    :main
Function  :主函數(shù)
Parameter  :None
Return    :None
***************************************************/
int main()
{
  STM32_Clock_Init( 9 ) ;                                        //STM32時鐘初始化
  SysTick_Init( 72 ) ;                                        //SysTick初始化
  USART1_Init( 72, 115200 ) ;                                      //初始化串口1波特率115200
  LED_Init() ;                                            //LED初始化
  LED1 = 0 ;                                              //點亮DS0
  delay_ms( 300 ) ;                                          //延時300ms,讓人可以看到DS0亮的狀態(tài)
   WWDG_Init( 0x7F, 0x5F, 3 ) ;                                    //計數(shù)器值為7f,窗口寄存器為5f,分頻數(shù)為8
  while( 1 )
  {
    LED1 = 1 ;                                            //熄滅LED1
  }
}

14.5 為何STM32要同時存在窗口看門狗與獨立看門狗

14.5.1 獨立看門狗的使用條件

(1)程序跑飛

(2)出現(xiàn)死循環(huán)

(3)睡眠與休眠不合理

(4)外部主晶振損壞

(5)需要重新復(fù)位,且不保留任何數(shù)據(jù)

14.5.2 窗口看門狗使用條件

(1)軟件邏輯出現(xiàn)錯誤

(2)死機或者死循環(huán)

(3)軟件執(zhí)行不按預(yù)期效果執(zhí)行

(4)軟件需要重新復(fù)位,但是保留所有數(shù)據(jù)

14.5.3 兩者的區(qū)別

(1)獨立看門狗使用內(nèi)部專用40kHz低速時鐘

窗口看門狗則使用PCLK1的時鐘

(2)獨立看門狗沒有中斷,超時直接復(fù)位

窗口看門狗有中斷,超時可以在中斷服務(wù)函數(shù)中操作或者喂狗

(3)獨立看門狗一般用于避免程序跑飛或者死循環(huán)

窗口看門狗則是為了避免程序不按照預(yù)先設(shè)定的邏輯執(zhí)行

(4)獨立看門狗是12位遞減操作

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

    關(guān)注

    6059

    文章

    44828

    瀏覽量

    645034
  • 看門狗
    +關(guān)注

    關(guān)注

    10

    文章

    577

    瀏覽量

    71475
  • STM32
    +關(guān)注

    關(guān)注

    2285

    文章

    10987

    瀏覽量

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

    關(guān)注

    32

    文章

    2283

    瀏覽量

    95869
  • 定時器
    +關(guān)注

    關(guān)注

    23

    文章

    3273

    瀏覽量

    116821
收藏 人收藏

    評論

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

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

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

    STM32_獨立看門狗程序

    STM32 獨立看門狗程序,很好的學(xué)習(xí)資料,快來下載吧
    發(fā)表于 02-15 17:08 ?25次下載

    ALIENTEK_MINISTM32_實驗5_獨立看門狗實驗

    ALIENTEK MINISTM32 實驗5 獨立看門狗實驗,很好的資料,快來學(xué)習(xí)
    發(fā)表于 02-18 14:58 ?6次下載

    ALIENTEK_MINISTM32_實驗6_窗口看門狗實驗

    ALIENTEK MINISTM32 實驗6 窗口看門狗實驗,很好的資料,快來學(xué)習(xí)
    發(fā)表于 02-18 14:58 ?4次下載

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

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

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

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

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

    stm32自帶兩個看門狗模塊,獨立看門狗IWDG和窗口看門狗WWDG。看門狗主要作用是可用來檢測和解決由軟件錯誤引起的故障;當(dāng)計數(shù)器達到給定
    發(fā)表于 11-09 17:17 ?8537次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>看門狗</b>配置(獨立<b class='flag-5'>看門狗</b>IWDG和窗口<b class='flag-5'>看門狗</b>WWDG)

    STM32看門狗配置詳情解說

     stm32有兩個看門狗,獨立看門狗和窗口看門狗,其實兩者的功能是類似的,只是喂狗的限制時間不同。獨立看門狗有自己獨立的40Khz時鐘,不存
    發(fā)表于 11-13 11:17 ?4609次閱讀
    <b class='flag-5'>STM32</b>的<b class='flag-5'>看門狗</b>配置詳情解說

    獨立看門狗實驗-IWDG-M3

    關(guān)于STM32獨立看門狗實驗文檔
    發(fā)表于 11-27 15:30 ?3次下載

    基于STM32、FreeRTOS 實現(xiàn)硬件看門狗+軟件看門狗監(jiān)測多任務(wù)的方法

    基于STM32、FreeRTOS實現(xiàn)硬件看門狗+軟件看門狗監(jiān)測多任務(wù)的方法
    的頭像 發(fā)表于 03-12 10:11 ?9836次閱讀

    stm32看門狗的特點是什么

    stm32有兩個看門狗,獨立看門狗和窗口看門狗,其實兩者的功能是類似的,只是喂狗的限制時間不同。
    的頭像 發(fā)表于 07-22 11:08 ?4237次閱讀

    MCU學(xué)習(xí)筆記_IWDG獨立看門狗

    MCU學(xué)習(xí)筆記IWDG獨立看門狗1. IWDG獨立看門狗概述2. 寄存器和HAL庫函數(shù)配置3. 實例1. IWDG獨立看門狗概述
    發(fā)表于 10-28 20:21 ?9次下載
    MCU<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>_IWDG獨立<b class='flag-5'>看門狗</b>

    STM32學(xué)習(xí)心得十六:獨立看門狗實驗

    記錄一,方便以后翻閱~主要內(nèi)容:1) 獨立看門狗概述;2) 常用寄存器和庫函數(shù)配置;3) 獨立看門狗實驗代碼解讀。官方資料:《STM32
    發(fā)表于 12-27 18:44 ?6次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>學(xué)習(xí)</b>心得十六:獨立<b class='flag-5'>看門狗</b><b class='flag-5'>實驗</b>

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

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