精华内容
下载资源
问答
  • STM32F103低功耗虽然应用中有点鸡肋的感觉,但是也有他的优势,做好的话也可以世道30uA左右的待机电流,在一些要求不高的场合还是有它的用途,这里整理了一些相关应用出现的问题和解决方案以及代码。 1、主要问题...

    STM32F103低功耗虽然应用中有点鸡肋的感觉,但是也有他的优势,做好的话也可以世道30uA左右的待机电流,在一些要求不高的场合还是有它的用途,这里整理了一些相关应用出现的问题和解决方案以及代码。

    1、主要问题问题
           我的RTC初始化部分有个“保存在备份寄存器的RTC标志是否已经被配置过的判断”,如果已经配置过,则进入else部分,但是这个else部分没有“要使能电源时钟,使能备份时钟,取消后备区的写保护”这些配置语句,而待机唤醒后程序从主函数执行,会执行到else部分,因为没有那些配置语句,所以再次对闹钟赋值就会不成功,就会卡在那里。(那些配置语句在clock_ini函数里,有注释)
    2、待机用不用加extiline17事件的处理
    如果把闹钟中断的服务程序放在void RTC_IRQHandler(void)里面处理的话,不需要extiline17事件也可以唤醒(亲测),如果闹钟中断的服务程序放在void RTCAlarm_IRQHandler(void)里面处理的话,需要extiline17事件

    3、RTCAlarm_IRQn和RTC_IRQn优先级问题
    我见到网上说要把RTCAlarm_IRQn的优先级设置比RTC_IRQn优先级高,但是把闹钟中断的服务程序放在void RTC_IRQHandler(void)里面处理的话,不用这样设置也可以。如果闹钟中断的服务程序放在void RTCAlarm_IRQHandler(void)里面处理的话需要设置优先级,最好根据情况先把优先级的问题解决清楚
    4、低功耗diamante示例如下:

    void Clock_ini(void)  
    {  
      if(BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5)          //判断保存在备份寄存器的RTC标志是否已经被配置过  
      {  
         printf("\r\n\n RTC not yet configured....");  
         RTC_Configuration();           <span style="white-space:pre">    </span>//RTC初始化      
         printf("\r\n RTC configured....");  
         Time_Adjust();                 //设置RTC 时钟参数  
         BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);            //RTC设置后,将已配置标志写入备份数据寄存器   
      }  
      else  
      {        
         if(RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET)      //检查是否掉电重启  
         {  
           printf("\r\n\n Power On Reset occurred....");  
         }                                                     
         else if(RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET) //检查是否reset复位  
         {  
           printf("\r\n\n External Reset occurred....");  
         }  
         printf("\r\n No need to configure RTC....");    
    /***新加的,测试,待机唤醒后,程序不经过上面的if部分,所以没有这三步(两个语句),所以程序会卡,所以加上,果然***/  
         RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);    
          /* 允许访问BKP区域 */  
         PWR_BackupAccessCmd(ENABLE);   </span>  
           
         RTC_WaitForSynchro();               //等待RTC寄存器被同步   
         RTC_ITConfig(RTC_IT_SEC, ENABLE);          //使能秒中断  
         RTC_WaitForLastTask();   
         RTC_ITConfig(RTC_IT_ALR, ENABLE);   //naozhong  
         RTC_WaitForLastTask();     <span style="white-space:pre">    </span>//等待写入完成  
      }  
      RCC_ClearFlag();              //清除复位标志  
    
       void NVIC_Configuration(void)  
    {  
      NVIC_InitTypeDef NVIC_InitStructure;    
      EXTI_InitTypeDef EXTI_InitStructure;  
      
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);     
         
      /* Enable the RTC Interrupt */  
      NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;            //配置外部中断源(秒中断)   
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 7;  
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
      NVIC_Init(&NVIC_InitStructure);       
        
        /* Enable the RTC Alarm Interrupt */  
      NVIC_InitStructure.NVIC_IRQChannel = RTCAlarm_IRQn;       //配置外部中断源(闹钟中断)   
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
      NVIC_Init(&NVIC_InitStructure);    
        
      //闹钟中断接到第17线外部中断  
       EXTI_ClearITPendingBit(EXTI_Line17);  
       EXTI_InitStructure.EXTI_Line = EXTI_Line17;  
       EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;  
       EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  
       EXTI_InitStructure.EXTI_LineCmd = ENABLE;  
       EXTI_Init(&EXTI_InitStructure);   
    }  
    
    void RTC_Configuration(void)  
    {   
      /* 使能 PWR 和 BKP 的时钟 */  
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);   
      /* 允许访问BKP区域 */  
      PWR_BackupAccessCmd(ENABLE);  
      /* 复位BKP */  
      BKP_DeInit();  
    #ifdef RTCClockSource_LSI  
      /* 使能内部RTC时钟 */   
      RCC_LSICmd(ENABLE);  
      /* 等待RTC内部时钟就绪 */  
      while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)  
      {  
      }  
      /* 选择RTC内部时钟为RTC时钟 */  
      RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);    
    #elif defined   RTCClockSource_LSE    
      /* 使能RTC外部时钟 */  
      RCC_LSEConfig(RCC_LSE_ON);  
      /* 等待RTC外部时钟就绪 */  
      while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)  
      {       
      }  
      /* 选择RTC外部时钟为RTC时钟 */  
      RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);    
    #endif  
      /* 使能RTC时钟 */  
      RCC_RTCCLKCmd(ENABLE);  
      
      
    #ifdef RTCClockOutput_Enable    
      /* Disable the Tamper Pin */  
      BKP_TamperPinCmd(DISABLE); /* To output RTCCLK/64 on Tamper pin, the tamper  
                                   functionality must be disabled */  
                                     
      /* 使能在TAMPER脚输出RTC时钟 */  
      BKP_RTCCalibrationClockOutputCmd(ENABLE);  
    #endif   
      
      /* 等待RTC寄存器同步 */  
      RTC_WaitForSynchro();     
      
     /* 等待写RTC寄存器完成 */  
      RTC_WaitForLastTask();  
      
      /* 使能RTC  naozhong中断 */    
      RTC_ITConfig(RTC_IT_ALR, ENABLE);  
      
      /* 等待写RTC寄存器完成 */  
      RTC_WaitForLastTask();  
        
      /* 使能RTC秒中断 */    
      RTC_ITConfig(RTC_IT_SEC, ENABLE);  
      
     /* 等待写RTC寄存器完成 */  
     RTC_WaitForLastTask();  
       
      /* 设置RTC预分频 */  
    #ifdef RTCClockSource_LSI  
      RTC_SetPrescaler(31999);            /* RTC period = RTCCLK/RTC_PR = (32.000 KHz)/(31999+1) */  
    #elif defined   RTCClockSource_LSE  
      RTC_SetPrescaler(32767);            /* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */  
    #endif  
        
      /* 等待写RTC寄存器完成 */  
      RTC_WaitForLastTask();  
    }  
    
    void RTCAlarm_IRQHandler(void)  
    {  
      RTC_WaitForSynchro();  
      if(RTC_GetITStatus(RTC_IT_ALR) != RESET)  
      {  
         //printf("mmmmmm");  
         EXTI_ClearITPendingBit(EXTI_Line17);  
         RTC_WaitForLastTask();  
         if(PWR_GetFlagStatus(PWR_FLAG_WU) != RESET)  
            {  
                // 清除唤醒标志  
                PWR_ClearFlag(PWR_FLAG_WU);  
                RTC_WaitForLastTask();  
            }  
        RTC_ClearITPendingBit(RTC_IT_ALR);  
        RTC_WaitForLastTask();  
        printf("\nIt will wake up after %d s\n",standbytime);  
        RTC_Enter_StandbyMode(standbytime);//standbytime秒后唤醒  
      }  
    }  
    
    void RTC_Enter_StandbyMode(u32 s)  
    {  
        RTC_WaitForLastTask();  
        RTC_SetAlarm(RTC_GetCounter()+s);  
        RTC_WaitForLastTask();  
        // 进入待机模式, 此时所有1.8V域的时钟都关闭,HIS和HSE的振荡器关闭, 电压调节器关闭.  
        // 只有WKUP引脚上升沿,RTC警告事件,NRST引脚的外部复位,IWDG复位.  
        /* Request to enter STANDBY mode (Wake Up flag is cleared in PWR_EnterSTANDBYMode function) */  
        PWR_EnterSTANDBYMode();  
    }  
    


     

    展开全文
  • STM32F103低功耗实验

    2020-06-05 20:37:25
    现在很多MCU都有低功耗控制,当需要系统省电时,就需要进入适当的低功耗模式来降低系统的功耗,尤其当MCU用在电池供电的设备上时,低功耗尤为重要,下面我们介绍STM32的3种低功耗以及唤醒条件。 睡眠模式:进入睡眠...

    实验目的

    本章学习STM32的低功耗控制,掌握如何进入低功耗状态以及如何从此状态唤醒,数据手册请参看第四章电源控制PWR中的内容

    实验简介

    现在很多MCU都有低功耗控制,当需要系统省电时,就需要进入适当的低功耗模式来降低系统的功耗,尤其当MCU用在电池供电的设备上时,低功耗尤为重要,下面我们介绍STM32的3种低功耗以及唤醒条件。

    睡眠模式:进入睡眠模式时,内核时钟停止,从睡眠模式中恢复不需要任何特殊的序列,但要重新使能ARM内核的时钟。在睡眠模式下,指令的执行被中止直至复位或中断出现。外设在CPU内核处于睡眠模式期间继续运行,并可产生中断使处理器恢复执行指令。睡眠模式下,处理器内核自身,存储器系统,有关控制器及内部总线停止工作,因此这些器件的动态功耗会降低,只要出现任何使能的中断,CPU内核就会从睡眠模式中唤醒。
    在这里插入图片描述
    停止模式:在停止模式下电压调节器可运行在正常或低功耗模式。此时在1.8V供电区域的所有时钟都被停止,PLL,HSI,和 HSE RC振荡器的功能被禁止,SRAM和寄存器内容被保留下来。在停止模式下,所有I/O引脚都保持他们在运行模式时的状态。
    停止模式进入和退出
    在这里插入图片描述
    待机模式:待机模式可实现系统的最低功耗。该模式是在Cortex-M3深睡眠模式时关闭电压调节器。整个1.8V供电区域被断开。PLL ,HSI 和 HSE 振荡器也被断电。SRAM和寄存器内容丢失。只有备份的寄存器和待机电路维持供电。

    待机模式的进入和退出
    在这里插入图片描述
    这三种模式最低功耗的是待机模式,其只需要2uA左右的电流,停机模式是次低功耗的,其典型的电流消耗在20uA左右。最后就是睡眠模式了。在这里插入图片描述

    代码

    待机模式
    main.c

    #include "MyIncludes.h"
    
    u16 sys_cnt = 0;
    void systick_isr(void)
    {
       if(sys_cnt <100)
       sys_cnt++;
       else
       {
         sys_cnt = 0;
         HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_4|GPIO_PIN_5);
       }
    }
    
    void Key_Init(void)
    {
      GPIO_InitTypeDef GPIO_InitStruct;
     
      __GPIOC_CLK_ENABLE();
      //使能c时钟
     
     GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_3 ;
     GPIO_InitStruct.Mode = GPIO_MODE_INPUT;//输入
     GPIO_InitStruct.Pull = GPIO_NOPULL;//上拉
     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;//高速
     HAL_GPIO_Init(GPIOC,&GPIO_InitStruct);
    }
    
    int main(void)
    {
      System_Init();
      
      LED_Init();
     
      HAL_GPIO_WritePin(GPIOC,GPIO_PIN_4|GPIO_PIN_5,GPIO_PIN_RESET);
      delay_ms(2000);
      HAL_GPIO_WritePin(GPIOC,GPIO_PIN_4|GPIO_PIN_5,GPIO_PIN_SET);
      delay_ms(1000);
      
      SysTick_Init(systick_isr);
    
      Key_Init();
      
      LowPWR_Init();
      //低功耗初始化
    
      while(1)
      {
        while(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_3) == GPIO_PIN_RESET )
        {
        
        }
        //等待按键松开
        delay_ms(50);
        if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_3) ==GPIO_PIN_RESET )
        {
          printf("Enter StandbyMode\r\n");
          StandbyMode_Enter();
        }
      }
      
    }
    

    pwr.h

    #ifndef __PWR_H_
    #define __PWR_H_
    
    #include "stm32f1xx.h"
    #include "stm32_types.h"
    #include "stm32f1xx_hal.h"
    
    void LowPWR_Init(void);
    //低功耗初始化
    void StandbyMode_Enter(void);
    //系统进入待机模式
    //STM32F1的PA0可用作唤醒引脚WKUO
    void StopMode_Enter(void);
    //系统进入停止模式
    void StopMode_Exit(void);
    //系统退出停止模式
    void SleepMode_Exit(void);
    //退出休眠模式
    #endif
    
    

    pwr.c

    #include "pwr.h"
    
    PWR_PVDTypeDef sConfigPVD;
    
    void LowPWR_Init(void)
    //低功耗初始化
    {
     __HAL_RCC_PWR_CLK_ENABLE();
     //使能PWR时钟
    }
    
    void StandbyMode_Enter(void)
    //系统进入待机模式
    //STM32F1的PA0可用作唤醒引脚WKUP,上升沿唤醒
    //待机唤醒等同于复位操作
    {
      if( __HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET )
      //检查并处理系统是否从待机模式恢复
      {
        __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
        //清除标志
      }
     
      HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);
      //禁止PA0作为唤醒引脚
      
      __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
      //清除唤醒标志
    
      HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
      //使能PA0作为唤醒引脚,PA0的上升沿唤醒
    
      HAL_SuspendTick();
      //禁止SysTick中断,防止唤醒系统
      
      HAL_PWR_EnterSTANDBYMode();
      //进入待机模式
    }
    
    void StopMode_Enter(void)
    //系统进入停止模式
    {
       HAL_SuspendTick();
       //禁止SysTick中断
       HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);
       //进入停止模式,低功耗调压器开启
    }
    
    void StopMode_Exit(void)
    //退出停止模式
    {
      __HAL_RCC_HSE_CONFIG(RCC_HSE_ON);
      //使能HSE
      while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET);
      //等待HSE准备就绪
      __HAL_RCC_PLL_ENABLE();
      //使能PLL
      while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
      //等待PLL准备就绪
      {
      }
      __HAL_RCC_SYSCLK_CONFIG(RCC_SYSCLKSOURCE_PLLCLK);
      // 选择PLL作为系统时钟源
     
      while(__HAL_RCC_GET_SYSCLK_SOURCE() != 0x08)
      //等待PLL被选择为系统时钟源
      {
      }
    }
    
    void SleepMode_Enter(void)
    //系统进入睡眠模式
    {
      HAL_SuspendTick();
      //禁止SysTICK中断,防止唤醒系统
      HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI);
      //进入睡眠模式
    }
    
    void SleepMode_Exit(void)
    //退出休眠模式
    {
      HAL_ResumeTick();
      //唤醒SYSTICK
      //初始化外设
    }
    
    void PVD_IRQHandler(void)
    //中断服务函数
    {
      HAL_PWR_PVD_IRQHandler();
    }
    
    void HAL_PWR_PVDCallback(void)
    //中断回调函数
    {
    
    }
    
    展开全文
  • STM32时钟源 STM32中有四个时钟源: HSE(高速外部时钟) LSE(低速外部时钟) HSI(高速内部时钟) LSI(低速内部时钟)

    STM32时钟源

    STM32中有四个时钟源:

    • HSE(高速外部时钟):晶振频率为4~16MHz,由实际外部晶振频率所决定。
    • LSE(低速外部时钟):晶振频率为32.768kHz,主要用于提供实时时钟。
    • HSI(高速内部时钟):由内部RC震荡产生,为8MHz,但存在不稳定的问题。
    • LSI(低速内部时钟):由内部RC震荡产生,用于提供实时时钟,频率约为40kHz。

    STM32F103中默认的时钟源为8M高速外部时钟,通过分频器LLXTPRE选择不分频为8MHz,再通过锁相环PLL经过9倍频得到时钟频率72MHz,并将该频率作为系统时钟。
    STM32中很方便的将以上步骤简化为一个初始化函数:

    SystemInit();
    

    因此,对于STM32中时钟的配置可以分为以下几步:

    1. 初始化时钟
    RCC_Init();
    
    1. 选择时钟源:HSE、LSE、HSI、LSI(LSE、LSI可通过分频或直接用于RTC)
    RCC_HSEConfig(RCC_HSE_ON); //8M外部时钟源
    

    高速外部晶振时钟源默认为8M,若要修改为其他频率,需要进行如下设置:

    • 打开头文件stm32f10x.h,进行如下修改:将HSE_VALUE的8MHz修改为12MHz。

    • 打开system_stm32f10x.c,对锁相环PLL进行如下修改:将9倍频修改为6倍频


    3. 设置PLL的时钟源及倍频系数

    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); 
    

    第一个参数可以进行不同设置:
    . RCC_PLLSource_HSI_Div2:HSI频率除以2

    • RCC_PLLSource_HSE_Div1:HSE频率
    • RCC_PLLSource_HSE_Div2:HSE频率除以2
      第二个参数可以进行不同设置,进行不同的倍频,倍频系数为2~15:
    • RCC_PLLMul_2
    • RCC_PLLMul_3
    • RCC_PLLMul_4
    • RCC_PLLMul_5
    • RCC_PLLMul_6
    • RCC_PLLMul_7
    • RCC_PLLMul_8
    • RCC_PLLMul_9
    • RCC_PLLMul_10
    • RCC_PLLMul_11
    • RCC_PLLMul_12
    • RCC_PLLMul_13
    • RCC_PLLMul_14
    • RCC_PLLMul_15
    1. 选择PLL作为系统时钟,并使能
    RCC_PLLCmd(ENABLE);    //使能PLL
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); 
    

    例程说明

    int main(void)
     { 
    	 RCC_ClocksTypeDef  RCC_Clocks; 
    	 RS485_Config(9600);
    	 delay_init();	
    	  
    	 RCC_GetClocksFreq(&RCC_Clocks); 
    	 printf("\r\n进入低功耗前的系统时钟频率:%d\r\n",RCC_Clocks.SYSCLK_Frequency);
    	 delay_ms(50);
    	 	 
    	 USART_Cmd(USART1, DISABLE); 
    	 DisablePeriph();	
    	 PA0_Init();
    	 
    	 PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
     
    	 RS485_Config(9600);
    	 delay_init();
    	 
    	 RCC_GetClocksFreq(&RCC_Clocks); 
    	 printf("\r\n退出低功耗后的系统时钟频率:%d\r\n",RCC_Clocks.SYSCLK_Frequency);
    	 while(1)
    	 {
    	 }
    }
    
    /*唤醒低功耗后配置时钟*/
    void EXTI0_IRQHandler(void)
    { 
    	SYSCLKConfig();
    	EXTI_ClearITPendingBit(EXTI_Line0);
    }
    
    /*时钟配置*/
    void SYSCLKConfig(void)
    { 
      RCC_DeInit();/*把RCC外设初始化为复位状态*/	 
      RCC_HSEConfig(RCC_HSE_ON);/* 使能 HSE */	
      if(RCC_WaitForHSEStartUp() == SUCCESS) /*选择HSE作为PLL时钟源,将HSE二分频后再二倍频*/
    	{
    		RCC_PLLConfig(RCC_PLLSource_HSE_Div2,RCC_PLLMul_2);
    	}  
       while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET)/* 等待PLL准备就绪 */
      {
      }  
      RCC_PLLCmd(ENABLE);/* 使能PLL */     
      while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)/* 等待PLL准备就绪 */
      {
      }   
      RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/*选择PLL作为系统时钟源 */    
      while (RCC_GetSYSCLKSource() != 0x08)/* 等待PLL被选择为系统时钟源 */
      {
      }
    }
    

    运行结果如下:
    在这里插入图片描述

    展开全文
  • 最新在做一个低功耗项目 ,用到stm32f103芯片,用到的stop模式和standby模式。 因 stop 只比 standby 模式多1-3uA,最终选用了 stop 模式。下面是官方文档中对几种模式的说明。 根据文档介绍,理论 stm32f103 ...

    最新在做一个低功耗项目 ,用到stm32f103芯片,用到的stop模式和standby模式。

    因 stop 只比 standby 模式多1-3uA,最终选用了 stop 模式。下面是官方文档中对几种模式的说明。

    根据文档介绍,理论 stm32f103 standby 模式可低至2.1uA, stop 模式 3-5uA的样子。

    但实在我们的项目中最终 无论是 stop 和是 standby 都有800uA的电流消不去。

    最后把所有的引脚都设为模拟输入状态还是一样,经过一步一步分析,最终发现是在进入低功耗之前开启的ADC转换功能,

    发现问题后 ,在时入低功耗之前关闭ADC转换使能即可,参考代码如下:

       if( mode ) // standby
        {

            __HAL_ADC_DISABLE(&hadc1);

            HAL_PWR_EnterSTANDBYMode();                             // 执行此步后等看门狗唤醒

        }
        else          // stop
        {
            __HAL_ADC_DISABLE(&hadc1);
            HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

        }

     

    展开全文
  • 工程中用到低功耗的控制,本来想使用待机模式,后来发现待机后所有IO口为高阻态,这样对于一些IO口控制的外设有些不妥,想过外部上拉一个电阻可是功耗不好控制放弃该方案选用停止模式。停止模式后IO口保持停止前的...
  • stm32f103低功耗分为WFI等待中断和WFE等待事件,我只用到等待中断,这里没有细究。待机模式最低功耗2uA,只有备份寄存器和待机电路供电,PLL,HSI,HSE断开,寄存器和SRAM复位,除了唤醒引脚其余都处于高阻态可以被...
  • STM32F103内部RTC低功耗唤醒工程,KEIL4软件,下载直接可用。 STM32F103内部RTC低功耗唤醒工程,KEIL4软件,下载直接可用。 STM32F103内部RTC低功耗唤醒工程,KEIL4软件,下载直接可用。 STM32F103内部RTC低功耗唤醒...
  • 这是一个基于STM32F103VET6的低功耗能量管理系统程序,包含了上位机如何利用串口对参数进行配置的代码,如何进入低功耗以及如何来唤醒单片机,如有问题请留言
  • STM32F103ZET6 低功耗停止模式
  • 此程序为STM32F103 移植FreeRTOS系统工程源码,有需要可以学习参考,特别适合刚入门, 或者还没有入门的单片机开发者,可以提高代码开发周期,提升编程水平
  • stm32f103系列低功耗模式(附代码)

    千次阅读 2019-05-07 10:17:03
    低功耗模式下,stm32f103系列的实际功耗st官方芯片手册有给出,也可以看如下文章: https://blog.csdn.net/yky189/article/details/89914928 进入代码模式: 不用初始化其它rtc时钟有个的其它配置:直接调用...
  • stm32f103 RTC唤醒低功耗模式,简单快捷c文件,代码真实可用。
  • STM32F103有三种低功耗模式: 睡眠模式(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行) 停止模式(所有的时钟都已停止) 待机模式(1.8V电源关闭) 此外,在运行模式...
  • STM32F103三种低功耗模式的区别STMF103的三种低功耗模式唤醒之后代码运行流程睡眠模式停机模式待机模式低功耗模式下GPIO的状态睡眠模式停机模式待机模式低功耗设计思路 STMF103的三种低功耗模式 睡眠模式(sleep_...
  • STM32F103入门 | 2.STM32F103xx内部资源介绍

    万次阅读 多人点赞 2018-12-30 10:44:06
    2.1STM32F103xx增强型LQFP48引脚分布 2.2 STM32F103xx概述 2.2.1ARM®的Cortex™-M3核心并内嵌闪存和SRAM ARM的Cortex™-M3处理器是最新一代的嵌入式ARM处理器,它为实现MCU的需要提供了成本的平台、缩减...
  • STM32F103RCT6低功耗项目设计总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容...
  • 进入停止模式之后,任何外部中断都可以唤醒低功耗,但是需要重新配置时钟,不然系统将以默认时钟(没有经过倍频)运行。 1.进入低功耗 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); PWR_EnterSTOPMode (PWR...
  • 刚开始进入STOPMode后,整机功耗有300uA的,此时外围其他硬件电路电流已经可以肯定漏电流在nA级,因此调试方向在主芯片,经过实际测试,都是GPIO配置的问题,比如某个GPIO为中断输入,闲置为电平,...另外将STM32...
  • STM32F103C8T6 Standby低功耗模式

    千次阅读 2012-11-19 14:37:58
    STM32F103C8T6 低功耗 1. 开发环境: winXP MDK4.45 STM32 3.5固件库 2. 低功耗模式简介 刚接触PWR的内容,使用手册说的不太能让我好理解。其实当你弄懂了以后再回去看使用手册还是能找到的,只是写的...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 263
精华内容 105
关键字:

stm32f103低功耗