Skip to main content
SBaro.11
Associate III
Oct 11, 2024 10:11 AM UTC
Solved

STOP mode F405 hard to come down 1mA

Hi all,

I'm trying to acheive STOP mode on my stm32f405, but ir's hard to come down 1mA as de datasheet say < 100uA. So to explain my project :

- STM32F405 Freertos

- 3 i2c capteur (power of captor is managed by switch)

- 1 spi flash nand w25n01

My clock conf

 

 RCC_OscInitTypeDef RCC_OscInitStruct = {0};
 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

 /** Configure the main internal regulator output voltage
 */
 __HAL_RCC_PWR_CLK_ENABLE();
 __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
 /** Initializes the RCC Oscillators according to the specified parameters
 * in the RCC_OscInitTypeDef structure.
 */
 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
 RCC_OscInitStruct.HSEState = RCC_HSE_ON;
 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
 RCC_OscInitStruct.PLL.PLLM = 4;
 RCC_OscInitStruct.PLL.PLLN = 168;
 RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
 RCC_OscInitStruct.PLL.PLLQ = 7;
 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
// Error_Handler();
 }
 /** Initializes the CPU, AHB and APB buses clocks
 */
 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
 | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) {
// Error_Handler();
 }
}

 

 

Here is my function for going in stop mode

vTaskSuspendAll();

 close_log_file();
 power_off_led();

 desactive_i2c_captors(); //switch off vcc for i2c captor
 HAL_DBGMCU_DisableDBGStopMode();
 HAL_ADC_DeInit(&hadc1);
 W25n01g_deselect();
 GPIO_InitTypeDef GPIO_InitStructure;

 __HAL_RCC_GPIOA_CLK_ENABLE();
 __HAL_RCC_GPIOB_CLK_ENABLE();
 __HAL_RCC_GPIOC_CLK_ENABLE();

 GPIO_InitStructure.Pin = GPIO_PIN_All;
 GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;
 GPIO_InitStructure.Pull = GPIO_NOPULL;

 HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);

 GPIO_InitStructure.Pin = GPIO_PIN_All;
 GPIO_InitStructure.Pin &= ~(GPIO_PIN_8);
 GPIO_InitStructure.Pin &= ~(GPIO_PIN_11);
 GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;
 GPIO_InitStructure.Pull = GPIO_NOPULL;
 HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);

 GPIO_InitStructure.Pin = GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11;
 GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;
 GPIO_InitStructure.Pull = GPIO_NOPULL;
 HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);

 HAL_SuspendTick();
 taskEXIT_CRITICAL();
 HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

 

if I understand correctly the stop mode deactivates all the clocks, so I don't need to make calls __HAL_RCC_USART1_CLK_DISABLE for example, so in my case my 1mA consumption should be come to GPIO ? SHould I do something with my clock source or not ?

 

 

This topic has been closed for replies.
Andrew Neil
Andrew NeilBest answer
Super User
Oct 15, 2024 9:49 AM UTC

 

 

You need to post the full schematic of your board: at the microamp level, the hardware design is also an important part of the system.

 


@SBaro.11 wrote:

- 3 i2c capteur (power of captor is managed by switch)


Sorry, don't know what you mean by "capteur" here - hence a schematic with part numbers would be clearer.

 

As @jiangfan said, starting with an ST example would be a good way to check if your hardware is OK.

 

See also:

https://community.st.com/t5/stm32-mcus/tips-for-using-stm32-low-power-modes/ta-p/621007 

 

A complex system that works is invariably found to have evolved from a simple system that worked.A complex system designed from scratch never works and cannot be patched up to make it work.

4 replies

jiangfan
ST Employee
Oct 14, 2024 3:46 AM UTC

First, you may try with example project from ST to see if your hardware board is OK or not, for example this project:

STM32CubeF4/Projects/STM32F4-Discovery/Examples/PWR/PWR_CurrentConsumption at master · STMicroelectronics/STM32CubeF4 · GitHub

SBaro.11
SBaro.11Author
Associate III
Oct 15, 2024 6:35 AM UTC

Yes I'll try it.

Did I understand the documentation correctly when I said that in stop mode it is not necessary to stop the device clocks ? For example if I used usart1 I don't have to call

__HAL_RCC_USART1_CLK_DISABLE

 

jiangfan
ST Employee
Oct 15, 2024 9:40 AM UTC

You may read chapter 5 Power controller (PWR) about STOP mode of RM0090 for STM32F405. most device clocks stopped in STOP mode except LSI/LSE/RTC/... (may be on by configuration). So, I tend to agree with you - no need to call  __HAL_RCC_USART1_CLK_DISABLE

Andrew Neil
Andrew NeilBest answer
Super User
Oct 15, 2024 9:49 AM UTC

 

 

You need to post the full schematic of your board: at the microamp level, the hardware design is also an important part of the system.

 


@SBaro.11 wrote:

- 3 i2c capteur (power of captor is managed by switch)


Sorry, don't know what you mean by "capteur" here - hence a schematic with part numbers would be clearer.

 

As @jiangfan said, starting with an ST example would be a good way to check if your hardware is OK.

 

See also:

https://community.st.com/t5/stm32-mcus/tips-for-using-stm32-low-power-modes/ta-p/621007 

 

A complex system that works is invariably found to have evolved from a simple system that worked.A complex system designed from scratch never works and cannot be patched up to make it work.