STM32 마이크로 컴퓨터의 SLEEP 모드를 디버깅하는 방법

확인 환경


  • STM32 마이크로 컴퓨터
  • Keil μVision 및 TrueSTUDIO
  • ST-Link/V2
  • STM32Cube (HAL 라이브러리)

  • SLEEP 모드 구현



    우선, SLEEP 모드의 구현은 대체로 이하가 됩니다.
    /* 
     不要な割り込みを止める
    */
    HAL_SuspendTick();
    HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
    HAL_ResumeTick();
    /* 
     割り込みを再開 
    */
    

    불필요한 인터럽트 중지



    SLEEP 상태에서 인터럽트가 들어가면 SLEEP 상태가 해제되어 버리므로,
    타이머 등의 불필요한 인터럽트를 정지시켜 둡니다.

    SysTick 타이머 중지



    SysTick의 인터럽트도 정지합니다.
    CubeMX의 HAL 라이브러리에서는 다음을 호출합니다.HAL_SuspendTick();
    복귀.HAL_ResumeTick();

    SLEEP 모드로 전환



    이하의 호출로 SLEEP 모드가 됩니다.HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
    SLEEP 모드가 해제될 때까지 상기 호출로부터 돌아오지 않습니다.

    SLEEP 모드에서 복귀



    외부 인터럽트나 타이머 등의 인터럽트가 들어가면 SLEEP 모드가 해제됩니다.
    그 인터럽트를 벗어나면, 전항의 HAL_PWR_EnterSLEEPMode()의 계속으로부터 처리가 재개합니다.

    디버거를 떨어뜨리지 않는 방법



    Keil μVision 또는 TrueSTUDIO로 디버깅하는 동안 SLEEP 모드로 전환하면,
    링크가 끊어져 디버그 상태에서 빠져 버립니다.

    미리 이하를 불러 두는 것으로, SLEEP 모드중의 인터럽트를 브레이크 포인트로 잡거나 SLEEP 모드로부터의 복귀도 트레이스 할 수 있습니다.HAL_DBGMCU_EnableDBGSleepMode();

    다만, 이것에 의해 클럭이 공급되어, 전력을 소비해 버리므로,
    프로젝트 설정에서 매크로를 정의하고 디버깅시에만 호출하도록 합니다.

    SLEEP 상태에서 디버거를 연결하는 방법



    Keil μVision의 기본 설정은 마이크로 컴퓨터가 SLEEP 상태에있을 때 디버거로 연결할 수 없습니다.
    option에서 다음과 같이 "Connect: under Reset"을 설정해 둡니다.


    요약


    /* 
     不要な割り込みを止める
    */
    HAL_SuspendTick();
    #if DEBUG
    HAL_DBGMCU_EnableDBGSleepMode();
    #endif
    HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
    HAL_ResumeTick();
    /* 
     割り込みを再開 
    */
    

    좋은 웹페이지 즐겨찾기