【WCH蓝牙系列芯片】-基于CH592开发板—独立看门狗功能
------------------------------------------------------------------------------------------------------------------------------------
CH592芯片中是有专门的独立看门狗,独立看门狗(IWDG)内部是一个递减运行的 12 位计数器,当计数器的值减为 0 时,将会产生系统复位。 独立看门狗(IWDG)由专用的内部低速时钟(LSI)驱动。
先看一下独立看门狗(IWDG)的配置的寄存器描述
由独立看门狗的寄存器的描述,可以计算出独立看门狗(IWDG)最大的计数时间值为0xFFF/(32k/512)=65.52S
在看门狗键寄存器(R32_IWDG_KR)中,软件要以一定的间隔写入 0xAAAA,重装载计数值,这就是喂狗的操作。否则,当计数器为 0 时,看门狗
会产生复位。
程序代码:
#include "CH59x_common.h" #define FEED_IWDG() {R32_IWDG_KR=0xAAAA;} //需要定时调用喂狗 /********************************************************************* * @fn DebugInit * @brief 调试初始化 * @return none */ void DebugInit(void) { GPIOA_SetBits(GPIO_Pin_9); GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU); GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA); UART1_DefInit(); } //看门狗时间为65S void IWDG_Enable() { R32_IWDG_KR=0x5555; //解除IWDG保护 R32_IWDG_CFG |= (7<<12); //32K分频512,时钟62.5Hz R32_IWDG_CFG &=0xFFFFF000; R32_IWDG_CFG |=0xFFF; //看门狗时间约65s(0xFFF/(32K/512)) R32_IWDG_KR=0xCCCC; //开启IWDG保护 } //看门狗时间为256ms //void IWDG_Enable() //{ // R32_IWDG_KR=0x5555;//解除IWDG保护 // R32_IWDG_CFG |= (7<<12);//32K分频512,时钟62.5Hz // R32_IWDG_CFG &=0xFFFFF000; // R32_IWDG_CFG |=0x10;//看门狗时间约256ms(0x10/(32K/512)) // R32_IWDG_KR=0xCCCC; //} /********************************************************************* * @fn main * @brief 主函数 * @return none */ int main() { SetSysClock(CLK_SOURCE_PLL_60MHz); /* 配置串口调试 */ DebugInit(); PRINT("Start @ChipID=%02X\n", R8_CHIP_ID); IWDG_Enable(); printf("R32_IWDG_CFG = %x\r\n", R32_IWDG_CFG); while(1) { FEED_IWDG(); //喂狗 } }
当如果不启用喂狗的操作,通过串口打印的方式来观察,是以一定时间复位整个程序。