Страница 1 из 1
STM32F100C4T6 режим энергопотребления
Добавлено: Сб окт 19, 2013 19:28:32
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 мкА.
Re: STM32F100C4T6 режим энергопотребления
Добавлено: Сб окт 19, 2013 20:56:47
Neekeetos
sx386 писал(а):Но потребление 1.6 mA, вместо заявленных 14...24 мкА.
Это судя по току и командам режим STOP. В нем периферия и порты не отключаются. По идее чтобы снизить ток нужно посмотреть что нагружает порты, а также выключить аналоговую периферию вроде ацп, цапа.
Re: STM32F100C4T6 режим энергопотребления
Добавлено: Сб окт 19, 2013 21:29:44
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 нужно подключать ?
Я хочу сделать чтобы прибор включался/выключался на кнопку.
И не получается выключить контроллер.
Re: STM32F100C4T6 режим энергопотребления
Добавлено: Вс окт 20, 2013 11:04:26
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();
Re: STM32F100C4T6 режим энергопотребления
Добавлено: Вс окт 20, 2013 18:10:43
sx386
Уже лучше: 0.9 mA .... но не достаточно.
А сколько у тебя потребляет ?
Re: STM32F100C4T6 режим энергопотребления
Добавлено: Вс окт 20, 2013 19:30:48
balmer
sx386 писал(а):Уже лучше: 0.9 mA
Советую посмотреть инициализацию от демок STM32L, например AN3413-Current_consumption_touch_sensing.
- Желательно все пины перевести в режим Analog mode. Пины в состоянии Floating input как они после Reset проинициализированны - кушают много тока.
АККУРАТНО! После этого перестанет работать SWD, так что придется при замкнутом Reset прошивку заливать.
- если включаешь отладку в STOP/SLEEP режимах, то это тоже не даст падать потреблению меньше 0.5 ма
Re: STM32F100C4T6 режим энергопотребления
Добавлено: Пн окт 21, 2013 00:58:48
sx386
balmer писал(а): - если включаешь отладку в STOP/SLEEP режимах, то это тоже не даст падать потреблению меньше 0.5 ма
Это тот режим, когда BOOT0 замкнут н питание ?
Купил STM32L100C6U6
Припаял на плату контроллер. Больше ничего.
Вот так 2...3 мкА:
Хотя должно быть 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 мкА. Непорядок.
Код: Выделить всё
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);
Re: STM32F100C4T6 режим энергопотребления
Добавлено: Пн окт 21, 2013 10:24: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 ?
Re: STM32F100C4T6 режим энергопотребления
Добавлено: Вт окт 22, 2013 15:19:01
sx386
С этим кодом: 3..4 мкА в режиме STOP