【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(); //喂狗
    }

}

  当如果不启用喂狗的操作,通过串口打印的方式来观察,是以一定时间复位整个程序。

 

posted on 2024-10-25 16:59  凡仕  阅读(15)  评论(0编辑  收藏  举报