2016. 8. 10. 13:43 devel/개념

stm32f4 절전모드

STM32F4xx 시리즈의 sleep, stop mode에 대해



STM32F4xx block diagram


 stm32f41x_block_diagram

시리즈 마다 다르겠지만 대충 이런 식으로 생겼다

일단은 넘어가자




#Sleep Mode

Sleep Mode는 아래 함수로 쉽게 진입이 가능한데

HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);

Wakeup 조건이 모든 인터럽트기 때문에 sleep으로 들어가기 전에 SysTick 관련 interrupt도 꺼야 한다

안 그러면 잠자리에 눕자마자 일어나는 불상사가......

SysTick 때문에 바로 깨어날 경우 아래와 같이 Tick을 잠시 중단 시키면 된다

 

HAL_SuspendTick();

HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);

HAL_ResumeTick();

 

1번 인자로 PWR_MAINREGULATOR_ON를 이용해도 좋다 그런데 MR이 뭔지 모르겠다

2번째 인자로 PWR_SLEEPENTRY_WFE를 사용해도 된다

여기서 Event가 뭐인고 하니 EXTIexception 등등

자세한 내용은 D022708, 48p Wakeup from WFE 를 참고 바란다

 

 

# 1.2v domain - DM00127514, 112p

core, memory, digital peripherals

 

# STOP MODE - DM00127514, 113p, 120p

1.2v domain, PLLs, HSI, HSE RC oscillator disabled

Internal SRAM, register contents are preserved

SRAM 내용 유지(SRAM에 관한 상세 내용은 아래에), 레지스터 내용 유지

그리고 각종 oscillator domain 관련은 block diagram을 확인 하여 영향도를 체크하자

 

# HSI, HSE - DM00127514, 135p

상세 내역은 pdf 참조

일단은 AHB에 연결된 아해들이 정상 동작 않겠구나 생각해두자

 

그건 그렇고 stop mode에도 2가지 모드가 있다

이하 STOP MODE 해석 안 하는 게 더 나을 꺼 같아서 생략

 

Normal mode

the 1.2 V domain is preserved in nominal leakage mode.

It is the default mode when the main regulator (MR) or the low-power regulator (LPR) is enabled.

- HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);

 

Under drive mode

the 1.2 V domain is preserved in reduced leakage mode.

This mode is only available when the main regulator or the lowpower regulator is in low voltage mode

- HAL_PWREx_EnterUnderDriveSTOPMode(PWR_LOWPOWERREGULATOR_UNDERDRIVE_ON, PWR_SLEEPENTRY_WFI);

 

Under drive mode가 전기 더 덜 먹는다는 이야기

대신 wakeup time이 더 소모 된다.

          

 

#SRAM?

2.3.1 Embedded SRAM, 68p, 71p 참조

MCU 내부에 있는 램. 용량 매우 작다

linker script 작성에 따라서 다르긴 하지만 external RAM 없다는 가정하에

일반적으로 흔히 우리가 생각하는 heap stack이 살아 숨쉬는 RAM이라고 보면 된다

 

STOP mode에서 Under drive Mode 로 진입하면 더욱 저전력 가능

대신 wakeup time이 더 소모

wakeup time의 딜레이를 사용자가 줘야 하는 게 아니라 그냥 좀 더 걸린다 정도로 이해하면 될 듯

그래도 머 ns 단위로 전부 깨어나지 않을까

각각 딜레이 보면 < Xns 이런 식으로 되어있고 정확한 값은 없음

아래 Table 20. Stop operating modes 참고



'devel > 개념' 카테고리의 다른 글

도요타 캠리 급발진 버그 분석 보고서  (0) 2016.11.10
mmap 구현 - 작성중  (0) 2016.08.11
__GFP_COMP - compound page  (0) 2016.07.26
ld linker script 예시  (0) 2016.07.25
컴퓨터 프로그래밍 전반적인 지식 기초 소양  (0) 2016.07.14
Posted by 쵸코케키

블로그 이미지
chocokeki
쵸코케키

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

글 보관함