你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

NUCLEO-C071RB评测6_四种工作模式的功耗测试

[复制链接]
老牛洋车 发布时间:2025-5-13 14:39

按照评测计划,最后一项的评测任务是开发板各种工作模式下的功耗测试,本次测试参照了C70EH和北方两位老师的测试过程及代码,电流检测是利用了开发板上的JP5接口,为了方便测试,还特地做了一根杜邦线加香蕉插头的连接,用于连接数字万用表。本次测试使用的万用表型号是BS476830,精度不算高,但作为定性分析还是能胜任的。

测试的步骤是通过启用长短按键,根据按下的时间长短来选择执行何种工作模式。

在正常工作模式下,蓝绿两颗LED交替按1秒的频率闪烁,在进入其他模式前,蓝色LED闪烁1~4下,分别对应四种工作模式,然后绿色LED也闪烁同样次数,这样循环5次,最后进入选定的工作模式。

除Shutdown模式外,sleep,stop和standby三种模式都可以通过用户按键的中断来唤醒,唤醒后恢复了run模式,可以继续通过按键按下的时间长短选择其它模式的测试,shutdown模式则必须通过复位按键来唤醒。

下面是本次测试的主要代码:

int main(void)
{

  /* USER CODE BEGIN 1 */
  uint8_t i;

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  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 */
  MX_GPIO_Init();
  MX_USART2_UART_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Initialize leds */
  BSP_LED_Init(LED_GREEN);
  BSP_LED_Init(LED_BLUE);

  /* Initialize USER push-button, will be used to trigger an interrupt each time it's pressed.*/
  BSP_PB_Init(BUTTON_USER, BUTTON_MODE_EXTI);

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  printf("NUCLEO-C71RB Board Powr Test.\n\r");
  while (1)
  {
    switch (Mode){
      case 0:                     //Run Mode
        BSP_LED_On(LED_GREEN);
        BSP_LED_Off(LED_BLUE);
        delay_ms(500);
        BSP_LED_Off(LED_GREEN);
        BSP_LED_On(LED_BLUE);
        delay_ms(500);
        break;

      case 1:                     //Sleep Mode
        for(i=0; i<6; i++){
          BSP_LED_Off(LED_GREEN);
          BSP_LED_On(LED_BLUE);
          delay_ms(500);
          BSP_LED_Off(LED_BLUE);
          delay_ms(500);
          BSP_LED_On(LED_GREEN);
          delay_ms(500);
          BSP_LED_Off(LED_GREEN);
          delay_ms(1500);
        }
        HAL_SuspendTick();
        HAL_PWR_EnterSLEEPMode (PWR_MAINREGULATOR_ON ,PWR_SLEEPENTRY_WFI );
        HAL_ResumeTick ();
        break;

      case 2:                     //Stop Mode
        for(i=0; i<6; i++){
          BSP_LED_Off(LED_GREEN);
          BSP_LED_On(LED_BLUE);
          delay_ms(200);
          BSP_LED_Off(LED_BLUE);
          delay_ms(300);
          BSP_LED_On(LED_BLUE);
          delay_ms(200);
          BSP_LED_Off(LED_BLUE);
          delay_ms(300);
          BSP_LED_On(LED_GREEN);
          delay_ms(200);
          BSP_LED_Off(LED_GREEN);
          delay_ms(300);
          BSP_LED_On(LED_GREEN);
          delay_ms(200);
          BSP_LED_Off(LED_GREEN);
          delay_ms(1000);
        }
        HAL_SuspendTick();
        HAL_PWR_EnterSTOPMode (PWR_MAINREGULATOR_ON ,PWR_STOPENTRY_WFI );
        //���Ѻ���Ҫ��������RCCʱ��
        SystemClock_Config();
        HAL_ResumeTick ();
        break;  

      case 3:                     //Standby Mode
        for(i=0; i<6; i++){
          BSP_LED_Off(LED_GREEN);
          BSP_LED_On(LED_BLUE);
          delay_ms(200);
          BSP_LED_Off(LED_BLUE);
          delay_ms(200);
          BSP_LED_On(LED_BLUE);
          delay_ms(200);
          BSP_LED_Off(LED_BLUE);
          delay_ms(200);
          BSP_LED_On(LED_BLUE);
          delay_ms(200);
          BSP_LED_Off(LED_BLUE);
          BSP_LED_On(LED_GREEN);
          delay_ms(200);
          BSP_LED_Off(LED_GREEN);
          delay_ms(200);
          BSP_LED_On(LED_GREEN);
          delay_ms(200);
          BSP_LED_Off(LED_GREEN);
          delay_ms(200);
          BSP_LED_On(LED_GREEN);
          delay_ms(200);
          BSP_LED_Off(LED_GREEN);
          delay_ms(1000);
        }
        HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN2 );
        __HAL_PWR_CLEAR_FLAG (PWR_FLAG_WUF2);
        HAL_PWR_EnterSTANDBYMode ();
        break;

      case 4:                     //Shutdown Mode
        for(i=0; i<6; i++){
          BSP_LED_Off(LED_GREEN);
          BSP_LED_On(LED_BLUE);
          delay_ms(200);
          BSP_LED_Off(LED_BLUE);
          delay_ms(200);
          BSP_LED_On(LED_BLUE);
          delay_ms(200);
          BSP_LED_Off(LED_BLUE);
          delay_ms(200);
          BSP_LED_On(LED_BLUE);
          delay_ms(200);
          BSP_LED_Off(LED_BLUE);
          delay_ms(200);
          BSP_LED_On(LED_BLUE);
          delay_ms(200);
          BSP_LED_Off(LED_BLUE);
          BSP_LED_On(LED_GREEN);
          delay_ms(200);
          BSP_LED_Off(LED_GREEN);
          delay_ms(200);
          BSP_LED_On(LED_GREEN);
          delay_ms(200);
          BSP_LED_Off(LED_GREEN);
          delay_ms(200);
          BSP_LED_On(LED_GREEN);
          delay_ms(200);
          BSP_LED_Off(LED_GREEN);
          delay_ms(200);
          BSP_LED_On(LED_GREEN);
          delay_ms(200);
          BSP_LED_Off(LED_GREEN);
          delay_ms(1000);
        }
        HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN2 );
        __HAL_PWR_CLEAR_FLAG (PWR_FLAG_WUF2);
        HAL_PWREx_EnterSHUTDOWNMode(); 
        break;
    }
    if(Keys>0){                   //Keys Handler
      printf("Keys=%d\n\r",Keys);
      if(Keys<20){                //Run Mode
        Mode = 0;
        printf("Run Mode.\n\r");
      }else if(Keys<40){          //Sleep Mode
        Mode = 1;
        printf("Sleep Mode.\n\r");
      }else if(Keys<80){
        Mode = 2;                 //Stop Mode
        printf("Stop Mode.\n\r");
      }else if(Keys<140){
        Mode = 3;                 //Standby Mode
        printf("Standby Mode.\n\r");
      }else{
        Mode = 4;
        printf("Shutdown Mode.\n\r");
      }
      Keys = 0;
    }

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

这是按键中断回调函数,用于获得按下时间的长短:

``

/*****

  • 按键中断回调函数 *****/ void BSP_PB_Callback(Button_TypeDef Button) { if(HAL_GPIO_ReadPin(BUTTON_USER_GPIO_PORT,BUTTON_USER_PIN) == RESET){ while(HAL_GPIO_ReadPin(BUTTON_USER_GPIO_PORT,BUTTON_USER_PIN) == RESET){ if(Keys<250){ Keys++; delay_ms(20); } } } }

经过测试,stop模式下的工作电流最低,约0.65mA:

stop.gif

standby模式和shutdown模式的工作电流基本相同,约0.82mA左右:

standby.gif

sleep模式下的工作电流约1.96mA,大约是standby模式的一倍:

开发板在正常工作模式下,仅轮流驱动两颗LED闪烁时,工作电流大约是sleep模式的一倍,为3.9mA左右。

至此,开发板的功耗测试圆满完成。

sleep.gif
收藏 评论0 发布时间:2025-5-13 14:39

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版