• ЖЖ code fail stm32l-discovery lp-run
    В общем не осилил перевести эту железяку в low power run mode. Фигачу такой код:
    
    #include <libopencm3/stm32/rcc.h> 
    #include <libopencm3/stm32/pwr.h> 
    #include <libopencm3/stm32/flash.h> 
    
    int main()
    {
      clock_scale_t myclock_config = {
        .hpre = RCC_CFGR_HPRE_SYSCLK_DIV2,
        .ppre1 = RCC_CFGR_PPRE1_HCLK_NODIV,
        .ppre2 = RCC_CFGR_PPRE2_HCLK_NODIV,
        .voltage_scale = RANGE2, // Документация требует Range2 для low power run mode
        .flash_config = FLASH_ACR_LATENCY_0WS,
        .apb1_frequency = 65536,
        .apb2_frequency = 65536,
        .msi_range = RCC_ICSCR_MSIRANGE_65KHZ, // Для работы требуется MSIRANGE не больше первого. Ставим нулевой.
      };
      rcc_clock_setup_msi(&myclock_config);
      rcc_peripheral_enable_clock(&RCC_APB1ENR, RCC_APB1ENR_PWREN);
      PWR_CR |= PWR_CR_LPSDSR;
      PWR_CR |= PWR_CR_LPRUN;
      while(1) {
          __asm__("nop");
        }
    }
    
    А в результате, хоть делай "PWR_CR |= PWR_CR_LPRUN;" хоть не делай -- жрёт оно под 1 милиампер, вместо ожидаемых 40 микроампер.

Replies (7)

  • @Kim, а ты не nop делай в цикле, а wfi
  • @lexszero, Без изменений. Судя по амперметру (а также попыткам включить переферию в low power режиме) процессор просто не запускает low power mode.
  • @lexszero, собственно не работает и не работает. Главное чтоб stop mode нормально запустился, тогда с 1 милиампером в run mode можно будет и смириться.
  • @Kim, while(1) {
    __asm__("nop");
    }
  • @exception13, Low power run mode же, а не standby или stop mode.
  • @Kim, Почитал рассказы про то, как у людей в stop режиме было высокое энергопотребление и возникла идея. Может проблема во втроенном амперметре? Надо будет выпаять мостики к нему, что ли.
  • @Kim, включил все gpio, перевёл в output режим, выставил значение в 0, выключил все gpio. Потребление 24 микроампера.

    Перевести gpio в аналоговый режим, как советовали обладателям stm32f1 не помогало.