IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32学习笔记:IWDG_独立看门狗 -> 正文阅读

[嵌入式]STM32学习笔记:IWDG_独立看门狗

?1、简介

独立看门狗就是一个12位的递减计数器,最大值0xFFF;
计数器的值从某一个值减到0时,系统产生一个复位信号(IWDG_RESET);
在计数器没减到0之前,刷新计数器的值,就不会产生复位信号(就是要喂狗)。

1.1 IWDG性能

????????(1)自由运行的递减计数器
????????(2)时钟由独立的RC振荡器提供(停止和待机模式下仍可工作)

1.2 IWDG功能

  • ? ? ? 开启IWDG:键寄存器写入(0xCCCC);
  • ? ? ? 计数器从0xFFF递减计数;
  • ? ? ? 计数到0x000,产生复位信号(IWDG_RESET);
  • ? ? ? 键寄存器中写入(0xAAAA),重装载寄存器中的值被加载到计数器,避免看门狗复位。

1.3 硬件看门狗

????????如果启用了“硬件看门狗”,系统上电复位后,看门狗自行运行;
????????如果计数器计数结束前,软件没有向键寄存器写入相应的值,系统就会复位。

2. IWDG的寄存器

2.1 重装载寄存器(IWDG_RLR)

12位寄存器,存储(要刷新到计数器的值),决定了看门狗溢出的时间。

2.2 键寄存器(IWDG_KR)

独立看门狗的控制寄存器
软件启动看门狗:键寄存器中写入0xCCCC,看门狗启动后就关不掉,只有复位才能关掉。

0xAAAA把RLR中的值重装载到计数器
0x555PR和RLR这两个寄存器可写
0xCCCC启动看门狗

2.3 状态寄存器(SR)

RVU:看门狗计数器重新装载值更新
PVU:看门狗预分频值更新

?3、IWDG的软件设计

(1)取消寄存器写保护
???????取消PR和RLR的写保护,使得后面可以操作者两个寄存器

/* 使能对寄存器 IWDG_PR 和 IWDG_RLR 的写操作 */
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

(2)设置IWDG的预分频系数和重装载值

void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); //设置 IWDG 预分频值
void IWDG_SetReload(uint16_t Reload); //设置 IWDG 重装载值

?溢出时间的计算方法?
Tout=((4×2^prer) ×rlr) /4
prer:分频
rlr:加载值?

(3)重载计数值喂狗
???????向IWDG_KR写入0xAAAA,刷新计数器的值,喂狗

IWDG_ReloadCounter();?

(4)启动看门狗
? ? ? ?向 IWDG_KR 写入 0XCCCC

IWDG_Enable(); //使能 IWDG

3.1 看门狗初始化

void IWDG_Init(u8 prer,u16 rlr)
{
    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
    IWDG_SetPrescaler(uint8_t IWDG_Prescaler);
    IWDG_SetReload(uint16_t Reload);
    IWDG_ReloadCounter();
    IWDG_ReloadCounter();    
}

3.2 喂狗函数

void IWDG_Feed(void)
{
    IWDG->KR=0xAAAA;
}

3.3 主函数

通过按键来喂狗,如果喂狗成功,则亮绿灯,如果喂狗失败的话,系统重启, 程序重新执行

int main(void)
{
    LED_GPIO_Config();
    
    /* 检测独立看门狗复位是否被设置 */
    if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST)!= RESET)
    {
       /*独立看门狗复位了,红灯亮*/
       LED_RED; 
       RCC_ClearFlag();
    }
    else
    {
        lED_BLUE;
    }
    
    Key_GPIO_Config();
    
    /*4分频,重载值625,溢出时间1s*/
    IWDG_Init(4,625);
    
    while(1)
    {
        if(Key_Scan(KEY1_GPIO_PORT,KEY1_PIN) == KEY_ON)
        {
            IWDG_Feed();
            LED_GREEN;
        }
    }
}

3.4 喂狗函数的应用

while 部分是我们在项目中具体需要写的代码,这部分的程序可以用独立看门狗来监控,

  • 如果我们知道这部分代码的执行时间,比如是 500ms,那么我们可以设置独立看门狗的溢出时间是510ms,比 500ms 多一点;
  • 如果要被监控的程序没有跑飞正常执行的话,那么执行完毕之后就会执行喂狗的程序,如果程序跑飞了那程序就会超时,到达不了喂狗的程序,此时就会产生系统复位;
  • 但是也不排除程序跑飞了又跑回来了,刚好喂狗了,歪打正着。所以要想更精确的监控程序,可以使用窗口看门狗,窗口看门狗规定必须在规定的窗口时间内喂狗,早了不行,晚了也不行。
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 02:09:57  更:2022-09-15 02:11:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:40:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码