测试STM32 RTOS 低功耗模式

本文通过在STM32上实现5秒翻转一次的LED灯线程,详细介绍了如何测试LED功耗及加入预睡眠和后睡眠处理程序。作者针对GPIOA进行了低功耗设置,实测LED熄灭时功耗降低至1.6mA,点亮时为2.1mA。关键步骤包括配置休眠过程中的外围设备断电和唤醒,以及使用HAL库进行低功耗模式切换。
摘要由CSDN通过智能技术生成

测试低功耗模式

先搭建一个5s翻转一次的LED灯线程

执行一次翻转、IDLE5秒

void StartLEDTask(void const * argument)
{
  /* USER CODE BEGIN 5 */
  /* Infinite loop */
  for(;;)
  {

	  HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
	  osDelay(5000);

  }
  /* USER CODE END 5 */
}

测试LED亮时 4.9ma

LED灭时 4.3ma

加入休眠程序

  • 配置加入休眠
    在这里插入图片描述

  • 找例程

    C:\Users\frank\STM32Cube\Repository\STM32Cube_FW_F4_V1.26.2\Projects\STM32469I_EVAL\Applications\FreeRTOS\FreeRTOS_LowPower\Src

    在FREERTOS 例程里找到 lowpower例程

    在其main.c文件中 找到:

    void PreSleepProcessing(uint32_t ulExpectedIdleTime)
    {
      /* Called by the kernel before it places the MCU into a sleep mode because
      configPRE_SLEEP_PROCESSING() is #defined to PreSleepProcessing().
    
      NOTE:  Additional actions can be taken here to get the power consumption
      even lower.  For example, peripherals can be turned off here, and then back
      on again in the post sleep processing function.  For maximum power saving
      ensure all unused pins are in their lowest power state. */
    
      /* Disable the peripheral clock during Low Power (Sleep) mode.*/
      __HAL_RCC_GPIOG_CLK_SLEEP_DISABLE();
      /* 
        (ulExpectedIdleTime) is set to 0 to indicate that PreSleepProcessing contains
        its own wait for interrupt or wait for event instruction and so the kernel vPortSuppressTicksAndSleep 
        function does not need to execute the wfi instruction  
      */
      (void) ulExpectedIdleTime;
    
      /*Enter to sleep Mode using the HAL function HAL_PWR_EnterSLEEPMode with WFI instruction*/
      HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);  
    }
    
    /**
    
      * @brief  Post Sleep Processing
      * @param  ulExpectedIdleTime : Not used
      * @retval None
        */
        void PostSleepProcessing(uint32_t ulExpectedIdleTime)
        {
          /* Called by the kernel when the MCU exits a sleep mode because
          configPOST_SLEEP_PROCESSING is #defined to PostSleepProcessing(). */
    
      /* Avoid compiler warnings about the unused parameter. */
      (void) ulExpectedIdleTime;
    }
    

    其中void PreSleepProcessing(uint32_t ulExpectedIdleTime)void PostSleepProcessing(uint32_t ulExpectedIdleTime) 是两个主要函数

  • 改代码

直接运行会报错

__HAL_RCC_GPIOG_CLK_SLEEP_DISABLE();

这里GPIOG不一定是自己MCU有的IO,改成GPIOA,并ctrl点入,看下自己MCU都有哪些IO,全都给禁了,例如我是F411,改为:

__weak void PreSleepProcessing(uint32_t ulExpectedIdleTime)
{
/* place for user code */
/* Called by the kernel before it places the MCU into a sleep mode because
configPRE_SLEEP_PROCESSING() is #defined to PreSleepProcessing().

NOTE:  Additional actions can be taken here to get the power consumption
even lower.  For example, peripherals can be turned off here, and then back
on again in the post sleep processing function.  For maximum power saving
ensure all unused pins are in their lowest power state. */

/* Disable the peripheral clock during Low Power (Sleep) mode.*/
__HAL_RCC_GPIOA_CLK_SLEEP_DISABLE();
__HAL_RCC_GPIOB_CLK_SLEEP_DISABLE();
__HAL_RCC_GPIOC_CLK_SLEEP_DISABLE();
__HAL_RCC_GPIOH_CLK_SLEEP_DISABLE();
/*
(ulExpectedIdleTime) is set to 0 to indicate that PreSleepProcessing contains
its own wait for interrupt or wait for event instruction and so the kernel vPortSuppressTicksAndSleep
function does not need to execute the wfi instruction
*/
(void) ulExpectedIdleTime;

/*Enter to sleep Mode using the HAL function HAL_PWR_EnterSLEEPMode with WFI instruction*/
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
}

