• 【单片机】独立看门狗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装载值

  • 相关阅读:
    功率放大器在材料测试中的应用有哪些
    安装opcache和apcu——k8s从入门到高并发系列教程(十二)
    【UE5 Cesium】19-Cesium for Unreal 建立飞行跟踪器(4)
    【static】
    22 mysql range 查询
    报考PMP怕上当,都会遇到哪些坑,我该如何避开这些坑?
    初识Node.js与内置模块
    Multi-Paxos不是一个算法,而是统称
    企业寄件面单隐私保护
    「贪心笔记」通过最少操作次数使得数组的和相等
  • 原文地址:https://blog.csdn.net/qq_20017379/article/details/127955656