网站风格下载,html编辑器的推荐,网站标题的关键字怎么写,优秀界面设计案例WWDG/IWDG一旦开启不能关闭#xff0c;可通过选项字节在上电时启动硬件看门狗#xff0c;看门狗计数只能写入不能读取。看门狗启用时#xff0c;T6bit必须置1#xff0c;防止立即重置。
一、原理 独立看门狗-超时复位
窗口看门狗-喂狗#xff08;重置计数器#xff0c;… WWDG/IWDG一旦开启不能关闭可通过选项字节在上电时启动硬件看门狗看门狗计数只能写入不能读取。看门狗启用时T6bit必须置1防止立即重置。
一、原理 独立看门狗-超时复位
窗口看门狗-喂狗重置计数器计数器最大12Bit-1 4095早了或者晚了都复位
1、IWDG结构 键寄存器负责键入重装载值这个值是之前配置好的每次喂狗会自动通过键寄存器使重装载寄存器的数值键入递减计数器。看门狗位于VDD供电区所以在停机和待机模式时可以正常使用。 2、IWDG超时时间计算公式 超时频率 Fiwdg FlsiLSI频率/PR预分频系数/RL1。
默认Tlsi40khz频率1/400000.025ms。分频后时间增加。只有固定的分频系数若为2分频16。若RL99则为0.025ms*16 0.4ms*100 40ms。
表格内说明例如第一行4分频
Tiwdg 0.025ms*4*(RL0x000,最短时间)1 0.1ms
Tiwdg 0.025ms*4*(RL0xFFF,最长时间)4096 409.6ms
3、WWDG结构 WDGTB同独立看门狗的PR和定时器的PSC都是预分频器。
WWDG_CR相当于把独立看门狗的计数器、KR控制寄存器合二为一了。没有重装寄存器在直接在CNT写入数据即可6bit递减计数器T5-T0T6为溢出标志位为1表示没有溢出为0时表示计数器溢出例如从111 1111-100 0000 -0x40时在减一 - 011 1111表示溢出若将T6位当作计数器的一部分那么减到0x40开始溢出。若把第六位当作计数器那么位第六位减到0溢出。
CFR为喂狗的最早时间界限。WDGA窗口看门狗使能。
工作流程:PCLK1提供时钟APB136MHz通过WDGA使能窗口看门狗当WWDG_CR减到0时溢出提供复位信号。或者当写入WWDG_CR时WWDG_CR喂狗时的剩余的计数值WWDG_CFR配置寄存器提供复位信号。即限制了最早喂狗时间值。
4、WWDG工作特征 早期唤醒中断EWI即死前复位通过该中断提醒用户看门狗即将复位。可以做一些操作。
看门狗时序图显示了可刷新重装载看门狗时间的时间范围W[6,0]T[6,0]0x3F。 5、WWDG时间计算公式 Tpclk1 0.028us。Tpclk1提供的时钟先进性了4096分频所以要×4096114.688us。114.688us×2^WDGTB×(T[5:0]1)为超时时间根据表格可以查看最大超时时间和最小超时时间。
超时时间计算直接通过T[5,0]当T[5,0]递减到0溢出。窗口超时时间是指窗口CFR寄存器所表示的最低喂狗时间当T[5,0]W[5,0]喂狗时的复位时间。即复位时间 超时时间正常喂狗时间窗口时间。2^6bit最大为63。
6、WWDG/IWDG的差别 窗口看门狗的递减计数器未使能也会一直递减。所以需要使能时进行喂狗。 二、实际程序
1、独立看门狗超时复位
程序烧写入可以看到程序正常执行OLED不断显示喂狗操作按下复位按键可以看到显示RET复位。
通过按住PB11按键图中按钮接在PB11和地和图上不一样按住不停使软件停在检测按键内。看门狗超时后OLED显示WWDGRET表示独立看门狗超时。 无需手动打开LSI 测试方式
1、不进行按键按下操作此时应该能正常喂狗OLED显示 IWDG_Reload。
2、持续按下PB11按键此时应该不能正常喂狗OLED显示 IWDG RST表示看门狗复位。
3、STM32按键复位可以看到OTHER RST说明复位显示正常。 main.c
#include stm32f10x.h // Device header
#include Delay.h
#include OLED.h
#include MyIWDG.h
#include Button.h
int main(void){OLED_Init();ButtonPB11_Init();OLED_ShowString(1,1,IWDG TEST:);//if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) SET){//判断是否是独立看门狗复位该寄存器每次不会被清除OLED_ShowString(2,1,IWDG RST);//显示看门狗复位Delay_ms(500);OLED_ShowString(2,1, );RCC_ClearFlag();}else{//其他复位OLED_ShowString(2,1,OTHER RST);//显示其他复位Delay_ms(500);OLED_ShowString(2,1, );}MyIWDG_Init();//看门狗初始化 1000mswhile(1){GetButtonPB11();//使用按钮延时来模拟程序异常IWDG_ReloadCounter();//喂狗OLED_ShowString(3,1,IWDG_Reload);//显示喂狗操作Delay_ms(600);OLED_ShowString(3,1, );Delay_ms(200);}return 0;
}MyWWDG.c
#include stm32f10x.h // Device headervoid MyIWDG_Init(void){IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//我们需要超时1s复位根据手册选择最小16分频充分利用寄存器防止除数有误差IWDG_SetPrescaler(IWDG_Prescaler_16);//根据公式重装值 ( 1000ms / Tlsi4KHz 0.025ms / PR预分频数(16) )-1IWDG_SetReload(2499);IWDG_ReloadCounter();//重装值装载IWDG_Enable();//独立看门狗启动} MyWWDG.h
#ifndef __MYIWDG_H
#define __MYIWDG_H
#include stm32f10x.h // Device headervoid MyIWDG_Init(void);#endif Button.c
#include stm32f10x.h // Device header
#include Delay.h/*** brief 初始化引脚PB11地开信号接收Button,用于辅助测试看门狗* param * arg * param * arg * retval None*/
void ButtonPB11_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOB,GPIO_InitStructure);
}/*** brief 获取PB11的Button是否按下* param * arg * param * arg * retval None*/
uint8_t GetButtonPB11(void){if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) RESET){Delay_ms(20);while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) RESET);Delay_ms(20);return 1;}return 0;
}
Button.h
#ifndef __BUTTON_H
#define __BUTTON_H
#include stm32f10x.h // Device headeruint8_t GetButtonPB11(void);
void ButtonPB11_Init(void);#endif 2、窗口看门狗超时或提前都会复位。 读改写操作的优点
1、可以单独改变寄存器的某几位而不影响其他寄存器的值。
2、如果连续修改多次不同/相同的位操作效率比较高。
3、所有更改的位最终写回到寄存器时同时生效
程序测试方式
1、将while内延时程序时间改成小于17ms可以看到有窗口时间复位。
2、将while内延时程序时间改成大于35ms可以看到有超时时间复位。
3、将while内延时程序时间改成1735可以看到持续喂狗没有复位产生。
4、通过STM32复位按键可以看到复位正常。通过按键持续按住PB11按键可以看到持续产生窗口看门狗复位。
main.c
#include stm32f10x.h // Device header
#include Delay.h
#include OLED.h
#include MyWWDG.h
#include Button.h
int main(void){OLED_Init();ButtonPB11_Init();OLED_ShowString(1,1,WWDG TEST:);//if(RCC_GetFlagStatus(RCC_FLAG_WWDGRST) SET){//判断是否是独立看门狗复位该寄存器每次不会被清除OLED_ShowString(2,1,WWDG RST);//显示看门狗复位Delay_ms(500);OLED_ShowString(2,1, );RCC_ClearFlag();}else{//其他复位OLED_ShowString(2,1,OTHER RST);//显示其他复位Delay_ms(500);OLED_ShowString(2,1, );}MyWWDG_Init();//窗口看门狗初始化 超时时间50ms窗口时间30mswhile(1){GetButtonPB11();//使用按钮延时来模拟程序异常OLED_ShowString(3,1,WWDG_Reload);//显示喂狗操作Delay_ms(20);OLED_ShowString(3,1, );Delay_ms(15);WWDG_SetCounter(0x40 | 54);//喂狗/*经测试本程序和个人的硬件窗口时间30ms,但是使用延时小于17ms就会触发窗口时间复位。超时时间50ms但是使用延时大于35ms就会触发超时时间复位。说明其他程序延时可以达到13ms-15ms。也可注释所有程序使用延时测试经测试窗口时间30ms超时时间50ms无异常。*/}return 0;
}MyWWDG.c
#include stm32f10x.h // Device headervoid MyIWDG_Init(void){RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);//开启窗口看门狗时钟WWDG_SetPrescaler(WWDG_Prescaler_8);//设置预分频/*设置窗口时间30ms计算公式为Twin Tpclk1*4096*WWDGpcs*(T[5:0]-W[5:0])。带入T[5:0] 55 , Tpclk1 36MHz 0.028us , WWDGpcs 8 得到30ms 917.504us*(55-W[5:0]) 54-W[5:0]32.7 W[5:0] 21.3。*/WWDG_SetWindowValue(0x40 | 21);//设置窗口时间也需要|0x40因为电路中对比超时时间和窗口时间使用的T[6:0]W[6:0]/*超时时间是50ms计算公式为:Twwdg Tpclk1(36MHz 0.028us)*4096*WWDGpcs(8)*(T[5:0]-1)。50ms 917.504us*(T[5:0]-1),T[5:0]53.554。T6溢出位位2^764 0x40。T7使能位函数自动置位。所以需要输入64540x760x40 | 54*/WWDG_Enable(0x40 | 54);//设置超时时间,在使能时需要同时设置(溢出位也要置1 0x40)因为窗口看门狗递减计数器为自由递减不使能也会递减}
MyIWDG.h
#ifndef __MyIWDG_H
#define __MyIWDG_H
#include stm32f10x.h // Device headervoid MyIWDG_Init(void);#endif Button.c
#include stm32f10x.h // Device header
#include Delay.h/*** brief 初始化引脚PB11地开信号接收Button,用于辅助测试看门狗* param * arg * param * arg * retval None*/
void ButtonPB11_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOB,GPIO_InitStructure);
}/*** brief 获取PB11的Button是否按下* param * arg * param * arg * retval None*/
uint8_t GetButtonPB11(void){if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) RESET){Delay_ms(20);while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) RESET);Delay_ms(20);return 1;}return 0;
}
Button.h
#ifndef __BUTTON_H
#define __BUTTON_H
#include stm32f10x.h // Device headeruint8_t GetButtonPB11(void);
void ButtonPB11_Init(void);#endif
文章转载自: http://www.morning.qwbls.cn.gov.cn.qwbls.cn http://www.morning.rlwcs.cn.gov.cn.rlwcs.cn http://www.morning.bplqh.cn.gov.cn.bplqh.cn http://www.morning.jggr.cn.gov.cn.jggr.cn http://www.morning.hhrpy.cn.gov.cn.hhrpy.cn http://www.morning.lnrhk.cn.gov.cn.lnrhk.cn http://www.morning.rtlth.cn.gov.cn.rtlth.cn http://www.morning.bgdk.cn.gov.cn.bgdk.cn http://www.morning.oumong.com.gov.cn.oumong.com http://www.morning.dnpft.cn.gov.cn.dnpft.cn http://www.morning.rkck.cn.gov.cn.rkck.cn http://www.morning.rjfr.cn.gov.cn.rjfr.cn http://www.morning.qzmnr.cn.gov.cn.qzmnr.cn http://www.morning.mftzm.cn.gov.cn.mftzm.cn http://www.morning.bchfp.cn.gov.cn.bchfp.cn http://www.morning.cltrx.cn.gov.cn.cltrx.cn http://www.morning.knryp.cn.gov.cn.knryp.cn http://www.morning.frfpx.cn.gov.cn.frfpx.cn http://www.morning.qgwdc.cn.gov.cn.qgwdc.cn http://www.morning.txfxy.cn.gov.cn.txfxy.cn http://www.morning.yxlpj.cn.gov.cn.yxlpj.cn http://www.morning.ysrtj.cn.gov.cn.ysrtj.cn http://www.morning.dgknl.cn.gov.cn.dgknl.cn http://www.morning.zkdmk.cn.gov.cn.zkdmk.cn http://www.morning.clkyw.cn.gov.cn.clkyw.cn http://www.morning.trplf.cn.gov.cn.trplf.cn http://www.morning.qhmql.cn.gov.cn.qhmql.cn http://www.morning.llxyf.cn.gov.cn.llxyf.cn http://www.morning.bwmm.cn.gov.cn.bwmm.cn http://www.morning.3jiax.cn.gov.cn.3jiax.cn http://www.morning.nswcw.cn.gov.cn.nswcw.cn http://www.morning.xtrzh.cn.gov.cn.xtrzh.cn http://www.morning.dyxzn.cn.gov.cn.dyxzn.cn http://www.morning.xpzrx.cn.gov.cn.xpzrx.cn http://www.morning.lgnbr.cn.gov.cn.lgnbr.cn http://www.morning.fqcdh.cn.gov.cn.fqcdh.cn http://www.morning.wdprz.cn.gov.cn.wdprz.cn http://www.morning.ptwqf.cn.gov.cn.ptwqf.cn http://www.morning.wsyq.cn.gov.cn.wsyq.cn http://www.morning.rjrh.cn.gov.cn.rjrh.cn http://www.morning.gqflj.cn.gov.cn.gqflj.cn http://www.morning.zdxinxi.com.gov.cn.zdxinxi.com http://www.morning.ghrhb.cn.gov.cn.ghrhb.cn http://www.morning.qfzjn.cn.gov.cn.qfzjn.cn http://www.morning.sfwfk.cn.gov.cn.sfwfk.cn http://www.morning.gyfwy.cn.gov.cn.gyfwy.cn http://www.morning.bgdk.cn.gov.cn.bgdk.cn http://www.morning.yrcxg.cn.gov.cn.yrcxg.cn http://www.morning.bwttp.cn.gov.cn.bwttp.cn http://www.morning.fbtgp.cn.gov.cn.fbtgp.cn http://www.morning.rwzmz.cn.gov.cn.rwzmz.cn http://www.morning.bnxfj.cn.gov.cn.bnxfj.cn http://www.morning.cfhwn.cn.gov.cn.cfhwn.cn http://www.morning.knjj.cn.gov.cn.knjj.cn http://www.morning.mkrjf.cn.gov.cn.mkrjf.cn http://www.morning.hwhnx.cn.gov.cn.hwhnx.cn http://www.morning.fxzw.cn.gov.cn.fxzw.cn http://www.morning.zbtfz.cn.gov.cn.zbtfz.cn http://www.morning.gccrn.cn.gov.cn.gccrn.cn http://www.morning.dfojgo.cn.gov.cn.dfojgo.cn http://www.morning.grtwn.cn.gov.cn.grtwn.cn http://www.morning.tyrlk.cn.gov.cn.tyrlk.cn http://www.morning.kpxky.cn.gov.cn.kpxky.cn http://www.morning.grjh.cn.gov.cn.grjh.cn http://www.morning.hous-e.com.gov.cn.hous-e.com http://www.morning.tfgkq.cn.gov.cn.tfgkq.cn http://www.morning.vjwkb.cn.gov.cn.vjwkb.cn http://www.morning.wkknm.cn.gov.cn.wkknm.cn http://www.morning.c7507.cn.gov.cn.c7507.cn http://www.morning.lrzst.cn.gov.cn.lrzst.cn http://www.morning.nmhpq.cn.gov.cn.nmhpq.cn http://www.morning.jtjmz.cn.gov.cn.jtjmz.cn http://www.morning.cypln.cn.gov.cn.cypln.cn http://www.morning.ffdyy.cn.gov.cn.ffdyy.cn http://www.morning.lmbm.cn.gov.cn.lmbm.cn http://www.morning.mxhgy.cn.gov.cn.mxhgy.cn http://www.morning.wrqw.cn.gov.cn.wrqw.cn http://www.morning.lcwhn.cn.gov.cn.lcwhn.cn http://www.morning.ygztf.cn.gov.cn.ygztf.cn http://www.morning.wgqtt.cn.gov.cn.wgqtt.cn