728x90
반응형

Holtek사 MCU중 HT32F52357와 HT32F52367은 기능은 같은데 Flash와 SRAM 용량 차이가 있음. Holtek 사에 예제 프로그램을 이용하여 WDT (Watchdog Timer)를 사용해 보자.

 

와치독 타이머는 MCU 사용할때 특별한 사유가 없으면 항상 사용해주는것이 좋다.

MCU가 갑자기 멈추거나 프로그램에서 버그가 있어서 무한 루프로 빠지거나 할때 일정 시간안에 카운터를 초기화 안해주면  Reset을 걸어서 다시 시작 할수 있도록 해준다.

example -> WDT -> Auto_Enable 폴더에 _CreateProject.Bat를 실행하여 소스가 만들어지면 MDK_ARMv5폴더에서실행파일을 실행해 주자.

F7눌러 Build 해주고 Ctrl+F5를 눌러 디버깅 모드로 들어간후 천천히 F10키를 여러번 눌러 실행하면 LED2이 깜빡이는것을 확인 할수 있다.

이때 EVM에 하드웨어 리셋을 누르면 LED1이 점등 한다.

int main(void)
{
  /* Enable WDT APB clock                                                                                   */
  CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
  CKCUClock.Bit.WDT = 1; //와치독 타이머에 클럭 공급
  CKCU_PeripClockConfig(CKCUClock, ENABLE); //클럭 셋팅

  RETARGET_Configuration();           /* Retarget Related configuration                                     */
  HT32F_DVB_LEDInit(HT_LED1); //LED1 Port Setting
  HT32F_DVB_LEDInit(HT_LED2); //LED2 Port Setting

  if(RSTCU_GetResetFlagStatus(RSTCU_FLAG_WDTRST) == SET) //MCU가 무엇때문에 리셋이 되었는지 확인.
  {
    /* WDT generates a reset request and then turns on LED2.                                                */
    HT32F_DVB_LEDOn(HT_LED2); //MCU가 와치독 때문에 리셋되었다면 LED2를 켜라.
  }
  else
  {
    /* Other functions generate a reset request and then turns on LED1.                                     */
    HT32F_DVB_LEDOn(HT_LED1); //MCU가 와치독 때문에 리셋된것이 아니라면 LED1을 켜라.
  }
  RSTCU_ClearAllResetFlag();          /* Clear reset flag                                                   */ //MCU에 저장되어 있는 리셋 플래그를 삭제

  /* Enable the Auto_WDT                                                                                    */
  if(AutoWDT_Cmd(ENABLE) == ERROR) //와치독을 켜고 에러가 없는지 확인
  {
    /* Fail, Turn off LED1 and LED2.                                                                        */
    HT32F_DVB_LEDOff(HT_LED1); //와치독을 켜고 에러가 발생되면 LED1 Off
    HT32F_DVB_LEDOff(HT_LED2); //와치독을 켜고 에러가 발생되면 LED2 Off
  }

  while (1)
  {
    WDT_Restart();          /* Reload Counter as WDTV Value                                                 */ //와치독 카운터를 초기화 해라.
  }
}

LED2가 점등되는 상황이 잘 안나온다면 디버깅 모드를 나간후 다시 들어와서 실행하지 않고 약 8초 정도 기다려 주면 LED2가 점등 되는것을 확인 할수 있다. 이때 EVM에 Reset 버튼을 누르면 LED1이 점등 된다.

Auto_Enable.zip
4.87MB

728x90
반응형

+ Recent posts