【单片机】独立看门狗IWDG初始化

目录

看门狗简介:

初始化例子:

看门狗使能:

写保护:

看门狗重载:

看门狗复位时间计算:基本上看stm中文手册对照框图就很明确


看门狗简介:

此器件具有两个嵌入式看门狗外设,具有安全性高、定时准确及使用灵活的优点。两个看门狗外设(独立和窗口)均可用于检测并解决由软件错误导致的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。
独立看门狗 (IWDG) 由其专用低速时钟 (LSI) 驱动,因此即便在主时钟发生故障时仍然保持 工作状态。窗口看门狗 (WWDG) 时钟由 APB1 时钟经预分频后提供,通过可配置的时间窗 口来检测应用程序非正常的过迟或过早的操作。
IWDG 最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作并且对时 间精度要求较低的场合。WWDG 最适合那些要求看门狗在精确计时窗口起作用的应用程 序。有关窗口看门狗的详细信息,

初始化例子:

/**

 * @description: 看门狗初始化

 * @detail:

 * @return {*}

 * @author: lkc

 */

void Bsp_IWDGInit(void)

{

    /* 大约4 */

    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //取消寄存器写保护

    IWDG_SetPrescaler(IWDG_Prescaler_32); //设置 IWDG分频系数

    IWDG_SetReload(0x0FFF); //设置 IWDG装载值

    /* 开启看门狗*/

    IWDG_Enable();

    /* 喂狗 */

    IWDG_ReloadCounter();

    return;

}

看门狗使能:

#define KR_KEY_ENABLE    ((uint16_t)0xCCCC)

/**

  * @brief  Enables IWDG (write access to IWDG_PR and IWDG_RLR registers disabled).

  * @param  None

  * @retval None

  */

void IWDG_Enable(void)

{

  IWDG->KR = KR_KEY_ENABLE;

}

写保护:

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //取消寄存器写保护

#define IWDG_WriteAccess_Enable     ((uint16_t)0x5555)

/**

  * @brief  Enables or disables write access to IWDG_PR and IWDG_RLR registers.

  * @param  IWDG_WriteAccess: new state of write access to IWDG_PR and IWDG_RLR registers.

  *          This parameter can be one of the following values:

  *            @arg IWDG_WriteAccess_Enable: Enable write access to IWDG_PR and IWDG_RLR registers

  *            @arg IWDG_WriteAccess_Disable: Disable write access to IWDG_PR and IWDG_RLR registers

  * @retval None

  */

void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess)

{

  /* Check the parameters */

  assert_param(IS_IWDG_WRITE_ACCESS(IWDG_WriteAccess));

  IWDG->KR = IWDG_WriteAccess;

}

看门狗重载:

#define KR_KEY_RELOAD    ((uint16_t)0xAAAA)

/**

  * @brief  Reloads IWDG counter with value defined in the reload register

  *         (write access to IWDG_PR and IWDG_RLR registers disabled).

  * @param  None

  * @retval None

  */

void IWDG_ReloadCounter(void)

{

  IWDG->KR = KR_KEY_RELOAD;

}

看门狗复位时间计算:基本上看stm中文手册对照框图就很明确

总的溢出时间T_{out}(超时时间)=(IWDG_RLR寄存器对应的装载数值) * (看门狗时钟周期) 

    IWDG_SetPrescaler(IWDG_Prescaler_32); //设置 IWDG分频系数

    IWDG_SetReload(0x0FFF); //设置 IWDG装载值

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值