STM32F100C4T6 режим энергопотребления

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Сообщение sx386 »

Пытаюсь запустить "Режим останова".
Т.е. полностью выключить контроллер.

STM32F100C4T6

Исходя из статьи, нужно:
1. Установлен бит SLEEPDEEP
2. Очищен бит PDDS в регистре PWR_CR
3. Выбран режим регулятора напряжения битом LPDS в регистре PWR_CR

Код: Выделить всё

// 1. Установлен бит SLEEPDEEP
SCB->SCR |= SCB_SCR_SLEEPDEEP; 

// 2. Очищен бит PDDS в регистре PWR_CR
PWR->CR &= PWR_CR_PDDS;

// 3. Выбран режим регулятора напряжения битом LPDS в регистре PWR_CR
PWR->CR |= PWR_CR_LPDS;

__WFI();

Но потребление 1.6 mA, вместо заявленных 14...24 мкА.
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула

Сообщение Neekeetos »

sx386 писал(а):Но потребление 1.6 mA, вместо заявленных 14...24 мкА.
Это судя по току и командам режим STOP. В нем периферия и порты не отключаются. По идее чтобы снизить ток нужно посмотреть что нагружает порты, а также выключить аналоговую периферию вроде ацп, цапа.
Информация по RLC mini находится >тут<
Контактная информация:
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Сообщение sx386 »

Это судя по току и командам режим STOP
Вот так, то же 1.6 mA:

Код: Выделить всё

  
// Режим ожидания.
       
    // 1. Установлен бит SLEEPDEEP
    SCB->SCR |= SCB_SCR_SLEEPDEEP;
    // 2. Установлен бит PDDS в регистре PWR_CR
    PWR->CR |= PWR_CR_PDDS;
    // 3. Сброшен бит WUF в регистре (PWR_CSR)
    PWR->CSR &= PWR_CSR_WUF;
    
    __WFE ();  //заснули
Вывод VBAT нужно подключать ?

Я хочу сделать чтобы прибор включался/выключался на кнопку.
И не получается выключить контроллер.
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула

Сообщение Neekeetos »

sx386 писал(а):Вывод VBAT нужно подключать ?
Я хочу сделать чтобы прибор включался/выключался на кнопку.
И не получается выключить контроллер.
VBAT нужно на питание подключить. Кроме того не факт что мк не выключается, если на портах висит какая либо нагрузка , то потребление останется.У меня вот так сделано засыпание

сначала в программе делается:

Код: Выделить всё

	RCC->APB1ENR |= RCC_APB1ENR_PWREN | RCC_APB1ENR_BKPEN;
	RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
потом чтобы заснуть и проснуться от пина:

Код: Выделить всё

	
AFIO->EXTICR[3] = AFIO_EXTICR4_EXTI13_PC;
EXTI->FTSR = EXTI_FTSR_TR13;
EXTI->EMR = EXTI_EMR_MR13;
EXTI->PR = 0x000FFFFF;

DAC->CR  =0;
ADC1->CR2 =0;

SCB->SCR |= SCB_SCR_SLEEPDEEP;
PWR->CR &= ~(PWR_CR_PDDS|PWR_CR_LPDS);
PWR->CR |= PWR_CR_LPDS;

EXTI->PR = 0x000FFFFF;
__WFE();
Информация по RLC mini находится >тут<
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Сообщение sx386 »

Уже лучше: 0.9 mA .... но не достаточно.
А сколько у тебя потребляет ?
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Сообщение balmer »

sx386 писал(а):Уже лучше: 0.9 mA
Советую посмотреть инициализацию от демок STM32L, например AN3413-Current_consumption_touch_sensing.

- Желательно все пины перевести в режим Analog mode. Пины в состоянии Floating input как они после Reset проинициализированны - кушают много тока.
АККУРАТНО! После этого перестанет работать SWD, так что придется при замкнутом Reset прошивку заливать.

- если включаешь отладку в STOP/SLEEP режимах, то это тоже не даст падать потреблению меньше 0.5 ма
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Сообщение sx386 »

balmer писал(а): - если включаешь отладку в STOP/SLEEP режимах, то это тоже не даст падать потреблению меньше 0.5 ма
Это тот режим, когда BOOT0 замкнут н питание ?

Купил STM32L100C6U6
Припаял на плату контроллер. Больше ничего.


Вот так 2...3 мкА: :kill:
Хотя должно быть 270 нА.

Код: Выделить всё

    
RCC_MSICmd(ENABLE);

while (RCC_GetFlagStatus(RCC_FLAG_MSIRDY) == RESET)
{} 

//RCC_MSIRangeConfig(RCC_MSIRange_2MHz);
RCC_SYSCLKConfig(RCC_SYSCLKSource_MSI);
RCC_HSICmd(DISABLE);


/* Disable GPIOs clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB
 | RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOD | RCC_AHBPeriph_GPIOE
 | RCC_AHBPeriph_GPIOH, DISABLE);

PWR_WakeUpPinCmd(PWR_WakeUpPin_1,ENABLE);

PWR_EnterSTANDBYMode();
А вот так 490 мкА. Непорядок. :facepalm:

Код: Выделить всё

RCC_SYSCLKConfig(RCC_SYSCLKSource_MSI);
RCC_HSICmd(DISABLE);

    // Disable GPIOs clock 
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB
 | RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOD | RCC_AHBPeriph_GPIOE
 | RCC_AHBPeriph_GPIOH, DISABLE);

 /* Request to enter STOP mode with regulator in low power */   
  PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);   
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Сообщение balmer »

Спойлер

Код: Выделить всё

void conf_analog_all_GPIOS(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* Enable GPIOs clock */ 	
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | 
                        RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOD | 
                        RCC_AHBPeriph_GPIOE | RCC_AHBPeriph_GPIOH, ENABLE);

  /* Configure all GPIO port pins in Analog Input mode (floating input trigger OFF) */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  GPIO_Init(GPIOE, &GPIO_InitStructure);
  GPIO_Init(GPIOH, &GPIO_InitStructure);

#if  DEBUG_SWD_PIN == 1
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All & (~GPIO_Pin_13) & (~GPIO_Pin_14);
#endif
  
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  /* Disable GPIOs clock */ 	
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | 
                        RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOD | 
                        RCC_AHBPeriph_GPIOE | RCC_AHBPeriph_GPIOH, DISABLE);
}

void main()
{
.....
#ifdef  DEBUG_SWD_PIN
  DBGMCU_Config(DBGMCU_SLEEP | DBGMCU_STOP | DBGMCU_STANDBY, ENABLE);
#endif
.....
  conf_analog_all_GPIOS();
.....
}


Нет, я говорю вот об этой функции из примера.
Если перевести GPIO_Pin_13 GPIO_Pin_14 в режим GPIO_Mode_AIN, то SWD не будет работать.
А если не переводить, то не будет низкого потребления.

Ты вот этот код смотрел STSW-STM32072 ?
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Сообщение sx386 »

С этим кодом: 3..4 мкА в режиме STOP
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Ответить

Вернуться в «ARM»