打印
[其他]

MM32之独立看门狗

[复制链接]
322|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
IWDG主要性能:


• 自由运行的递减计数器
• 时钟由独立的振荡器提供(可在停止和待机模式下工作)
• 看门狗被激活后,则在计数器计数至0x0000 时产生复位。

IWDG功能描述:

在键寄存器(IWDG_KR)中写入0xCCCC。开始启动独立看门狗;此时计数器开始从其复位值0xFFF 递减计数。当计数器计数到末尾0x000 时,会产生一个复位信号(IWGD_RESET)。无论何时,只要在键寄存器IWDG_KR 中写入0xAAAA,IWDG_RLR 中的值就会被重新加载到计数器,从而避免产生看门狗复位。

看门狗寄存器保护:

IWDG_PR 和IWDG_RLR 寄存器具有写保护功能。要修改这两个寄存器的值,必须先向IWDG_KR 寄存器中写入0x5555。以不同的值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。重装载操作(即写入0xAAAA)也会启动写保护功能。状态寄存器指示预分频值和递减计数器是否正在被更新。



使用特权

评论回复
评论
我爱台妹mmd 2023-1-31 20:22 回复TA
———————————————— 版权声明:本文为CSDN博主「50HZ的Alice」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/badaoshaonian/article/details/99853289 
沙发
我爱台妹mmd|  楼主 | 2023-1-31 20:23 | 只看该作者

使用特权

评论回复
板凳
我爱台妹mmd|  楼主 | 2023-1-31 20:23 | 只看该作者

使用特权

评论回复
地板
我爱台妹mmd|  楼主 | 2023-1-31 20:27 | 只看该作者
下图为预分频寄存器IWDG_PR

使用特权

评论回复
5
我爱台妹mmd|  楼主 | 2023-1-31 20:27 | 只看该作者
由上图可知分频系数有最低的三位来决定4-256分频

独立看门狗(IWDG)

Tout=((4×2^prer) ×rlr) /40Khz

独立看门狗由内部专门的 40Khz 低速时钟(LSI)驱动。

其中 Tout 为看门狗溢出时间(单位为 s);

prer 为看门狗时钟预分频值(IWDG_PR 值),范围为 0~7;

(4×2^prer)整体为实际预分频值,预分频值可取值为4/8/16/32/64/128/256。

rlr 为看门狗的重装载值(IWDG_RLR 的值);

使用特权

评论回复
6
我爱台妹mmd|  楼主 | 2023-1-31 20:28 | 只看该作者

使用特权

评论回复
7
我爱台妹mmd|  楼主 | 2023-1-31 20:29 | 只看该作者
#include "WWDG.h"
#include "led.h"
void wwdg_init(u8 prer,u16 rlr)
{
    RCC->CSR|=RCC_CSR_LSION;//开启内部低速时钟
    IWDG->KR=0X5555;//使能对IWDG->PR和IWDG->RLR的写
    IWDG->PR=prer;  //设置分频系数
    IWDG->RLR=rlr;  //从加载寄存器 IWDG->RLR
    IWDG_Feed();//reload
    IWDG->KR=0XCCCC;//使能看门狗
}
void IWDG_Feed(void)
{
    IWDG->KR=0XAAAA;//reload                                                                                          
}

使用特权

评论回复
8
我爱台妹mmd|  楼主 | 2023-1-31 20:30 | 只看该作者
int main(void)
{
    u8 flage=0;
    delay_init();                     //延时初始化
    LED_Init();                                   //初始化与LED连接的硬件接口   
    uart_nvic_init(SystemCoreClock/1000000,115200);         //串口初始化为115200
   LED1=1;
    KEY_Init();
    printf("uart ok!\r\n");
    wwdg_init(4,625);
    while(1)
    {
        if(KEY_Scan(0)==WKUP_PRES)//按键喂狗函数
        {
            flage=30;
            IWDG_Feed();
            LED1=0;
        }
        delay_ms(500);
        if (flage>0)
        {
        flage--;
        IWDG_Feed();
        printf("IWDG_Feed ok!\r\n");
        }
    }         
}

使用特权

评论回复
9
我爱台妹mmd|  楼主 | 2023-1-31 20:30 | 只看该作者
看门狗的时间的计算在上面我们已经给出了计算的方法,大家看不懂的结合上面的计算过程看一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

420

帖子

0

粉丝