看门狗电路:工作原理与应对策略
在嵌入式系统中,单片机可能会因外界的干扰导致程序异常,甚至使整个系统陷入瘫痪状态。为了应对这一问题,看门狗电路应运而生,这是一种用于监控单片机运行状态的芯片。
看门狗电路如同系统的守护者,一旦在设定的时间间隔内没有收到来自单片机的正常信号(也称为“喂狗信号”),它会启动一个内部定时器并判断是否溢出。如果定时器溢出,看门狗会采取行动,通常是拉低复位引脚,使芯片复位,从而恢复系统的正常运行。目前,许多单片机已经内置了内部看门狗电路,其工作原理与外部看门狗相似。
接下来,我们通过几个实际遇到的问题来深入了解看门狗及其应对策略:
1. 内部看门狗的问题与解决策略
一位客户使用STM32研发产品时,需要在原有代码中增加看门狗程序。但在仿真调试过程中,发现了一个奇怪的问题:程序在断点处暂停后,芯片会自己全速运行。
这主要是因为仿真调试时,单片机的内核会停止,但内部看门狗可能仍在运行。由于无法“喂狗”,看门狗会将芯片复位。有两种策略可以解决这一问题:一是对相关寄存器进行初始化,如STM32F10x手册中的DBGMCU_CR寄存器,控制调试时的外设行为;二是在驱动设置中设置初始化宏的参数,增加配置项来禁用看门狗。如果芯片没有类似的寄存器,那么只能在初始化时禁用看门狗。
2. 外部看门狗的挑战与应对方法
当存在外部看门狗且其控制端被引出到编程接口时,可能会遇到下载程序过程中通信突然中断的问题。例如,为客户添加的Cypress公司的Cortex-M3芯片MB9F8268就遇到了这样的问题。原因是编程过程过长,没有及时喂狗,导致芯片被复位。为了解决这个问题,可以在下载过程中利用JTAG中的时钟线(TCK),将其接在看门狗芯片的控制端,为看门狗提供持续的脉冲信号,防止定时器溢出触发芯片复位。
3. 无外部看门狗控制端的解决方案
如果外部看门狗的控制端没有引出,那么除了断开连接,仿真和编程工具无法控制外部看门狗。合理设计仿真、编程接口以及应用程序变得尤为重要。对于这种情况,建议用户在设计系统时考虑如何避免看门狗对编程和仿真的影响。
为了应对看门狗电路带来的挑战,工程师们可以采取以下策略:在程序初始化时禁用内部看门狗;配置初始化宏以禁用看门狗;定时喂狗;在必要时断开外部看门狗;或在下载过程中利用调试时钟为看门狗提供信号。希望这些策略能帮助工程师们更好地设计和调试嵌入式系统,避免被“看门狗”困扰。