Например TDA7294

Форум РадиоКот :: Просмотр темы - HALT Mode STM8L
Форум РадиоКот
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

Стыдно признаться, но после подпайки к плате разъема для дебага код начал работать (позор на мою седую голову :facepalm: )

Автор:  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/