cancel
Showing results for 
Search instead for 
Did you mean: 

stm32g030 stanby mode current problem

Garslanbay
Associate II

Hello everyone,

I have a problem with the STM32G030.

My microcontroller is drawing 1.5 mA of current in standby mode. I really can't figure out why. When I put it into stop mode, it draws 25 uA, which is fine, but I can't understand why it's drawing so much more in standby mode. Can you help me?

 

7 REPLIES 7
Sarra.S
ST Employee

Hello @Garslanbay

I don't think you're entering standby mode, can you share your code? 

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.

When I loaded the same code onto my STM32F072 Discovery board, I measured a current of 2 uA.This is enough for me.i will upload code later.i dont have it now.the code is in my computer.

Garslanbay
Associate II
HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ /* USER CODE BEGIN 2 */ /* Enable Power Control clock */ __HAL_RCC_PWR_CLK_ENABLE(); /* Check if the system was resumed from Standby mode */ if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET) { /* Clear Standby flag */ __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB); /* Check and Clear the Wakeup flag */ if (__HAL_PWR_GET_FLAG(PWR_FLAG_WUF2) != RESET) { __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF2); } } /* Insert 5 seconds delay */ HAL_Delay(5000); /* The Following Wakeup sequence is highly recommended prior to Standby mode entry - Enable wakeup - Clear wake up pin flag depending in edge detection & pin level. - Enter the Standby mode. */ //Here is my nNRF24L01 and LIS2DW12TR codes.i also deactivate those code then i check again result is same. HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN2_LOW); /* Clear all related wakeup flags*/ __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF2); /* Enter the Standby mode */ HAL_PWR_EnterSTANDBYMode();
View more
Garslanbay
Associate II

Are there any units I need to deactivate before entering Standby mode?

