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