<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[WDG 16bit 定时器实现 4s 喂狗超时复位 Demo]]></title><description><![CDATA[<h1>1. 问题背景</h1>
<ol>
<li>软件：MD24 SDK_1_4_1 Wdg_Demo</li>
<li>硬件：MD24 EVB</li>
<li>背景描述：</li>
</ol>
<ul>
<li>有客户反馈 MD24 WDG 的定时器只有 16bit，无法设置较长的 WDG 复位时间，因此可以使用 WDG IRQ 实现较长时间的 WDG 超时复位。</li>
</ul>
<h1>2. 实现原理</h1>
<h2>2.1 硬件配置</h2>
<ul>
<li>WDG时钟源：FXOSC (24MHz)</li>
<li>WDG时钟分频：16</li>
<li>WDG超时值：60000</li>
<li>中断周期：(24MHz / 16) / 60000 = 25Hz → 40ms</li>
</ul>
<h2>2.2 软件实现</h2>
<ul>
<li>WDG初始化：配置  WDG为 40ms 中断一次</li>
<li>中断处理：在 WDG 中断中计数，每 40ms 计数一次</li>
<li>喂狗逻辑：计数小于 100 时继续喂狗（40ms × 100 = 4s）</li>
<li>超时处理：计数达到 100 时停止喂狗，等待 WDG 复位</li>
</ul>
<h2>2.3 关键代码</h2>
<ol>
<li>WDG 配置</li>
</ol>
<pre><code>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,
};
</code></pre>
<ol start="2">
<li>中断处理函数</li>
</ol>
<pre><code>/**
 * @brief WDG中断处理函数
 * @details 每40ms触发一次，计数到100次时（4s）停止喂狗，导致WDG复位
 */
void WDG_TSTIRQHandler(void)
{
    /* 清除中断标志 */
    WDG0-&gt;INTF = WDG_INTF_IF_MASK;
    
    /* 翻转 IO，指示中断触发 */
    PINS_DRV_TogglePins(GPIOD,1&lt;&lt;8);
    
    /* 增加4s计数器 */
    Wdg_flag_4s++;
    
    /* 当计数小于100时喂狗（40ms * 100 = 4s） */
    if(100 &gt; Wdg_flag_4s )
    {
        WDG_DRV_Trigger(0); 
    }
    else
    {
        /* 计数达到100，停止喂狗，等待WDG复位 */
    }
}
</code></pre>
<h1>3. 使用方法</h1>
<ol>
<li>编译代码：使用 IDE 编译整个工程</li>
<li>下载程序：将编译好的程序下载到 MD24 开发板</li>
<li>观察现象：</li>
</ol>
<ul>
<li>
<p dir="auto">IO 每 40ms 反转一次<br />
<img src="https://yt-static-main.oss-cn-shanghai.aliyuncs.com/nodebb/710/698621a9-87e4-4de1-b6dc-e7fb8058704c.png" alt="6e1c7ba6-a570-4abf-bfc1-c9714302fd73-image.png" class=" img-fluid img-markdown" /></p>
</li>
<li>
<p dir="auto">反转100 次后（约 4s），IO 停止反转，随后系统会因 WDG 超时而复位，复位后，程序会重新开始执行<br />
<img src="https://yt-static-main.oss-cn-shanghai.aliyuncs.com/nodebb/710/6db98faa-f752-4f34-92c6-99c1d7c7917b.png" alt="80730bc4-938a-45b8-97e2-494a71c79776-image.png" class=" img-fluid img-markdown" /></p>
</li>
</ul>
<h1>4. 注意事项</h1>
<ol>
<li>时钟配置：确保 WDG 时钟源和分频设置正确，以获得准确的中断周期</li>
<li>计数设置：根据需要的超时时间调整计数阈值（当前为100，对应4s）</li>
<li>中断优先级：确保 WDG 中断优先级设置合理，避免被其他中断长时间占用</li>
<li>喂狗时机：在实际应用中，应在适当的时机喂狗，确保系统正常运行</li>
</ol>
<h1>5. 扩展应用</h1>
<p dir="auto">此方法可以扩展到更长时间的 WDG 超时复位：</p>
<ul>
<li>10s 超时：计数阈值设置为 250（40ms × 250 = 10s）</li>
<li>30s 超时：计数阈值设置为 750（40ms × 750 = 30s）</li>
<li>1min 超时：计数阈值设置为 1500（40ms × 1500 = 60s）</li>
</ul>
]]></description><link>https://forum.ytmicro.com/topic/1910/wdg-16bit-定时器实现-4s-喂狗超时复位-demo</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Apr 2026 14:13:49 GMT</lastBuildDate><atom:link href="https://forum.ytmicro.com/topic/1910.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Apr 2026 03:23:50 GMT</pubDate><ttl>60</ttl></channel></rss>