/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main program body ****************************************************************************** * @attention * * Copyright (c) 2025 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "lis2dtw12_reg.h" #include <string.h> #include <stdio.h> #include "24l01.h" #include "math.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ #define VREFINT_CAL_ADDR ((uint16_t*) (0x1FFF75AAUL)) #define number_of_conversion 25 #define MyAdress 0x06 /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ ADC_HandleTypeDef hadc1; DMA_HandleTypeDef hdma_adc1; SPI_HandleTypeDef hspi1; /* USER CODE BEGIN PV */ static int16_t data_raw_acceleration[3]; static int16_t data_raw_temperature; static float_t acceleration_mg[3]; static uint8_t whoamI, rst; static float_t temperature; uint8_t status21=0,reg=0x0B,reg_return=0; uint16_t adc_data[number_of_conversion*2]; float sumx,sumy,sumz,ortx,orty,ortz; int sayac=0; static uint8_t tx_buffer[1000]; extern uint8_t kontrol; int32_t vdda_volt=0,temp=0; uint8_t giden[30]; int res=0; uint8_t kesme=0; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_DMA_Init(void); static void MX_ADC1_Init(void); static void MX_SPI1_Init(void); /* USER CODE BEGIN PFP */ extern SPI_HandleTypeDef hspi1; void measure_vdda(int32_t value); static void NRF_SPI1_Init(void); void lis2dtw12_init(void); void lis2dtw12_read_data_polling(void); /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ lis2dtw12_ctrl3_t reg_ctrl3; lis2dtw12_ctrl5_int2_pad_ctrl_t int2_ctrl; lis2dtw12_ctrl2_t control2; void lis2dtw12_read_data_polling(void) { /* Initialize mems driver interface */ /* Initialize platform specific hardware */ /* Check device ID */ //int2_ctrl.int2_sleep_chg=1; //int2_ctrl.int2_drdy_t=1; //lis2dtw12_pin_int2_route_set(&hspi1, &int2_ctrl); //lis2dtw12_act_mode_set(&hspi1,LIS2DTW12_DETECT_ACT_INACT); //lis2dtw12_wkup_feed_data_set(&hspi1,1); /* Read samples in polling mode (no int) */ uint8_t reg; lis2dtw12_all_sources_t all_source; lis2dtw12_status_t status2; /* Read output only if new value is available */ // lis2dtw12_all_sources_get(&hspi1, &all_source); // // lis2dtw12_status_reg_get(&hspi1, &status2); // // if (all_source.wake_up_src.wu_ia) { // snprintf((char *)tx_buffer, sizeof(tx_buffer), "Wake-Up event on "); // // if (all_source.wake_up_src.x_wu) { // strcat((char *)tx_buffer, "X"); // } // // if (all_source.wake_up_src.y_wu) { // strcat((char *)tx_buffer, "Y"); // } // // if (all_source.wake_up_src.z_wu) { // strcat((char *)tx_buffer, "Z"); // } // } for(sayac=0;sayac<1000;sayac++) { while(!reg) { lis2dtw12_flag_data_ready_get(&hspi1, &reg); } /* Read acceleration data */ memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t)); lis2dtw12_acceleration_raw_get(&hspi1, data_raw_acceleration); acceleration_mg[0] = lis2dtw12_from_fs2_lp1_to_mg( data_raw_acceleration[0]); acceleration_mg[1] = lis2dtw12_from_fs2_lp1_to_mg( data_raw_acceleration[1]); acceleration_mg[2] = lis2dtw12_from_fs2_lp1_to_mg( data_raw_acceleration[2]); memset(&data_raw_temperature, 0x00, sizeof(int16_t)); lis2dtw12_temperature_raw_get(&hspi1, &data_raw_temperature); temperature = lis2dtw12_from_lsb_to_celsius(data_raw_temperature); sumx+=acceleration_mg[0]; sumy+=acceleration_mg[1]; sumz+=acceleration_mg[2]; } ortx=sumx/1000; orty=sumy/1000; ortz=sumz/1000; sumx=sumy=sumz=0; measure_vdda(vdda_volt); //HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN4_LOW); //HAL_PWR_EnterSTANDBYMode(); } void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin==GPIO_PIN_4) { } if(GPIO_Pin==GPIO_PIN_2) { //lis2dtw12_read_data_polling(); kesme=1; } } void lis2dtw12_init(void) { lis2dtw12_reg_t int_route; lis2dtw12_wake_up_ths_t wake_up; lis2dtw12_device_id_get(&hspi1, &whoamI); if (whoamI != LIS2DTW12_ID) while (1) { /* manage here device not found */ } /* Restore default configuration */ lis2dtw12_reset_set(&hspi1, PROPERTY_ENABLE); do { lis2dtw12_reset_get(&hspi1, &rst); } while (rst); /* Enable Block Data Update */ //lis2dtw12_block_data_update_set(&hspi1, PROPERTY_ENABLE); /* Set full scale */ lis2dtw12_full_scale_set(&hspi1, LIS2DTW12_2g); /* Configure filtering chain * * Accelerometer - filter path / bandwidth */ lis2dtw12_filter_path_set(&hspi1, LIS2DTW12_LPF_ON_OUT); lis2dtw12_filter_bandwidth_set(&hspi1, LIS2DTW12_ODR_DIV_4); lis2dtw12_wkup_feed_data_set(&hspi1, LIS2DTW12_HP_FEED); /* Configure power mode */ //lis2dtw12_power_mode_set(&hspi1, LIS2DTW12_HIGH_PERFORMANCE_LOW_NOISE); lis2dtw12_power_mode_set(&hspi1,LIS2DTW12_CONT_LOW_PWR_LOW_NOISE_12bit); /* Set Output Data Rate */ lis2dtw12_wkup_dur_set(&hspi1,2); lis2dtw12_act_sleep_dur_set(&hspi1, 2); lis2dtw12_wkup_threshold_set(&hspi1,1); lis2dtw12_act_mode_set(&hspi1, LIS2DTW12_DETECT_ACT_INACT); // lis2dtw12_read_reg(&hspi1, LIS2DTW12_WAKE_UP_THS, &wake_up, 1); // wake_up.sleep_on=PROPERTY_ENABLE; // lis2dtw12_write_reg(&hspi1, LIS2DTW12_WAKE_UP_THS, &wake_up, 1); lis2dtw12_pin_polarity_set(&hspi1, LIS2DTW12_ACTIVE_LOW ); lis2dtw12_pin_int1_route_get(&hspi1,&int_route.ctrl4_int1_pad_ctrl); int_route.ctrl4_int1_pad_ctrl.int1_wu = PROPERTY_ENABLE; lis2dtw12_pin_int1_route_set(&hspi1,&int_route.ctrl4_int1_pad_ctrl); lis2dtw12_pin_int2_route_get(&hspi1,&int_route.ctrl5_int2_pad_ctrl); int_route.ctrl5_int2_pad_ctrl.int2_sleep_chg=PROPERTY_ENABLE; lis2dtw12_pin_int2_route_set(&hspi1, &int_route.ctrl5_int2_pad_ctrl); //int_route.ctrl5_int2_pad_ctrl.int2_drdy=PROPERTY_ENABLE; //lis2dtw12_pin_int2_route_set(&hspi1,&int_route.ctrl5_int2_pad_ctrl); lis2dtw12_data_rate_set(&hspi1, LIS2DTW12_XL_ODR_800Hz); // lis2dtw12_read_reg(&hspi1, LIS2DTW12_CTRL3, reg_ctrl3, 1); // reg_ctrl3.h_lactive=PROPERTY_DISABLE; // lis2dtw12_write_reg(&hspi1, LIS2DTW12_CTRL3, reg_ctrl3, 1); } /* USER CODE END 0 */ /** * @brief The application entry point. * @retval int */ int main(void) { /* USER CODE BEGIN 1 */ uint32_t *ptr=DBG+DBG_CR_DBG_STANDBY; uint8_t reg=0; /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ __HAL_RCC_PWR_CLK_ENABLE(); /* Check if the system was resumed from Standby mode */ if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET) { /* Clear Standby flag */ __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB); /* Check and Clear the Wakeup flag */ if (__HAL_PWR_GET_FLAG(PWR_FLAG_WUF2) != RESET) { __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF2); } } HAL_PWREx_DisablePullUpPullDownConfig(); //__HAL_RCC_DBGMCU_CLK_ENABLE(); //HAL_DBGMCU_EnableDBGStopMode(); __HAL_RCC_DBGMCU_CLK_DISABLE(); HAL_RCC_DeInit(); /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_DMA_Init(); MX_ADC1_Init(); MX_SPI1_Init(); /* USER CODE BEGIN 2 */ //NRF24L01_SPI_Init(); //NRF24L01_TX_Mode(); lis2dtw12_init(); lis2dtw12_read_data_polling(); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ uint8_t data1=0x8f,data2=0,rst=0,ch[5]; lis2dtw12_all_sources_t all_source; int16_t data11[3]; uint8_t TX_ADDRESS[TX_ADR_WIDTH]={0xC2,0xC2,0xC2,0xC2,0xC2}; while (1) { lis2dtw12_all_sources_get(&hspi1,&all_source); if(all_source.all_int_src.sleep_change_ia) { HAL_Delay(10); } if(kesme) { kesme=0; lis2dtw12_read_data_polling(); res=sprintf((char *)giden,"%x %+06.1f %+1.1f %+1.1f %+2.1f",MyAdress,ortx,orty,ortz,temperature); NRF24L01_SPI_Init(); NRF24L01_WAKEUP_Mode(); NRF24L01_TX_Mode(); NRF24L01_TxPacket(giden); NRF24L01_SLEEP_Mode(); // //MX_SPI1_Init(); } HAL_Delay(10000); __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF2); //HAL_PWREx_EnableGPIOPullUp(GPIOA, PWR_GPIO_BIT_4); HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN2_LOW); HAL_PWR_DisableBkUpAccess(); __HAL_RCC_RTC_DISABLE(); RCC->CSR &= (~RCC_CSR_LSION); // disable LSI HAL_ADCEx_DisableVoltageRegulator(&hadc1); //HAL_SuspendTick(); //HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI ); HAL_PWR_EnterSTANDBYMode(); //SystemClock_Config(); //HAL_ResumeTick(); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } /** * @brief System Clock Configuration * @retval None */ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Configure the main internal regulator output voltage */ HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1); /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV1; RCC_OscInitStruct.PLL.PLLN = 8; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2; 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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } } /** * @brief ADC1 Initialization Function * @PAram None * @retval None */ static void MX_ADC1_Init(void) { /* USER CODE BEGIN ADC1_Init 0 */ /* USER CODE END ADC1_Init 0 */ ADC_ChannelConfTypeDef sConfig = {0}; /* USER CODE BEGIN ADC1_Init 1 */ /* USER CODE END ADC1_Init 1 */ /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) */ hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; hadc1.Init.Resolution = ADC_RESOLUTION_12B; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; hadc1.Init.EOCSelection = ADC_EOC_SEQ_CONV; hadc1.Init.LowPowerAutoWait = DISABLE; hadc1.Init.LowPowerAutoPowerOff = DISABLE; hadc1.Init.ContinuousConvMode = ENABLE; hadc1.Init.NbrOfConversion = 2; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc1.Init.DMAContinuousRequests = ENABLE; hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED; hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_39CYCLES_5; hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_39CYCLES_5; hadc1.Init.OversamplingMode = DISABLE; hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH; if (HAL_ADC_Init(&hadc1) != HAL_OK) { Error_Handler(); } /** Configure Regular Channel */ sConfig.Channel = ADC_CHANNEL_VREFINT; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } /** Configure Regular Channel */ sConfig.Channel = ADC_CHANNEL_TEMPSENSOR; sConfig.Rank = ADC_REGULAR_RANK_2; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN ADC1_Init 2 */ /* USER CODE END ADC1_Init 2 */ } /** * @brief SPI1 Initialization Function * @PAram None * @retval None */ static void MX_SPI1_Init(void) { /* USER CODE BEGIN SPI1_Init 0 */ /* USER CODE END SPI1_Init 0 */ /* USER CODE BEGIN SPI1_Init 1 */ /* USER CODE END SPI1_Init 1 */ /* SPI1 parameter configuration*/ hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; hspi1.Init.Direction = SPI_DIRECTION_2LINES; hspi1.Init.DataSize = SPI_DATASIZE_8BIT; hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH; hspi1.Init.CLKPhase = SPI_PHASE_2EDGE; hspi1.Init.NSS = SPI_NSS_SOFT; hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi1.Init.TIMode = SPI_TIMODE_DISABLE; hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi1.Init.CRCPolynomial = 7; hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE; hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE; if (HAL_SPI_Init(&hspi1) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN SPI1_Init 2 */ /* USER CODE END SPI1_Init 2 */ } /** * Enable DMA controller clock */ static void MX_DMA_Init(void) { /* DMA controller clock enable */ __HAL_RCC_DMA1_CLK_ENABLE(); /* DMA interrupt init */ /* DMA1_Channel1_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0); HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn); } /** * @brief GPIO Initialization Function * @PAram None * @retval None */ static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; /* USER CODE BEGIN MX_GPIO_Init_1 */ /* USER CODE END MX_GPIO_Init_1 */ /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(ACC_CS_GPIO_Port, ACC_CS_Pin, GPIO_PIN_SET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(NRF_CS_GPIO_Port, NRF_CS_Pin, GPIO_PIN_SET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(NRF_CE_GPIO_Port, NRF_CE_Pin, GPIO_PIN_RESET); /*Configure GPIO pins : PB9 PB2 PB3 PB4 PB5 PB6 PB7 PB8 */ GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4 |GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /*Configure GPIO pins : ACC_CS_Pin NRF_CE_Pin */ GPIO_InitStruct.Pin = ACC_CS_Pin|NRF_CE_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); /*Configure GPIO pin : PC15 */ GPIO_InitStruct.Pin = GPIO_PIN_15; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); /*Configure GPIO pins : PA0 PA1 PA3 PA8 PA9 PA10 PA11 PA12 PA15 */ GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_8 |GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12 |GPIO_PIN_15; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /*Configure GPIO pin : PA2 */ GPIO_InitStruct.Pin = GPIO_PIN_2; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /*Configure GPIO pin : NRF_CS_Pin */ GPIO_InitStruct.Pin = NRF_CS_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(NRF_CS_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : NRF_IRQ_Pin */ GPIO_InitStruct.Pin = NRF_IRQ_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(NRF_IRQ_GPIO_Port, &GPIO_InitStruct); /* EXTI interrupt init*/ HAL_NVIC_SetPriority(EXTI2_3_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI2_3_IRQn); /* USER CODE BEGIN MX_GPIO_Init_2 */ /* USER CODE END MX_GPIO_Init_2 */ } /* USER CODE BEGIN 4 */ void measure_vdda(int32_t value) { uint8_t sayac=0; uint32_t temp_vdda=0,temp_temp=0,sum_vdda=0,sum_temp=0; HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_data, number_of_conversion*2); while(!kontrol); kontrol=0; //HAL_Delay(10); HAL_ADC_Stop_DMA(&hadc1); for(sayac=0;sayac<number_of_conversion*2;sayac+=2) { sum_vdda+=adc_data[sayac]; sum_temp+=adc_data[sayac+1]; } temp_vdda=sum_vdda/number_of_conversion; temp_temp=sum_temp/number_of_conversion; vdda_volt=__HAL_ADC_CALC_VREFANALOG_VOLTAGE(temp_vdda,ADC_RESOLUTION_12B); temp=__HAL_ADC_CALC_TEMPERATURE(vdda_volt,temp_temp,ADC_RESOLUTION_12B); } __weak void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) { /* Prevent unused argument(s) compilation warning */ UNUSED(hadc); kontrol=1; /* NOTE : This function should not be modified. When the callback is needed, function HAL_ADC_ConvCpltCallback must be implemented in the user file. */ } //static void NRF_SPI1_Init(void) //{ // // // //HAL_SPI_DeInit(&hspi1); // /* USER CODE BEGIN SPI1_Init 0 */ // // /* USER CODE END SPI1_Init 0 */ // // /* USER CODE BEGIN SPI1_Init 1 */ // // /* USER CODE END SPI1_Init 1 */ // /* SPI1 parameter configuration*/ // hspi1.Instance = SPI1; // hspi1.Init.Mode = SPI_MODE_MASTER; // hspi1.Init.Direction = SPI_DIRECTION_2LINES; // hspi1.Init.DataSize = SPI_DATASIZE_8BIT; // hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; // hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; // hspi1.Init.NSS = SPI_NSS_SOFT; // hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; // hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; // hspi1.Init.TIMode = SPI_TIMODE_DISABLE; // hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; // hspi1.Init.CRCPolynomial = 7; // hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE; // hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE; // if (HAL_SPI_Init(&hspi1) != HAL_OK) // { // Error_Handler(); // } // /* USER CODE BEGIN SPI1_Init 2 */ // // /* USER CODE END SPI1_Init 2 */ // //} /* USER CODE END 4 */ /** * @brief This function is executed in case of error occurrence. * @retval None */ void Error_Handler(void) { /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ __disable_irq(); while (1) { } /* USER CODE END Error_Handler_Debug */ } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @PAram file: pointer to the source file name * @PAram line: assert_param error line source number * @retval None */ void assert_failed(uint8_t *file, uint32_t line) { /* USER CODE BEGIN 6 */ /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* USER CODE END 6 */ } #endif /* USE_FULL_ASSERT */
View more

here is my full code.I am measuring 0.65 mA with this code now.

My problem is that when the STM32 enters standby mode, I am getting a 1-volt output from the pins connected to the NRF24L01. It's an unstable output. I am unable to set these pins as pull-up or pull-down.

Sarra.S
ST Employee

Hello again @Garslanbay

I'm suspecting a current draw from the pins connected to external components, what do you mean by "I am unable to set these pins as pull-up or pull-down."? 

Also for a reference, you can check this article: Tips for using STM32 low-power modes

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.