1. 看门狗配置实战指南
在实际嵌入式开发中,看门狗就像是系统的"守护神",它能时刻监控程序运行状态,一旦发现程序跑飞或死机,就会立即触发复位让系统重新恢复正常。S32K144微控制器内置了强大的看门狗模块,但很多新手在配置时经常会遇到各种坑,我自己就曾经因为看门狗配置不当导致系统频繁复位,折腾了好几天才找到问题所在。
1.1 看门狗初始化详解
看门狗的初始化可不是随便写几个寄存器就完事的,这里面有很多细节需要注意。先来看看我的初始化代码:
void WatchDogInitialize(void)
{
#if(WATCH_DOG_EANBLE)
RTOS_HalDisableScheduler(); // 先关闭中断,避免配置过程中被打断
WDOG->CNT = 0xD928C520; // 解锁看门狗寄存器
while((WDOG->CS & WDOG_CS_ULK_MASK) == 0); // 等待解锁完成
WDOG->TOVAL = (500 * 1); // 设置超时值为1秒
/**** 时钟配置:128K LPO,256分频 *****/
WDOG->CS = WDOG_CS_EN(1) | WDOG_CS_PRES(1) | WDOG_CS_CLK(1);
while((WDOG->CS & WDOG_CS_RCS_MASK) == 0); // 等待新配置生效
RTOS_HalEnableScheduler(); // 重新开启中断
#endif
}
这里有几个关键点需要特别注意。首先是解锁序列,S32K144的看门狗寄存器是写保护的,必须按照特定的序列写入0xD928C520才能解锁。我曾经就因为忘记解锁而浪费了半天时间调试,明明代码看起来没问题,但寄存器就是写不进去。
时钟配置也很重要,我选择的是内部低功耗振荡器(LPO)128kHz,并设置了256分频。这样计算下来,每个计数周期就是2ms(1/128k


4554

被折叠的 条评论
为什么被折叠?



