Форум РадиоКот https://radiokot.ru/forum/ |
|
HALT Mode STM8L https://radiokot.ru/forum/viewtopic.php?f=59&t=146507 |
Страница 1 из 1 |
Автор: | Alex-Elektron [ Вт июл 04, 2017 12:06:57 ] |
Заголовок сообщения: | HALT Mode STM8L |
Здравствуйте, столкнулся с проблемой: не получается усыпить (или, по-другому сказать, добиться заявленного потребления ~1 мкА в halt mode) микроконтроллер STM8L051. Делаю следующее в main(): CLK_ICKCR |= 0x04; // Enable LSI (++set LSION) CLK_SWCR = 0x02; // Enables switching the system clock (bit SWEN) CLK_SWR = 0x02; // choose LSI while(!(CLK_ICKCR&(1<<3))); // wait stabilisation LSI CLK_ICKCR &=~ (1<<0); // Disable HSI asm("halt"); Когда добавляю команду asm("halt"); - потребление становится ~350 мкА, без этой конструкции ~430 мкА. LSI (судя по частоте мигания светодиода) запускается и проц тактируется от него. Но, такое ощущение, что HSI не отключается и работает на частоте 2 МГц, судя по потреблению. В ДШ как раз указано 150 мкА/МГц. В чём может быть косяк? Как правильно отключить HSI? P.S. Пишу и отлаживаю в IAR 2.2 P.P.S. Провёл доп. исследование: в майне воткнул просто команду asm("halt"); - при этом ток стал 576 мкА! Проверил на stm8s003f3 - с такой же конструкцией (без инициализации тактирования и отключения периферии) потребление не более 15 мкА!!! Кто-нибудь сталкивался с такой проблемой у STM8L051? Может, кривая ревизия? (у меня это буковка Z) |
Автор: | Galizin [ Ср июл 12, 2017 13:56:13 ] |
Заголовок сообщения: | Re: HALT Mode STM8L |
Может оно ? 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. |
Автор: | Alex-Elektron [ Ср июл 12, 2017 20:45:42 ] |
Заголовок сообщения: | Re: HALT Mode STM8L |
Попробовал установить WAITM и EEPM в FLASH_CR1 (и вместе, и по отдельности) - никакого эффекта не последовало. SAHALT бит в CLK_ICKCR и так по умолчанию установлен... Может, у кого есть подобный камень (stm8l051 или stm8l101)? Я брал их в Промэлектронике и слышал, что у них была бракованная партия атмеловских МК, может, это просто брак и я зря трачу своё и ваше время. |
Автор: | Беларус [ Пн июл 24, 2017 21:54:49 ] |
Заголовок сообщения: | Re: HALT Mode STM8L |
Столкнулся с той же проблемой - теже цифры энергопотребления при переходе в halt. Если решение было найдено - просьба объяснить какое. |
Автор: | oleg110592 [ Вт июл 25, 2017 06:30:28 ] |
Заголовок сообщения: | Re: HALT Mode STM8L |
условия все выполнены? 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. |
Автор: | Беларус [ Вт июл 25, 2017 13:18:11 ] |
Заголовок сообщения: | Re: HALT Mode STM8L |
Так как в текущем проекте не получилось добиться требуемого потребления, то был создан проект с нуля, только чтоб проверить как в 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 PA_DDR = 0xFF; // all gpio - output PB_DDR = 0xFF; PC_DDR = 0xFF; PD_DDR = 0xFF; PA_ODR = 0x00; PB_ODR = 0x00; PC_ODR = 0x00; PD_ODR = 0x00; CLK_PCKENR1 = 0; // no peripfheral CLK_PCKENR2 = 0; CLK_PCKENR3 = 0; while(cnt) // delay { cnt--; } CPU_CFG_GCR_SWD = 1; // disable SWIM asm("HALT"); //go halt while(1) { } } потребление до HALT - 1мА, после - 100мкА. |
Автор: | oleg110592 [ Вт июл 25, 2017 16:06:06 ] |
Заголовок сообщения: | Re: HALT Mode STM8L |
подключены только SWIM может это: The HSI clock is not stopped if used by the SWIM ссылочка по теме на всякий: http://we.easyelectronics.ru/STM8/metod ... stm8l.html |
Автор: | Беларус [ Ср июл 26, 2017 07:26:36 ] |
Заголовок сообщения: | Re: HALT Mode STM8L |
Перед тем как уйти в HALT есть строка: CPU_CFG_GCR_SWD = 1; // disable SWIM здесь я отключаю SWIM чтоб быть уверенным что он не мешает уйти в HALT |
Автор: | Alex-Elektron [ Ср июл 26, 2017 07:28:53 ] |
Заголовок сообщения: | Re: HALT Mode STM8L |
Я пробовал физически отключать от программатора - в halt не уходит. |
Автор: | oleg110592 [ Ср июл 26, 2017 08:07:07 ] |
Заголовок сообщения: | Re: HALT Mode STM8L |
остается попробовать вариант от сообщества, правда присутствует 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. СпойлерКод: Halt_Init(); EXTI_ClearITPendingBit(EXTI_IT_Pin7); halt(); void Halt_Init(void) { TIM1_Cmd(DISABLE); TIM2_CtrlPWMOutputs(DISABLE); TIM2_Cmd(DISABLE); TIM3_Cmd(DISABLE); TIM4_Cmd(DISABLE); ADC_Cmd(ADC1, DISABLE); PWR_PVDCmd(DISABLE); /* 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(); /* Stop RTC Source clock */ CLK_RTCClockConfig(CLK_RTCCLKSource_Off, CLK_RTCCLKDiv_1); /* Stop clock RTC and LCD */ CLK_PeripheralClockConfig(CLK_Peripheral_RTC, DISABLE); CLK_PeripheralClockConfig(CLK_Peripheral_LCD, DISABLE); } void GPIO_LowPower_Config(void) { /* Configure unused pins as output push-pull 0 to enter low power */ /* Port A */ GPIO_Init(GPIOA, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow); /* 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); } отседова https://community.st.com/thread/4894 |
Автор: | Беларус [ Ср июл 26, 2017 08:21:07 ] |
Заголовок сообщения: | Re: HALT Mode STM8L |
Стыдно признаться, но после подпайки к плате разъема для дебага код начал работать (позор на мою седую голову ![]() |
Автор: | Alex-Elektron [ Ср июл 26, 2017 08:32:35 ] |
Заголовок сообщения: | Re: HALT Mode STM8L |
Можете пояснить, что особенного в этом разъёме? Я тупо использую линии контроллера SWIM и SWIM_RST для программирования и отладки. После прошивки отсоединяю от программатора и замеряю ток. |
Автор: | Беларус [ Чт авг 10, 2017 07:40:45 ] |
Заголовок сообщения: | Re: HALT Mode STM8L |
Ничего особенного в этом разъеме нет. Это для то о чем вы писали выше. Просто при его пайке , похоже, пропаялся лучше камень. И все заработало. Дело было в плохой пайке. Код работает. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |