STM32 마이크로 컴퓨터의 SLEEP 모드를 디버깅하는 방법
확인 환경
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();
/*
割り込みを再開
*/
Reference
이 문제에 관하여(STM32 마이크로 컴퓨터의 SLEEP 모드를 디버깅하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/forest1/items/192f2c7d2de231269075
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
/*
不要な割り込みを止める
*/
HAL_SuspendTick();
HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
HAL_ResumeTick();
/*
割り込みを再開
*/
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();
/*
割り込みを再開
*/
Reference
이 문제에 관하여(STM32 마이크로 컴퓨터의 SLEEP 모드를 디버깅하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/forest1/items/192f2c7d2de231269075
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
/*
不要な割り込みを止める
*/
HAL_SuspendTick();
#if DEBUG
HAL_DBGMCU_EnableDBGSleepMode();
#endif
HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
HAL_ResumeTick();
/*
割り込みを再開
*/
Reference
이 문제에 관하여(STM32 마이크로 컴퓨터의 SLEEP 모드를 디버깅하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/forest1/items/192f2c7d2de231269075텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)