Перейти к содержанию
    

Режимы работы STM32L073

Изучаю режимы работы STM32L073. Использую плату NUCLEO-L073RZ.

Первый вопрос.

1. Настраиваю CLK: MSI

    /* MSI configuration and activation */
    LL_RCC_PLL_Disable();
    /* Set new latency */
    LL_FLASH_SetLatency(LL_FLASH_LATENCY_0);

    LL_RCC_MSI_Enable();
    while (LL_RCC_MSI_IsReady() != 1) {
    }
    LL_RCC_MSI_SetRange(LL_RCC_MSIRANGE_6);
    LL_RCC_MSI_SetCalibTrimming(0x0);

    /* Sysclk activation  */
    LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
    LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_MSI);
    while (LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_MSI) {
    }

    /* Set APB1 & APB2 prescaler*/
    LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_2);
    LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_2);

    /* Set systick to 1ms in using frequency set to 4MHz */
    LL_Init1msTick(FREQ_MSI);

    /* Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) */
    LL_SetSystemCoreClock(FREQ_MSI);

    /* Enable Power Control clock */
    LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
    /* The voltage scaling allows optimizing the power consumption when the device is
     clocked below the maximum system frequency, to update the voltage scaling value
     regarding system frequency refer to product datasheet.  */
    LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE3);

2. Все пины в режим аналогов.

3. Запускаю часы на LSE и вкл еще WakeUpRTC на интервал 20 сек.

4. Ухожу в режим STOP.

  Потребление 1 мкА.

5. Через 20 сек контроллер поднимается по прерыванию WakeUpRTC и опять возвращается в  STOP.

 Потребление уже 3 мкА. Вроде все что могло повлиять перерыл, но объяснения не нашел.

 

Второй вопрос.

Все тоже самое только контроллер поднимается по WakeUpRTC каждые 100 мсек.

Потребление по тестеру 6 мкА стоит около ~43-45 сек.

Затем за  такой же интервал времени потребление постепенно поднимается до 12 мкА и опускается до 6 мкА.

Опять потребление 6 мкА тот же промежуток времени.  Опять то же изменение потребление. И так по циклу.

Тоже не пойму причину такого поведения. Почему потребление не сохраняется на уровне 6 мкА?

Изменено пользователем SMRM

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 5/5/2020 at 5:53 PM, SMRM said:

2. Все пины в режим аналогов.

Буквально все?  от до A-H?

Пример от STшников:

void EnterSTOPMode(void)
{
  LL_GPIO_InitTypeDef gpio_initstruct = {LL_GPIO_PIN_ALL, LL_GPIO_MODE_ANALOG, 
                                         LL_GPIO_SPEED_FREQ_HIGH, LL_GPIO_OUTPUT_PUSHPULL, 
                                         LL_GPIO_PULL_NO, LL_GPIO_AF_0};

  /* Set all GPIO in analog state to reduce power consumption,                */
  /* Note: Debug using ST-Link is not possible during the execution of this   */
  /*       example because communication between ST-link and the device       */
  /*       under test is done through UART. All GPIO pins are disabled (set   */
  /*       to analog input mode) including  UART I/O pins.                    */
  LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA |
                           LL_IOP_GRP1_PERIPH_GPIOB |
                           LL_IOP_GRP1_PERIPH_GPIOC |
                           LL_IOP_GRP1_PERIPH_GPIOD |
                           LL_IOP_GRP1_PERIPH_GPIOE |
                           LL_IOP_GRP1_PERIPH_GPIOH);

  LL_GPIO_Init(GPIOA, &gpio_initstruct);
  LL_GPIO_Init(GPIOB, &gpio_initstruct);
  LL_GPIO_Init(GPIOC, &gpio_initstruct);
  LL_GPIO_Init(GPIOD, &gpio_initstruct);
  LL_GPIO_Init(GPIOE, &gpio_initstruct);
  LL_GPIO_Init(GPIOH, &gpio_initstruct);

  LL_IOP_GRP1_DisableClock(LL_IOP_GRP1_PERIPH_GPIOA |
                           LL_IOP_GRP1_PERIPH_GPIOB |
                           LL_IOP_GRP1_PERIPH_GPIOC |
                           LL_IOP_GRP1_PERIPH_GPIOD |
                           LL_IOP_GRP1_PERIPH_GPIOE |
                           LL_IOP_GRP1_PERIPH_GPIOH);

  /** Request to enter STOP mode
    * Following procedure describe in STM32L0xx Reference Manual
    * See PWR part, section Low-power modes, STOP mode
    */
  /* Enable ultra low power mode */
  LL_PWR_EnableUltraLowPower();

  /** Set the regulator to low power before setting MODE_STOP.   
    * If the regulator remains in "main mode",   
    * it consumes more power without providing any additional feature. */    
  LL_PWR_SetRegulModeLP(LL_PWR_REGU_LPMODES_LOW_POWER);

  /* Set STOP mode when CPU enters deepsleep */
  LL_PWR_SetPowerMode(LL_PWR_MODE_STOP);

  /* Set SLEEPDEEP bit of Cortex System Control Register */
  LL_LPM_EnableDeepSleep();  

  /* Request Wait For Interrupt */
  __WFI();
}

 

On 5/5/2020 at 5:53 PM, SMRM said:

Второй вопрос.

Все тоже самое только контроллер поднимается по WakeUpRTC каждые 100 мсек.

Потребление по тестеру 6 мкА стоит около ~43-45 сек.

Затем за  такой же интервал времени потребление постепенно поднимается до 12 мкА и опускается до 6 мкА.

Похоже на проблемы с оборудованием или подключением. Во время измерения отключаете программатор (перемычки SWIO\SWCLK, SBx на NRST)? 
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...