Witam
Posiadam procesor STM32F070F6, po wprowadzeniu go w stan Standby pobiera 3-4uA jest ok po za tym, że potrzebuję go wybudzać i zbierać dane do pamięci ram więc ten tryb nie odpowiada mi bo RAM jest po każdym wybudzeniu kasowana.
Przeglądając dokumentację znalazłem tryb który nijako trochę mi pasuję STOP mode, procesor w tym stanie może być wybudzony przez RTC nie traci stanu pamięci i rusza z miejsca gdzie stanął ok SUPER!.
Ogólne założenie jest takie, że procesor co 10s-60s wybudza się i zbiera dane po UART, potem co 10-30min odpala ESP8266 i wypluwa te dane po MQTT do serwera, pobiera aktualny czas, konfigurację i usypia ESP jak i sam siebie.
Tylko że dokumentacja mówi o około 6-7uA w tym trybie, tym czasem sexample z STtdPeriph_lib/PWR/.... daje możliwość wprowadzenia w tryby sleep stop itp... wprowadzenie procesora w tryb STOP zmniejsza konsumpcję do 0.5mA to dalej za dużo bo urządzenie ma być bateryjne z założenia działać rok czasu, po za tym nie wybudza się.
Czy ktoś ma jakiś działający przykład na stm32F0 zatrzymania STOP i wybudzenia po np 10s ? lub sugestię jak to osiągnąć ? ślęczę nad tym trzeci dzień bez większych efektów.
Oto fragment który wprowadzał w tryb standby, zmieniłem instrukcje na STOP... ale to jak pisałem nie działa jak należy...
Posiadam procesor STM32F070F6, po wprowadzeniu go w stan Standby pobiera 3-4uA jest ok po za tym, że potrzebuję go wybudzać i zbierać dane do pamięci ram więc ten tryb nie odpowiada mi bo RAM jest po każdym wybudzeniu kasowana.
Przeglądając dokumentację znalazłem tryb który nijako trochę mi pasuję STOP mode, procesor w tym stanie może być wybudzony przez RTC nie traci stanu pamięci i rusza z miejsca gdzie stanął ok SUPER!.
Ogólne założenie jest takie, że procesor co 10s-60s wybudza się i zbiera dane po UART, potem co 10-30min odpala ESP8266 i wypluwa te dane po MQTT do serwera, pobiera aktualny czas, konfigurację i usypia ESP jak i sam siebie.
Tylko że dokumentacja mówi o około 6-7uA w tym trybie, tym czasem sexample z STtdPeriph_lib/PWR/.... daje możliwość wprowadzenia w tryby sleep stop itp... wprowadzenie procesora w tryb STOP zmniejsza konsumpcję do 0.5mA to dalej za dużo bo urządzenie ma być bateryjne z założenia działać rok czasu, po za tym nie wybudza się.
Czy ktoś ma jakiś działający przykład na stm32F0 zatrzymania STOP i wybudzenia po np 10s ? lub sugestię jak to osiągnąć ? ślęczę nad tym trzeci dzień bez większych efektów.
Oto fragment który wprowadzał w tryb standby, zmieniłem instrukcje na STOP... ale to jak pisałem nie działa jak należy...
RTC_InitTypeDef RTC_InitStructure;
RTC_AlarmTypeDef RTC_AlarmStructure;
RTC_TimeTypeDef RTC_TimeStructure;
/* Allow access to RTC */
PWR_BackupAccessCmd(ENABLE);
/* The RTC Clock may varies due to LSI frequency dispersion. */
/* Enable the LSI OSC */
RCC_LSICmd(ENABLE);
/* Wait till LSI is ready */
while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
{
}
/* Select the RTC Clock Source */
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
/* Enable the RTC Clock */
RCC_RTCCLKCmd(ENABLE);
/* Wait for RTC APB registers synchronisation */
RTC_WaitForSynchro();
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
RTC_InitStructure.RTC_SynchPrediv = 0x0138;
RTC_Init(&RTC_InitStructure);
/* Set the alarm X+5s */
RTC_AlarmStructure.RTC_AlarmTime.RTC_H12 = RTC_H12_AM;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours = 0x01;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes = 0x00;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds = 0x05;
RTC_AlarmStructure.RTC_AlarmDateWeekDay = 0x31;
RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date;
RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_DateWeekDay;
RTC_SetAlarm(RTC_Format_BCD, RTC_Alarm_A, &RTC_AlarmStructure);
/* Enable the alarm */
RTC_AlarmCmd(RTC_Alarm_A, ENABLE);
/* Set the time to 01h 00mn 00s AM */
RTC_TimeStructure.RTC_H12 = RTC_H12_AM;
RTC_TimeStructure.RTC_Hours = 0x01;
RTC_TimeStructure.RTC_Minutes = 0x00;
RTC_TimeStructure.RTC_Seconds = 0x00;
RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure);
/* Disable RTC Alarm A Interrupt */
RTC_ITConfig(RTC_IT_ALRA, DISABLE);
/* Clear Power Wake-up (CWUF) flag */
PWR_ClearFlag(PWR_FLAG_WU);
/* Enable RTC Alarm A Interrupt */
RTC_ITConfig(RTC_IT_ALRA, ENABLE);
RTC_ClearFlag(RTC_FLAG_ALRAF);
/* Request to enter STANDBY mode (Wake Up flag is cleared in PWR_EnterSTANDBYMode function) */
// PWR_EnterSTANDBYMode();
PWR_EnterSTOPMode(PWR_CR_LPSDSR, PWR_STOPEntry_WFI);