娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年06月12日(星期四)

2020年06月12日 | STM32基于固件庫學習筆記(10)窗口看門狗

發布者:冷漠之心 來源: eefocus關鍵字:STM32  固件庫  窗口看門狗 手機看文章 掃描二維碼
隨時隨地手機看文章

窗口看門狗 (WWDG)

小容量產品是指閃存存儲器容量在16K至32K字節之間的STM32F101xx、STM32F102xx和STM32F103xx微控制器


中容量產品是指閃存存儲器容量在64K至128K字節之間的STM32F101xx、STM32F102xx和STM32F103xx微控制器。


大容量產品是指閃存存儲器容量在256K至512K字節之間的STM32F101xx和STM32F103xx微控制器。


互聯型產品是指STM32F105xx和STM32F107xx微控制器。


WWDG 簡介

窗口看門狗通常被用來監測,由外部干擾或不可預見的邏輯條件造成的應用程序背離正常的運行序列而產生的軟件故障。除非遞減計數器的值在T6位變成0前被刷新,看門狗電路在達到預置的時間周期時,會產生一個MCU復位。在遞減計數器達到窗口寄存器數值之前,如果7位的遞減計數器數值(在控制寄存器中)被刷新, 那么也將產生一個MCU復位。這表明遞減計數器需要在一個有限的時間窗口中被刷新。


WWDG 主要特性

● 可編程的自由運行遞減計數器

● 條件復位

─ 當遞減計數器的值小于0x40,(若看門狗被啟動)則產生復位。

─ 當遞減計數器在窗口外被重新裝載,(若看門狗被啟動)則產生復位。見0。

● 如果啟動了看門狗并且允許中斷,當遞減計數器等于0x40時產生早期喚醒中斷(EWI),它可以被用于重裝載計數器以避免WWDG復位。


WWDG 功能描述

如果看門狗被啟動(WWDG_CR寄存器中的WDGA位被置’1’), 并且當7位(T[6:0])遞減計數器從0x40翻轉到0x3F(T6位清零)時,則產生一個復位。如果軟件在計數器值大于窗口寄存器中的數值時重新裝載計數器,將產生一個復位。


應用程序在正常運行過程中必須定期地寫入WWDG_CR寄存器以防止MCU發生復位。只有當計數器值小于窗口寄存器的值時,才能進行寫操作。儲存在WWDG_CR寄存器中的數值必須在0xFF和0xC0之間:


● 啟動看門狗

在系統復位后,看門狗總是處于關閉狀態,設置WWDG_CR寄存器的WDGA位能夠開啟看門狗,隨后它不能再被關閉,除非發生復位。


● 控制遞減計數器

遞減計數器處于自由運行狀態,即使看門狗被禁止,遞減計數器仍繼續遞減計數。當看門狗被啟用時,T6位必須被設置,以防止立即產生一個復位。


T[5:0]位包含了看門狗產生復位之前的計時數目;復位前的延時時間在一個最小值和一個最大值之間變化,這是因為寫入WWDG_CR寄存器時,預分頻值是未知的。

配置寄存器(WWDG_CFR) 中包含窗口的上限值:要避免產生復位,遞減計數器必須在其值小于窗口寄存器的數值并且大于0x3F時被重新裝載,0描述了窗口寄存器的工作過程。


另一個重裝載計數器的方法是利用早期喚醒中斷(EWI)。設置WWDG_CFR寄存器中的WEI位開啟該中斷。當遞減計數器到達0x40時,則產生此中斷,相應的中斷服務程序(ISR)可以用來加載計數器以防止WWDG復位。在WWDG_SR寄存器中寫’0’可以清除該中斷。


注: 可以用 T6 位產生一個軟件復位 ( 設置 WDGA 位為 ’1’ , T6 位為 ’0’) 。


窗口看門狗時序

注:當寫入 WWDG_CR 寄存器時,始終置 T6 位為’1’


通過庫函數來配置窗口看門狗功能的步驟

1. 使能 WWDG 時鐘


RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE); // WWDG 時鐘使能


2. 初始化窗口看門狗中斷服務


  NVIC_InitTypeDef NVIC_InitStrture;

  NVIC_InitStrture.NVIC_IRQChannel = WWDG_IRQn; //WWDG 中斷

  NVIC_InitStrture.NVIC_IRQChannelPreemptionPriority = 0;

  NVIC_InitStrture.NVIC_IRQChannelSubPriority = 0;

  NVIC_InitStrture.NVIC_IRQChannelCmd=ENABLE; 

  NVIC_Init(&NVIC_InitStrture); //NVIC 初始化


3. 設置窗口值和分頻數


  WWDG_SetPrescaler(WWDG_Prescaler_8);//設置分頻數的函數

  WWDG_SetWindowValue(0X45);//一個入口參數為窗口值


4. 設置計數器初始值并使能看門狗


 WWDG_Enable(0X70);//設置計數器初始值并使能看門狗 


5. 開啟 WWDG 中斷并分組

注:需注意這句( WWDG_ClearFlag();)位置;必須在開啟中斷函數的前面。


   WWDG_ClearFlag();//清除提前喚醒中斷標志位 

   WWDG_EnableIT();//開啟 WWDG 中斷的函數


6. 編寫中斷服務函數


void WWDG_IRQHandler(void)

{

  WWDG_ClearFlag(); //清除提前喚醒中斷標志位

  WWDG_SetCounter(0X70);//當禁掉此句后,窗口看門狗將產生復位  

}


完整程序

