当前位置: 首页 > news >正文

窗口看门狗

 从下往上看:

1. 时钟设置

RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);//使能独立看门狗时钟

WWDG_SetPrescaler(WWDG_Prescaler_8);//看门狗预分频器WWDG counter clock = (PCLK1/4096)/8

2.设置窗口值

实际就是设置WWDG_CR的低七位值, 但是这个值要大于0x40(也就是bit T6必须为1, 如果小于的话, 直接就复位, 因此窗口的上限值的取值范围: 0x40~ 0x7F)

看门狗使能的话, 则WWDG_CR的位WDGA置1

WWDG_SetWindowValue(wr);

WWDG_Enable(WWDG_CNT);

3. 中断开启?

WWDG_EnableIT() 这个还利用了位膨胀, 来开启WWDG_CFR的bit9.

WWDG_ClearFlag();//清除提前唤醒中断标志位WWDG_EnableIT();//开启提前唤醒中断

 WWDG_CFR:

        bit6:0  : 设置窗口值

        bit7:8  : 设置分配

        bit9  :  提前唤醒中断, 此位若置’1’,则当计数器值达到40h,即产生中断。此中断只能由硬件在复位后清除。

4.开启了中断,那么当然要设置中断优先级

NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn;  //窗口看门狗中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02;  //抢占优先级为2NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;					//子优先级为3NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;  //使能窗口看门狗NVIC_Init(&NVIC_InitStructure);

5.运行原理

实际他就是一个倒计数定时器, 当我们设置的初始值减到0x3F的时候,会产生复位, 如果我们开启了复位前中断,那么会先运行中断, 然后复位.我们可以在复位中断保存一些数据,.

目前在实际项目还没用过, 没有对时序要求这么严格的项目.

正点原子例程代码

void WWDG_Init(u8 tr,u8 wr,u32 fprer)
{NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE); //使能窗口看门狗时钟WWDG_CNT=tr&WWDG_CNT;   //初始化WWDG_CNT. WWDG_SetPrescaler(fprer); //设置分频值WWDG_SetWindowValue(wr); //设置窗口值WWDG_Enable(WWDG_CNT);  //开启看门狗NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn;  //窗口看门狗中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02;  //抢占优先级为2NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;					//子优先级为3NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;  //使能窗口看门狗NVIC_Init(&NVIC_InitStructure);WWDG_ClearFlag();//清除提前唤醒中断标志位WWDG_EnableIT();//开启提前唤醒中断
}//窗口看门狗中断服务程序 
void WWDG_IRQHandler(void)
{WWDG_SetCounter(WWDG_CNT); //重设窗口看门狗值WWDG_ClearFlag();//清除提前唤醒中断标志位LED1=!LED1;
}

http://www.lryc.cn/news/143118.html

相关文章:

  • 开发新能源的好处
  • error: can‘t find Rust compiler
  • 全面解析MES系统中的车间退料管理
  • 探究finally代码块是否执行
  • leetcode刷题(字符串相加、包含每个查询的最小区间、模拟行走机器人、环形子数组的最大和、满足不等式的最大值、四数之和、树中距离之和)
  • Grafana reporter定时报表踩坑记录
  • Flutter 状态管理引子
  • CFC编程入门_【10分钟学会】
  • golang无需创建新切片
  • Django基础5——ORM中间程序
  • SpringAOP详解(上)
  • C++ 存储类
  • 【教程分享】Docker搭建Zipkin,实现数据持久化到MySQL、ES
  • 数据库——MySQL高性能优化规范
  • openapi中job提交
  • Spring Boot 整合 分布式搜索引擎 Elastic Search 实现 数据聚合
  • 深入探讨代理技术:保障网络安全与爬虫效率
  • 【云原生】Docker私有仓库 RegistryHabor
  • 二叉树先序遍历的两种思路
  • 小研究 - JVM 逃逸技术与 JRE 漏洞挖掘研究(一)
  • 好用的可视化大屏适配方案
  • 言有三新书出版,《深度学习之图像识别(全彩版)》上市发行,配套超详细的原理讲解与丰富的实战案例!...
  • 英特尔开始加码封装领域 | 百能云芯
  • 基于大数据+django+mysql的学习资源推送系统的设计与实现(含报告+源码+指导)
  • CCF HPC China2023 | 盛大开幕,邀您关注澎峰科技
  • 【git进阶使用】 告别只会git clone 学会版本控制 ignore筛选 merge冲突等进阶操作
  • 【【萌新的STM32学习-16中断的基本介绍1】】
  • ctfshow-红包题第二弹
  • C# winform中无标题栏窗口如何实现鼠标拖动?
  • 【操作系统】各平台定时器粒度