STM32L011F4マイクロコントローラの消費電流を測定しようとしています。私は 'stm32cubel0'でSTMによって提供されるSTANDBYモードのサンプルコードを試しました。私がマルチメータを使って測定したときのスタンバイモードの消費電流は約320μAです。データシートによれば、独立したウォッチドッグとLSIのオフで、-40℃〜25℃の温度で最大消費電流は0.6μAです。コードを以下に示します。現在の消費量がそれ以上であると考えている人はいますか?スタンバイモードの消費電流が期待値に減少していません
int main(void)
{
/* STM32L0xx HAL library initialization */
HAL_Init();
/* Configure the system clock to 2 MHz */
SystemClock_Config();
/* System Power Configuration */
SystemPower_Config() ;
/* 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);
}
/* Insert 5 seconds delay */
HAL_Delay(5000);
/* The Following Wakeup sequence is highly recommended prior to each Standby mode entry
mainly when using more than one wakeup source this is to not miss any wakeup event.
- Disable all used wakeup sources,
- Clear all related wakeup flags,
- Re-enable all used wakeup sources,
- Enter the Standby mode.
*/
/* Disable all used wakeup sources: PWR_WAKEUP_PIN3 */
HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN3);
/* Clear all related wakeup flags*/
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
/* Enable WakeUp Pin PWR_WAKEUP_PIN3 connected to PA.02 (Arduino A7) */
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN3);
/* Enter the Standby mode */
HAL_PWR_EnterSTANDBYMode();
/* This code will never be reached! */
while (1)
{
}
}
/**
* @brief System Clock Configuration
* The system Clock is configured as follow :
* System Clock source = MSI
* SYSCLK(Hz) = 2000000
* HCLK(Hz) = 2000000
* AHB Prescaler = 1
* APB1 Prescaler = 1
* APB2 Prescaler = 1
* Flash Latency(WS) = 0
* Main regulator output voltage = Scale3 mode
* @retval None
*/
void SystemClock_Config(void)
{
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
/* Enable MSI Oscillator */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
RCC_OscInitStruct.MSIState = RCC_MSI_ON;
RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_5;
RCC_OscInitStruct.MSICalibrationValue=0x00;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct)!= HAL_OK)
{
/* Initialization Error */
while(1);
}
/* Select MSI as system clock source and configure the HCLK, PCLK1 and PCLK2
clocks dividers */
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0)!= HAL_OK)
{
/* Initialization Error */
while(1);
}
/* Enable Power Control clock */
__HAL_RCC_PWR_CLK_ENABLE();
/* The voltage scaling allows optimizing the power consumption when the device is
clocked below the maximum system frequency, to update the voltage scaling value
regarding system frequency refer to product datasheet. */
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3);
/* Disable Power Control clock */
__HAL_RCC_PWR_CLK_DISABLE();
}
/**
* @brief System Power Configuration
* The system Power is configured as follow :
* + VREFINT OFF, with fast wakeup enabled
* + No IWDG
* + Wakeup using PWR_WAKEUP_PIN3
* @param None
* @retval None
*/
static void SystemPower_Config(void)
{
/* Enable Power Control clock */
__HAL_RCC_PWR_CLK_ENABLE();
/* Enable Ultra low power mode */
HAL_PWREx_EnableUltraLowPower();
/* Enable the fast wake up from Ultra low power mode */
HAL_PWREx_EnableFastWakeUp();
}
/**
* @brief Enters Standby mode.
* @note In Standby mode, all I/O pins are high impedance except for:
* - Reset pad (still available)
* - RTC_AF1 pin (PC13) if configured for tamper, time-stamp, RTC
* Alarm out, or RTC clock calibration out.
* - RTC_AF2 pin (PC13) if configured for tamper.
* - WKUP pin 1 (PA00) if enabled.
* - WKUP pin 2 (PC13) if enabled.
* - WKUP pin 3 (PE06) if enabled, for stm32l07xxx and stm32l08xxx devices only.
* - WKUP pin 3 (PA02) if enabled, for stm32l031xx devices only.
* @retval None
*/
void HAL_PWR_EnterSTANDBYMode(void)
{
/* Select Standby mode */
SET_BIT(PWR->CR, PWR_CR_PDDS);
/* Set SLEEPDEEP bit of Cortex System Control Register */
SET_BIT(SCB->SCR, SCB_SCR_SLEEPDEEP_Msk);
/* This option is used to ensure that store operations are completed */
#if defined (__CC_ARM)
__force_stores();
#endif
/* Request Wait For Interrupt */
__WFI();
}
1)あなたのマルチメーターは低電流測定値では正確ではなく、2)ボードには電力を消費している他のコンポーネントがあり、測定から隔離されていません。どのボードとメーターを使用していますか?測定をどのように達成していますか? – mbmcavoy
私はより高い精度と負荷電圧を低減するために、Volcraft VC280マルチメーターをμcurrentGOLDと組み合わせて使用しています。また、プログラムのデバッグやロードにST-LINK/V2(インサーキットデバッガとプログラマ)を使用していました。 ST-LINK/V2に接続しているワイヤを外し、消費電流を2.8μAに減らしました。これは素晴らしいことです!私は加速度計とRFID ICをPCB上に持っており、測定はマイクロコントローラを分離することなく行われます。 RFIDの電源は、マイクロコントローラによって制御されます。したがって、電流消費には影響しません。 – nayak
低電力モードでは、加速度計の合計消費電流は13μAです(データシート参照)。 – nayak