跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YT SDK
  4. WDG 16bit 定时器实现 4s 喂狗超时复位 Demo

WDG 16bit 定时器实现 4s 喂狗超时复位 Demo

已定时 已固定 已锁定 已移动 YT SDK
1 帖子 1 发布者 25 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • KirkK 离线
    KirkK 离线
    Kirk YunTu
    编写于 最后由 编辑
    #1

    1. 问题背景

    1. 软件:MD24 SDK_1_4_1 Wdg_Demo
    2. 硬件:MD24 EVB
    3. 背景描述:
    • 有客户反馈 MD24 WDG 的定时器只有 16bit,无法设置较长的 WDG 复位时间,因此可以使用 WDG IRQ 实现较长时间的 WDG 超时复位。

    2. 实现原理

    2.1 硬件配置

    • WDG时钟源:FXOSC (24MHz)
    • WDG时钟分频:16
    • WDG超时值:60000
    • 中断周期:(24MHz / 16) / 60000 = 25Hz → 40ms

    2.2 软件实现

    • WDG初始化:配置 WDG为 40ms 中断一次
    • 中断处理:在 WDG 中断中计数,每 40ms 计数一次
    • 喂狗逻辑:计数小于 100 时继续喂狗(40ms × 100 = 4s)
    • 超时处理:计数达到 100 时停止喂狗,等待 WDG 复位

    2.3 关键代码

    1. WDG 配置
    const wdg_user_config_t wdg_config0 = {
        .clockSource=WDG_IPC_CLOCK,
        .opMode={
            .deepsleep=false,
            .debug=false,
        },
        .updateEnable=true,
        .intEnable=true,
        .winEnable=false,
        .windowValue=30000,
        .timeoutValue=60000,
        .apbErrorResetEnable=0,
    };
    
    1. 中断处理函数
    /**
     * @brief WDG中断处理函数
     * @details 每40ms触发一次,计数到100次时(4s)停止喂狗,导致WDG复位
     */
    void WDG_TSTIRQHandler(void)
    {
        /* 清除中断标志 */
        WDG0->INTF = WDG_INTF_IF_MASK;
        
        /* 翻转 IO,指示中断触发 */
        PINS_DRV_TogglePins(GPIOD,1<<8);
        
        /* 增加4s计数器 */
        Wdg_flag_4s++;
        
        /* 当计数小于100时喂狗(40ms * 100 = 4s) */
        if(100 > Wdg_flag_4s )
        {
            WDG_DRV_Trigger(0); 
        }
        else
        {
            /* 计数达到100,停止喂狗,等待WDG复位 */
        }
    }
    

    3. 使用方法

    1. 编译代码:使用 IDE 编译整个工程
    2. 下载程序:将编译好的程序下载到 MD24 开发板
    3. 观察现象:
    • IO 每 40ms 反转一次
      6e1c7ba6-a570-4abf-bfc1-c9714302fd73-image.png

    • 反转100 次后(约 4s),IO 停止反转,随后系统会因 WDG 超时而复位,复位后,程序会重新开始执行
      80730bc4-938a-45b8-97e2-494a71c79776-image.png

    4. 注意事项

    1. 时钟配置:确保 WDG 时钟源和分频设置正确,以获得准确的中断周期
    2. 计数设置:根据需要的超时时间调整计数阈值(当前为100,对应4s)
    3. 中断优先级:确保 WDG 中断优先级设置合理,避免被其他中断长时间占用
    4. 喂狗时机:在实际应用中,应在适当的时机喂狗,确保系统正常运行

    5. 扩展应用

    此方法可以扩展到更长时间的 WDG 超时复位:

    • 10s 超时:计数阈值设置为 250(40ms × 250 = 10s)
    • 30s 超时:计数阈值设置为 750(40ms × 750 = 30s)
    • 1min 超时:计数阈值设置为 1500(40ms × 1500 = 60s)
    1 条回复 最后回复
    0

  • 云途开发生态介绍

    快速上手云途开发生态

  • 云途论坛规则/Yuntu Forum Rules

    发帖前请查看

  • YT CONFIG TOOL调查问卷

    帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

  • can
    24
    demo
    21
    lin stack
    13
    uds
    13
    md14
    6
    fbl
    5
    yt-link
    5
    adc模块
    4
    Online Users
    • 登录

    • 登录或注册以进行搜索。
    • 第一个帖子
      最后一个帖子
    0
    • 版块
    • 最新
    • 标签
    • 热门