本次主要實現功能:窗口設置在0x45-0x70,到達0x45產生一次中斷進行喂狗;主程序主要實現PB5(LED)間隔50MS閃爍。只要在50ms間隔閃爍就表示每次都成功喂狗;在初始化通過串口發送了( printf(“weigou”);),沒有成功喂狗,串口也將一種發送( printf(“weigou”);)。


#include "stm32f10x.h" 

#include "stdio.h"

int fputc(int ch, FILE *f)

{

  while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);

  USART_SendData(USART1,(uint8_t)ch);

  return ch;

}

void delay_ms(u16 time)

{    

   u16 i = 0;  

   while(time--)

   {

      i = 12000;  

      while(i--);    

   }

}

void LED_Init_PB5(void)

{

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

  

  GPIO_InitTypeDef GPIO_ITDef_PB5;

  

  GPIO_ITDef_PB5.GPIO_Pin = GPIO_Pin_5;

  GPIO_ITDef_PB5.GPIO_Mode = GPIO_Mode_Out_PP;//推挽輸出  

  GPIO_ITDef_PB5.GPIO_Speed = GPIO_Speed_2MHz;  

  GPIO_Init(GPIOB,&GPIO_ITDef_PB5);

  GPIO_SetBits(GPIOB,GPIO_Pin_5);// 1

}

void Usart_Init()

  GPIO_InitTypeDef GPIO_ITDef1;

  GPIO_InitTypeDef GPIO_ITDef;

  USART_InitTypeDef  USART_ITDef;

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置NVIC中斷分組2:2位搶占優先級,2位響應優先級

//掛載時鐘(復用PA) 串口時鐘使能,GPIO 時鐘使能,復用時鐘使能

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);

//PA9 TXD初始化

  GPIO_ITDef.GPIO_Pin = GPIO_Pin_9;//PA9 TXD

  GPIO_ITDef.GPIO_Mode = GPIO_Mode_AF_PP;////復用推挽輸出

  GPIO_ITDef.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOA,&GPIO_ITDef);

//PA10 TXD初始化

  GPIO_ITDef1.GPIO_Pin = GPIO_Pin_10;//PA10 RXD

  GPIO_ITDef1.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入

  GPIO_Init(GPIOA,&GPIO_ITDef1);

  

//USART初始化

  USART_ITDef.USART_BaudRate = 115200;//波特率

  USART_ITDef.USART_WordLength = USART_WordLength_8b;//發送數據長度

  USART_ITDef.USART_StopBits = USART_StopBits_1; //一個停止位   

  USART_ITDef.USART_Parity = USART_Parity_No; //無奇偶校驗位     

  USART_ITDef.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無硬件數據流控制

  USART_ITDef.USART_Mode = USART_Mode_Tx| USART_Mode_Rx ;//發送模式 

  USART_Init(USART1,&USART_ITDef);

  

  USART_Cmd(USART1, ENABLE);//使能串口

}

void WWDG_Init1(void)

{

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE); // WWDG 時鐘使能 

 // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優先級分組為組2:2位搶占優先級,2位響應優先級

//窗口看門狗中斷服務程序

  NVIC_InitTypeDef NVIC_InitStrture;

  NVIC_InitStrture.NVIC_IRQChannel = WWDG_IRQn; //WWDG 中斷

  NVIC_InitStrture.NVIC_IRQChannelPreemptionPriority = 0;

  NVIC_InitStrture.NVIC_IRQChannelSubPriority = 0;

  NVIC_InitStrture.NVIC_IRQChannelCmd=ENABLE; 

  NVIC_Init(&NVIC_InitStrture); //NVIC 初始化


  WWDG_SetPrescaler(WWDG_Prescaler_8);//設置分頻數的函數

  WWDG_SetWindowValue(0X45);//一個入口參數為窗口值

  WWDG_Enable(0X70);//設置計數器初始值并使能看門狗

  

  //需注意這句位置.

   WWDG_ClearFlag();//清除提前喚醒中斷標志位 

   WWDG_EnableIT();//開啟 WWDG 中斷的函數

}

//中斷

void WWDG_IRQHandler(void)

{

  WWDG_ClearFlag(); //清除提前喚醒中斷標志位

  WWDG_SetCounter(0X70);//當禁掉此句后,窗口看門狗將產生復位  

}

int main(void)

{

  LED_Init_PB5();

  Usart_Init();

  printf("weigou");

  delay_ms(300);

  WWDG_Init1();  

  while(1)

  {     

     GPIO_ResetBits(GPIOB,GPIO_Pin_5);// 0 

     delay_ms(50);        

     GPIO_SetBits(GPIOB,GPIO_Pin_5);// 1  

     delay_ms(50);   

  }   

}


注: WWDG_ClearFlag();//清除提前喚醒中斷標志位 這個函數的位置特別重要,位置順序一旦放錯將不會成功喂狗。

關鍵字:STM32  固件庫  窗口看門狗 引用地址:STM32基于固件庫學習筆記(10)窗口看門狗

上一篇:STM32學習筆記(一)---GPIO口的操作
下一篇:STM32基于固件庫學習筆記(4)(通用定時器)TIM3定時1S中斷

史海拾趣

小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 葫芦岛市| 新竹县| 本溪市| 方山县| 萨嘎县| 临桂县| 邵阳县| 长顺县| 东乡| 马鞍山市| 浦北县| 牟定县| 塔城市| 盖州市| 保定市| 侯马市| 香河县| 孟津县| 江北区| 富蕴县| 仁怀市| 平昌县| 绵阳市| 南澳县| 永福县| 乐清市| 封开县| 淮安市| 北宁市| 比如县| 梧州市| 巴彦淖尔市| 河西区| 高台县| 甘洛县| 响水县| 鹤庆县| 武夷山市| 五寨县| 澎湖县| 车致|