news 2026/10/17 23:05:22

stm32 14-2 WDG 看门狗:例题代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
stm32 14-2 WDG 看门狗:例题代码

(88)IWDG 例题:

++以上是开启 IWDG 的步骤,接着是使用的库函数:

++

voidIWDG_WriteAccessCmd(uint16_tIWDG_WriteAccess);//写使能控制,操作键寄存器voidIWDG_SetPrescaler(uint8_tIWDG_Prescaler);//写预分频器voidIWDG_SetReload(uint16_tReload);//写重装值voidIWDG_ReloadCounter(void);//读取重装寄存器到递减计数器,喂狗voidIWDG_Enable(void);//启动独立看门狗FlagStatusIWDG_GetFlagStatus(uint16_tIWDG_FLAG);//获取标志位状态

++

++

++dou 包的解释:

++原来库函数的内容还是关联到了寄存器里:

++

intmain(void){/*模块初始化*/OLED_Init();//OLED初始化Key_Init();//按键初始化/*显示静态字符串*/OLED_ShowString(1,1,"IWDG TEST");/*判断复位信号来源*/// 比如不喂狗导致了复位if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST)==SET)//如果是独立看门狗复位{OLED_ShowString(2,1,"IWDGRST");//OLED 闪烁 IWDGRST 字符串Delay_ms(500);OLED_ShowString(2,1," ");Delay_ms(100);RCC_ClearFlag();//清除标志位,这里必须手动清除,否则该 IWDGRST 标志不会消失}else//否则,即为其他复位{OLED_ShowString(3,1,"RST");//OLED 闪烁 RST 字符串Delay_ms(500);OLED_ShowString(3,1," ");Delay_ms(100);}/* IWDG 初始化*/IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//独立看门狗写使能IWDG_SetPrescaler(IWDG_Prescaler_16);//设置预分频为 16IWDG_SetReload(2499);//设置重装值为 2499,独立看门狗的超时时间为 1000ms// 1000ms = 0.025ms * 16 * ( 2499 + 1)// 超时时间:TIWDG = TLSI × PR预分频系数 × (RL + 1)IWDG_ReloadCounter();//重装递减计数器,喂狗.启动前先喂一次狗, 0xAAAAIWDG_Enable();//独立看门狗使能,这里会附带主动开启 LSI 时钟的,0xCCCC// 以上两句,给 key 寄存器写入了非 0x5555 的值,已经相当于重新加上写保护了,psc 与 RLwhile(1){Key_GetNum();//调用阻塞式的按键扫描函数,模拟主循环卡死IWDG_ReloadCounter();//重装递减计数器,喂狗OLED_ShowString(4,1,"FEED");//OLED 闪烁 FEED 字符串Delay_ms(200);//喂狗间隔为 200 + 600 = 800msOLED_ShowString(4,1," ");Delay_ms(600);}}

++附带给出 Key_GetNum ( ) ; 的代码,以便参考:

/** * 函 数:按键获取键码 * 参 数:无 * 返 回 值:按下按键的键码值,范围:0~2,返回0代表没有按键按下 * 注意事项:此函数是阻塞式操作,当按键按住不放时,函数会卡住,直到按键松手 */uint8_tKey_GetNum(void){uint8_tKeyNum=0;//定义变量,默认键码值为0if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0)//读PB1输入寄存器的状态,如果为0,则代表按键1按下{Delay_ms(20);//延时消抖while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0);//等待按键松手Delay_ms(20);//延时消抖KeyNum=1;//置键码为1}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0)//读PB11输入寄存器的状态,如果为0,则代表按键2按下{Delay_ms(20);//延时消抖while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0);//等待按键松手Delay_ms(20);//延时消抖KeyNum=2;//置键码为2}returnKeyNum;//返回键码值,如果没有按键按下,所有if都不成立,则键码为默认值0}

(89)例题 2 , WWDG:

++

++WWDG 的库函数还是很大不同于 IWDG 的:

voidWWDG_DeInit(void);//恢复缺省配置voidWWDG_SetPrescaler(uint32_tWWDG_Prescaler);//写入预分频器voidWWDG_SetWindowValue(uint8_tWindowValue);//写入窗口值,value must be lower than 0x80voidWWDG_EnableIT(void);//使能中断voidWWDG_SetCounter(uint8_tCounter);//写入计数器,between 0x40 and 0x7FvoidWWDG_Enable(uint8_tCounter);//使能窗口看门狗,同时喂狗,between 0x40 and 0x7F// 使能的时候顺便喂狗,以防止复位 //同时也可以看出,这个计数器赋值,是包含了 T[6] 的FlagStatusWWDG_GetFlagStatus(void);//获取标志位voidWWDG_ClearFlag(void);//清除标志位

++

++补充俩库函数的实现:

++

intmain(void){/*模块初始化*/OLED_Init();//OLED 初始化Key_Init();//按键初始化/*显示静态字符串*/OLED_ShowString(1,1,"WWDG TEST");/*判断复位信号来源*/if(RCC_GetFlagStatus(RCC_FLAG_WWDGRST)==SET)//如果是窗口看门狗复位{OLED_ShowString(2,1,"WWDGRST");//OLED闪烁 WWDGRST 字符串Delay_ms(500);OLED_ShowString(2,1," ");Delay_ms(100);RCC_ClearFlag();//清除标志位}else//否则,即为其他复位{OLED_ShowString(3,1,"RST");//OLED 闪烁 RST 字符串Delay_ms(500);OLED_ShowString(3,1," ");Delay_ms(100);}/*开启时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);//开启 WWDG 的时钟/*WWDG初始化*/WWDG_SetPrescaler(WWDG_Prescaler_8);//设置预分频为 8,则极限喂狗区间 910us ~ 58.25ms// 以下的设计是超时时间 50ms,在剩余的 20ms 内完成喂狗,即窗口时间是第 30 ms,剩余 20 msWWDG_SetWindowValue(0x40|21);//设置窗口值,窗口时刻为第 30ms// TWIN = TPCLK1 × 4096 × WDGTB 预分频系数 × (W[5:0] + 1)// 类比,窗口值的计算 55 * 2 / 5 = 22,所以 W[5:0] = 21WWDG_Enable(0x40|54);//使能并第一次喂狗,喂狗值为 50ms// 喂狗值 50ms 的计算 50ms = 1/36000 * 4096 * 8 * (54 + 1)--> // T[5 : 0] = 54// TWWDG = TPCLK1 × 4096 × WDGTB预分频系数 × (T[5:0] + 1)/* ++++++ 以下演示的是正常情况 ++++++++*/while(1){Key_GetNum();//调用阻塞式的按键扫描函数,模拟主循环卡死OLED_ShowString(4,1,"FEED");//OLED 闪烁 FEED 字符串Delay_ms(20);//喂狗间隔为 20 + 20 = 40msOLED_ShowString(4,1," ");Delay_ms(20);// 在第 40ms 喂狗,是合法的,在喂狗窗口内WWDG_SetCounter(0x40|54);// 重装计数器,喂狗}}

++

(90)

谢谢

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/17 23:04:28

炫彩活体检测利用手机屏幕与普通摄像头,通过红绿蓝光序列照射人脸,为线上身份核验提供高安全、低门槛、无感体验的“隐形安全闸门”。

办手机卡要刷脸、开银行账户要刷脸、领养老金资格认证要刷脸……不知不觉中,"露脸"已经成了我们证明"我是我"的日常动作。可你有没有想过一个问题:摄像头认得,是屏幕上这张脸本身,还是屏幕前的这个活人&#…

作者头像 李华
网站建设 2026/10/17 23:04:29

计算机网络必须掌握的核心知识讲解(三)

本人为了复习计网写了这篇文章,主要讲述我认为必须掌握,面试中高频考点,开发中必须熟悉的计网知识,物理层和数据链路层的某些重要一点的知识也会讲解,根据我个人的学习和开发经验.这篇文章讲解的传输层,应用层的核心知识,这部分的内容很重要,我认为应该对这篇文章的大致每一段话…

作者头像 李华
网站建设 2026/10/17 23:03:48

软件工程学习总结 ——基于北京大学孙艳春《软件工程》视频课程

1 概述 作为一名程序员,最令人沮丧的莫过于:投入了大量时间与精力,开发出的软件却不好用、甚至不可用。现在vibe coding日臻完善,但是软件的开发仍然还是达不到随心所欲的程度。现实中也不时陷入琐碎事务而难以抽身,由…

作者头像 李华
网站建设 2026/10/17 23:04:56

【AI大模型】LLaMA-Factory 工具使用:零代码微调,小白的最爱

【AI大模型】LLaMA-Factory 工具使用:零代码微调,小白的最爱 写在前面:不想写代码,也能微调大模型 前面几课我们一直在写代码做微调,但很多同学其实只想“点几下就把模型微调好”。有没有这样的工具?有——LLaMA-Factory就是目前最流行的“零代码微调”工具之一。它既有…

作者头像 李华
网站建设 2026/10/16 3:49:18

顾问同时在跑多个项目:专业服务公司的CRM怎么管好时间与经验

顾问同时在跑多个项目:专业服务公司的CRM怎么落地咨询公司、律师事务所、人力资源服务机构,这些企业有一个共同的经营特征:卖出去的不是产品,而是人的时间。一位顾问同时扛着几个项目,日程表排得密不透风。客户那边还在…

作者头像 李华
网站建设 2026/10/16 13:30:15

浮栅晶体管极性说明

目录 一、基础结构极性 各区域极性与掺杂一览 二、PN 结与沟道反型 1. 两个 PN 结 2. 沟道反型(Inversion) 三、浮栅电荷对极性/阈值的调控 四、三大操作中的极性与载流子行为 1. 编程(Program)— 电子注入浮栅 2. 擦除&a…

作者头像 李华