根据您提供的代码和参数 IWDG_TIMEOUT = 2500看门狗的超时时间为 2.5 秒

详细计算过程:

1. 时钟配置

  • LSI 时钟频率:40 KHz

  • 预分频因子:32 (FWDGT_PSC_DIV32)

  • 分频后时钟频率:40KHz ÷ 32 = 1.25 KHz

  • 计数周期:1 ÷ 1.25KHz = 0.8 ms

2. 重装载值计算

tmp = (2500 × 10) >> 3
    = 25000 ÷ 8
    = 3125

3. 超时时间计算

超时时间 = 3125 × 0.8 ms
        = 2500 ms
        = 2.5 秒

代码逻辑说明:

void WDGT_Init(void)
{
    uint16_t timeout = 2500;  // 2.5秒
    uint16_t tmp;
    
    fwdgt_write_enable();  // 解除写保护
    
    // 计算重装载值
    tmp = (uint16_t)(2500 * 10) >> 3;  // 3125
    
    // 配置看门狗
    fwdgt_config(3125, FWDGT_PSC_DIV32);  // 分频32,周期0.8ms
    
    fwdgt_counter_reload();  // 重装载计数器
    fwdgt_enable();          // 启动看门狗
}

喂狗要求:

  • 必须在 2.5 秒内调用 fwdgt_counter_reload()函数重置看门狗

  • 否则系统将自动复位

验证公式:

您可以通过以下方法验证任意 IWDG_TIMEOUT 值对应的超时时间:

超时时间(ms) = IWDG_TIMEOUT
重装载值 = IWDG_TIMEOUT × 10 ÷ 8
实际超时时间 = 重装载值 × 0.8 ms
            = (IWDG_TIMEOUT × 10 ÷ 8) × 0.8
            = IWDG_TIMEOUT

结论:代码计算正确,当 IWDG_TIMEOUT = 2500 时,看门狗超时时间为 2.5 秒。

调试过程

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