__weak void PostSleepProcessing(uint32_t ulExpectedIdleTime)
{
/* place for user code */
/* Called by the kernel when the MCU exits a sleep mode because
configPOST_SLEEP_PROCESSING is #defined to PostSleepProcessing(). */

/* Avoid compiler warnings about the unused parameter. */
(void) ulExpectedIdleTime;
}

以上函数在freertos.c中

测试 灭时1.6ma

亮时2.1ma

### 回答1: STM32 RTOS FOTA是指基于STM32系列微控制器的实时操作系统(RTOS实现的固件升级技术。 STM32是意法半导体公司推出的一款低功耗、高性能的微控制器系列。而RTOS(Real-Time Operating System)是一种实时操作系统,采用多任务处理的方式能够应对实时性要求较高的应用场景。 FOTA(Firmware Over-The-Air)是通过无线方式进行的固件升级技术。传统的固件升级需要通过有线方式连接到设备进行升级操作,而FOTA技术使得固件升级可以通过无线网络进行,提供了更加便捷和灵活的升级方式。 在STM32微控制器上使用RTOS FOTA技术,可以实现以下功能: 1.固件远程升级:通过无线网络,远程对STM32微控制器上的固件进行升级,无需直接连接到设备上,方便了大规模设备的升级操作。 2.实时性:RTOS的特性使得FOTA升级过程可以在设备继续运行其他任务的同时进行,不会影响设备的实时性能。 3.安全性:STM32微控制器上的RTOS FOTA技术可以使用加密算法对固件进行加密和认证,确保固件升级的安全性,防止非法入侵和病毒攻击。 4.灵活性:通过RTOS FOTA技术,可以针对不同的设备和应用场景,定制不同的固件升级策略,满足不同需求。 综上所述,STM32 RTOS FOTA是一种基于STM32微控制器的实时操作系统的固件升级技术,通过无线方式进行远程升级,具有实时性、安全性和灵活性等特点。它可以应用于各种不同的设备和领域,提供便捷、高效、安全的固件升级解决方案。 ### 回答2: STM32 是一种常用的嵌入式微控制器系列,RTOS 是实时操作系统(Real-Time Operating System)的缩写,而 FOTA 是固件升级(Firmware Over-The-Air)的缩写。 STM32 RTOS FOTA 结合了STM32 微控制器、实时操作系统和固件升级技术。 首先,STM32 微控制器系列是由ST公司开发的一款强大的嵌入式微控制器。它具有低功耗、高性能和丰富的外设接口,适用于各种嵌入式应用。 其次,RTOS 提供了实时任务调度、资源管理和并发控制等功能,能够满足实时性要求高的应用场景。使用RTOS可以将不同任务分配给不同的优先级,确保任务之间按照预定的顺序进行执行。 最后,FOTA 技术使得固件升级可以通过无线方式进行,无需物理连接。这极大地便利了嵌入式设备在实际应用的升级和维护。通过FOTA,嵌入式系统可以在不断正常运行的情况下完成固件升级,大大提高了设备的可靠性和业务的连续性。 在STM32 RTOS FOTARTOS可以提供任务管理和调度的能力,使得固件升级过程不会断其他任务的执行。同时,STM32微控制器的强大性能和丰富的外设接口,与FOTA技术相结合,为嵌入式设备提供了更加便捷的固件升级方式。 综上所述,STM32 RTOS FOTA 是将STM32 微控制器、实时操作系统和固件升级技术结合在一起的一种解决方案。它能够提供实时任务调度、资源管理、并发控制和无线固件升级等功能,适用于各种嵌入式应用场景,提高了设备的可靠性和可维护性。 ### 回答3: STM32是意法半导体公司推出的一款嵌入式系统开发板,具有强大的性能和可靠性。RTOS是实时操作系统的简称,能够专门处理实时任务的需求。FOTA是指远程固件更新,它允许通过云端或网络升级设备的固件,从而提供更好的用户体验和功能。 在STM32使用RTOS可以提供更高的可靠性和效率。RTOS可以将系统分为多个任务,并通过合理的调度机制使这些任务并行执行,避免任务之间的冲突和竞争。对于实时任务,RTOS可以保证它们在预定的时间内完成,确保系统的实时性和稳定性。 而通过FOTA可以实现远程固件的更新。在嵌入式系统,由于设备通常分布在不同的地方且难以访问,通过传统的手动固件更新方式是不现实的。而FOTA可以通过远程的方式将新的固件推送到设备上,从而实现固件的更新,提供更好的功能和性能。 在STM32结合使用RTOS和FOTA,可以实现高度自主且稳定的嵌入式系统。通过使用RTOS,系统可以高效地管理任务和资源,保证系统的实时性和可靠性。而FOTA可以远程更新固件,提供更好的用户体验和功能。这种结合可以使系统更加灵活和可靠,满足不同应用场景的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值