STM32L, STOP mod a spotreba

Tomas Urbanek turbyho na me.com
Neděle Březen 20 21:43:20 CET 2016


Zdravim,
byl jsem okolnostmi donucen zacit delat s STM32L a mam problem se STOP modem. Za zadnou cenu nemohu dosahnout deklarovane spotreby v tomto modu. Ve STANDBY modu je spotreba spravna okolo nekolika uA, ale v STOP modu o mnoho vyssi nez by mela - okolo 200uA. Zkousim na NUCLEO L152RE. Odstranil jsem i externi pull-up z modreho tlacitka. Jiny tam snad uz neni (uz si nejsem nicim jisty). Mam aktivni pouze UART2 a PC0-OUT bez pul-up/down. Vse ostatni v analogovem modu. Zkousel jsem i nastavit hodiny pouze na MSI a ostanti hodiny vypnout, ale pod 200uA se stejne nedostanu. Zkousel jsem i vypnout hodiny pro vsechny GPIO (__GPIOD_CLK_DISABLE()) ale take bez uspechu.

Dokumentace je prachbidna nebo nevim kde hledat. Podle toho co jsem nasel v datasheetu, specifikaci HALu a apnotes ci v par dostupnych poznamkach na netu by melo byt vse spravne, ale nekde delam zrejme chybu. 

Za kazde nakopnuti spravnym smerem budu neskonale vdecny jelikoz se s tim trapim uz vice nez tyden do hlubokych noci az ran a zatim bez zadneho uspechu. Proste se uz tocim jen dokola.

Zde je priklad meho prechodu do stop modu:

...
HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, stopTime, RTC_WAKEUPCLOCK_RTCCLK_DIV16);
HAL_SuspendTick();
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
SystemClock_Config();
HAL_ResumeTick();
...

Jedna z konfiguraci hodin:

RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_PeriphCLKInitTypeDef PeriphClkInit;

/* Enable Ultra low power mode */
HAL_PWREx_EnableUltraLowPower();

/* Enable the fast wake up from Ultra low power mode */
//HAL_PWREx_EnableFastWakeUp();

__PWR_CLK_ENABLE();

__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = 16;
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL3;
RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV4;
HAL_RCC_OscConfig(&RCC_OscInitStruct);

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV4;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);

PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;
PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);

//HAL_RCCEx_EnableLSECSS();

HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);

HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

/* SysTick_IRQn interrupt configuration */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);


Turby



------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20160320/0eb27ae8/attachment.html>


Další informace o konferenci Hw-list