Здравствуйте, столкнулся с проблемой: не получается усыпить (или, по-другому сказать, добиться заявленного потребления ~1 мкА в halt mode) микроконтроллер STM8L051. Делаю следующее в main():
Когда добавляю команду asm("halt"); - потребление становится ~350 мкА, без этой конструкции ~430 мкА. LSI (судя по частоте мигания светодиода) запускается и проц тактируется от него. Но, такое ощущение, что HSI не отключается и работает на частоте 2 МГц, судя по потреблению. В ДШ как раз указано 150 мкА/МГц. В чём может быть косяк? Как правильно отключить HSI?
P.S. Пишу и отлаживаю в IAR 2.2 P.P.S. Провёл доп. исследование: в майне воткнул просто команду asm("halt"); - при этом ток стал 576 мкА! Проверил на stm8s003f3 - с такой же конструкцией (без инициализации тактирования и отключения периферии) потребление не более 15 мкА!!! Кто-нибудь сталкивался с такой проблемой у STM8L051? Может, кривая ревизия? (у меня это буковка Z)
Может оно ? AN3147 By enabling the EEPM bit in the FLASH_CR1 register, the Flash program memory automatically enters I DDQ mode when the code is executed from RAM or when the device is in Wait mode.
И еще можно попробовать установить If the SAHALT bit is set in the CLK_ICKCR register, the main regulator (MVR) is switched off without taking into account that some high speed clocks may be used by the system.
Попробовал установить WAITM и EEPM в FLASH_CR1 (и вместе, и по отдельности) - никакого эффекта не последовало. SAHALT бит в CLK_ICKCR и так по умолчанию установлен... Может, у кого есть подобный камень (stm8l051 или stm8l101)? Я брал их в Промэлектронике и слышал, что у них была бракованная партия атмеловских МК, может, это просто брак и я зря трачу своё и ваше время.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
условия все выполнены? Halt mode In this mode the system clock is stopped. This means that the CPU and all the peripherals clocked by SYSCLK or by derived clocks are disabled, except for the following cases: • The HSI clock is not stopped if used by SWIM • The system clock source is not stopped if a Flash/Data EEPROM write operation is in progress • The LSI clock is not stopped if used by the SWIM, the IWDG or if the “IWDG_HALT” option bit is disabled. In Halt mode, none of the peripherals are clocked and the digital part of the MCU consumes almost no power.
Entering Halt mode Before executing a HALT instruction, the application must clear all pending peripheral interrupts by clearing the interrupt pending bit in the corresponding peripheral configuration register. Otherwise, the HALT instruction is not executed and program execution continues. However, the Halt procedure can be delayed if one of the following flags is set: • SWBSY flag in the CLK_SWCR register • EEBUSY flag in the CLK_CLK_REGCSR register • RTCSWBSY flag in the CLK_CRTCR register • BEEPSWBSY flag in the CLK_CBEEPR register when BEEP in Active-halt mode enabled. If SAHALT bit is set in the CLK_ICKCR register the main regulator (MVR) will be switched off without taking into account that some high-speed clock may be used by the system.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Так как в текущем проекте не получилось добиться требуемого потребления, то был создан проект с нуля, только чтоб проверить как в halt получить единицы микроампер. В проекте небольшая задержка реализована простым декрементом переменной. Это сделано только для того чтоб увидеть изменение в потреблении при переходе в halt. железо - голый камень stm8l151f3, подключены только SWIM, +3V и GND; среда - IAR Embedded Wornbench IDE; код - #include <iostm8l151f3.h>
long volatile cnt = 100000; // to make some delay
int main( void ) { CLK_CKDIVR = 0x02; // Fhsi = Fcpu = 4 МГц PWR_CSR2_ULP = 1; // Internal reference voltage stopped in Halt/Active-halt mode CLK_ICKCR_SAHALT = 1; // main voltage regulator OFF in HALT/Active-halt modeв halt
остается попробовать вариант от сообщества, правда присутствует SPL утверждается что 0.5uA:
Цитата:
Here's what I'm doing for the STM8L151 and it drops current to 0.5uA. This is full halt, but if you want to keep RTC active, just comment out those lines. One thing, you have to clear the wakeup INT before halt. Here, I'm using EXTI pin7 for wakeup.
/* Switch to LSI as system clock source */ /* system clock prescaler: 1*/ CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_LSI); CLK_SYSCLKSourceSwitchCmd(ENABLE);
while (CLK_GetFlagStatus(CLK_FLAG_LSIRDY) == 0); CLK_HSICmd(DISABLE); CLK_HSEConfig(CLK_HSE_OFF);
/* Set STM8 in low power */ PWR_UltraLowPowerCmd(ENABLE);
/* Set GPIO in low power*/ GPIO_LowPower_Config();
/* Port B not AIN */ GPIO_Init(GPIOB, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_7, GPIO_Mode_Out_PP_Low_Slow);
/* Port B LEDs, so they don't flash at power on */ GPIO_Init(GPIOB, GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5, GPIO_Mode_Out_PP_High_Slow);
/* Port C not wakeup pin!! */ GPIO_Init(GPIOC, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6, GPIO_Mode_Out_PP_Low_Slow);
/* Port D */ GPIO_Init(GPIOD, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
/* Port E */ GPIO_Init(GPIOE, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
/* Port F */ GPIO_Init(GPIOF, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow); }
Можете пояснить, что особенного в этом разъёме? Я тупо использую линии контроллера SWIM и SWIM_RST для программирования и отладки. После прошивки отсоединяю от программатора и замеряю ток.
Ничего особенного в этом разъеме нет. Это для то о чем вы писали выше. Просто при его пайке , похоже, пропаялся лучше камень. И все заработало. Дело было в плохой пайке. Код работает.
Сейчас этот форум просматривают: DENIS451 и гости: 23
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения