查看: 168|回复: 0

[在线活动] 【 2025 AI训练营】MCXA346VLH看门狗定时器(WDT)的使用方法

[复制链接]
  • TA的每日心情
    奋斗
    昨天 08:41
  • 签到天数: 258 天

    连续签到: 1 天

    [LV.8]以坛为家I

    7

    主题

    3915

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    4166
    最后登录
    2026-4-10
    发表于 2025-12-12 09:51:05 | 显示全部楼层 |阅读模式
    本帖最后由 zjk103 于 2025-12-12 16:43 编辑

    MCXA346VLH看门狗定时器(WDT)的使用方法是什么?
    MCXA346VLH看门狗定时器(WDT)的使用方法如下:
    1. 看门狗定时器简介
    MCXA346VLH内置看门狗定时器,用于检测和恢复系统故障。如果主程序未能定期重置看门狗,系统将自动复位。
    2. 主要特性
    • 独立时钟源(内部RC振荡器)
    • 可配置超时时间
    • 支持窗口模式
    • 低功耗模式下可配置行为
    • 支持中断或复位操作

    3. 基本使用步骤步骤1:初始化看门狗c




    #include "fsl_wdog.h"void WDOG_Init(void){    wdog_config_t config;        // 获取默认配置    WDOG_GetDefaultConfig(&config);        // 配置参数    config.timeoutValue = 0xFFF;  // 超时值    config.enableWdog = true;     // 使能看门狗    config.clockSource = kWDOG_LpoClockSource;  // 时钟源    config.prescaler = kWDOG_ClockPrescalerDivide1;  // 分频        // 初始化看门狗    WDOG_Init(WDOG1, &config);}步骤2:定期喂狗c




    void Feed_Watchdog(void){    WDOG_Refresh(WDOG1);  // 重置看门狗计数器}// 在主循环中定期调用while(1){    // 业务代码        // 定期喂狗(必须在超时前调用)    Feed_Watchdog();}4. 配置选项超时时间计算text




    超时时间 = (TimeoutValue + 1) / (WDOG时钟频率 / 分频系数)窗口模式配置c




    config.enableWindowMode = true;    // 使能窗口模式config.windowValue = 0x800;        // 设置窗口值
    • 只有在计数器值小于WindowValue时喂狗才有效
    • 防止过早喂狗

    中断配置c




    config.workMode.enableInterrupt = true;  // 使能中断config.workMode.enableReset = false;     // 禁用复位// 配置中断EnableIRQ(WDOG1_IRQn);NVIC_SetPriority(WDOG1_IRQn, 3);5. 完整示例代码c




    #include "fsl_wdog.h"#include "board.h"// 看门狗中断处理函数void WDOG1_IRQHandler(void){    // 处理看门狗中断    if (WDOG_GetStatusFlags(WDOG1) & kWDOG_InterruptFlag)    {        WDOG_ClearInterruptStatus(WDOG1, kWDOG_InterruptFlag);        // 执行恢复操作    }    __DSB();}void Init_Watchdog(void){    wdog_config_t config;        // 获取默认配置    WDOG_GetDefaultConfig(&config);        // 自定义配置    config.timeoutValue = 0x1000;          // 设置超时值    config.enableWdog = true;              // 使能看门狗    config.clockSource = kWDOG_LpoClockSource;    config.prescaler = kWDOG_ClockPrescalerDivide4;    config.enableWindowMode = false;       // 禁用窗口模式    config.windowValue = 0;        // 工作模式配置    config.workMode.enableInterrupt = false;  // 使用复位模式    config.workMode.enableReset = true;    config.workMode.enablePowerDown = false;    config.workMode.enableTimeOutAssert = true;        // 初始化看门狗    WDOG_Init(WDOG1, &config);}int main(void){    // 硬件初始化    BOARD_InitBootClocks();    BOARD_InitBootPins();        // 初始化看门狗    Init_Watchdog();        while(1)    {        // 主程序逻辑                // 定期喂狗(必须小于超时时间)        WDOG_Refresh(WDOG1);                // 延时或其他操作        SDK_DelayAtLeastUs(100000, SystemCoreClock);    }}6. 注意事项
    • 一次性使能:看门狗一旦使能,通常无法通过软件禁用
    • 喂狗时机:确保在超时前喂狗,但不要太频繁
    • 时钟源:使用独立时钟源,即使主时钟故障也能工作
    • 调试模式:在调试时可能需要禁用看门狗
    • 低功耗模式:根据需求配置在低功耗模式下的行为

    7. 调试建议c




    // 在开发阶段,可以添加调试代码#define WATCHDOG_DEBUG 1#if WATCHDOG_DEBUG    // 添加喂狗状态监控    // 或临时禁用看门狗    // config.enableWdog = false;#endif
    使用MCXA346VLH的看门狗时,请参考官方参考手册和SDK示例代码,确保正确配置所有参数。




























    哎...今天够累的,签到来了~
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2026-4-10 00:34 , Processed in 0.083808 second(s), 19 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表