N32L406C8芯片RTC闹钟唤醒与独立看门狗IWDG配合使用

N32L406C8芯片RTC闹钟唤醒与独立看门狗IWDG配合使用,RTC时钟采用外部32.768Khz外部晶振,闹钟A中断用于芯片休眠唤醒,由于该芯片RTC驱动已发布过,此处不在记录,如果项目需求不一样,可以修改相关代码,以适应设计需求。闹钟A可以设置唤醒时间,由于项目需要只做了24小时之内的闹钟,这样,产品最大休眠时间可以做到一天起来一次,有效减少产品功耗。理想是美好的,现实却很骨感,大批量测试发现有一部分芯片总是程序跑飞,后来又加了窗口看门狗,结果依旧不理想,最后,实在没有办法,就只能用独立看门狗了,缺点是,独立看门狗一旦启动,无法停止(即使休眠模式下,独立看门狗也在工作),,所以芯片必须周期性唤醒,喂下狗,相比之前,功耗会增加;有点是芯片跑飞,可以救命,独立看门狗周期设置为最大:26.2144秒,RTC闹钟25秒唤醒一次喂狗:IWDG_ReloadKey();这里主要做下设计思路记录,代码次之。仅记录看门狗初始化代码,代码实测。

void iwdgInit() //初始化独立看门狗

{

    RCC_EnableLsi(ENABLE);

    /* Wait till LSI is ready */

    while (RCC_GetFlagStatus(RCC_CTRLSTS_FLAG_LSIRD) == RESET)

    {

    }

    IWDG_WriteConfig(IWDG_WRITE_ENABLE);

    /* IWDG counter clock: LSI/32 */

    IWDG_SetPrescalerDiv(IWDG_PRESCALER_DIV256);//6.4ms计数加1

    /* Set counter reload value to obtain 250ms IWDG TimeOut.

       Counter Reload Value = 250ms/IWDG counter clock period

                            = 250ms / (LSI/32)

                            = 0.25s / (LsiFreq/32)

                            = LsiFreq/(32 * 4)

                            = LsiFreq/128 */

    // IWDG_CntReload(LsiFreq / 128);

    IWDG_CntReload(4095); //0-4095 溢出周期:6.4*4096 = 26.2144秒

    /* Reload IWDG counter */

    IWDG_ReloadKey();

    /* Enable IWDG (the LSI oscillator will be enabled by hardware) */

    IWDG_Enable();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kevinpan2011

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值