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

【NUCLEO-L476RG开发】STM32L476低功耗模式初试

[复制链接]
xuxi131 提问时间:2015-12-4 08:43 /

【NUCLEO-L476RG开发】STM32L476低功耗模式初试

   在项目开发中经常用到低功耗MCU芯片,今用st币换到了一块STM32L476RG-NUCLEO开发板,由于本人对STM32CubeMx和
HAL库不熟悉,没有使用过,但对此板的低功耗比较感兴趣,还是花时间看了一点资料,好不容易完成了这个初步试验,先发表
这个简单的开发笔记,待以后更熟悉STM32CubeMx,HAL库和STM32L478后,再发一个比较全的开发笔记。
(一)STM32L476的低功耗模式总结:
  该器件具有以下几个低功耗模式:
    1. 睡眠模式(Sleep mode):CPU时钟关,所有的外设包括Cortex-M4核心外围设备象NVIC,SysTick,等能够唤
        醒CPU在中断或事件发生。
   
    2. 低功耗运行模式(Low-power run mode):这个模式是在当系统时钟频率为减少2兆赫以下时实现的。代码是
        从SRAM或闪存执行。稳压器是在低功耗模式,以尽量减少调节器的工作电流。
    3. 低功耗睡眠模式(Low-power sleep mode):这个模式从低功率运行模式进入:Cortex-M4是关闭的。
    4. STOP1和STOP2模式:SRAM1,SRAM2和所有寄存器内容被保留。所有在电压域VCORE的时钟停止,PLL,MSI,
        与HSI16和HSE是失能停止的。LSI和LSE可以保持运行。RTC可保持活跃。一些外围设备在停止模式检测唤醒
        条件。使用唤醒能力,可以使能HSI16 RC振荡器。
     在STOP2模式,大多数的电压域VCORE放在一个较低的泄漏模式。
        在STOP1模式,提供最大数量的活动外设和唤醒源,较小的唤醒时间但比STOP2功耗高。
        当从STOP1模式或STOP2模式退出时,系统时钟是MSI可到48MHz或使用HSI16,根据软件配置。
     5.待机模式(Standby mide):VCORE电压域断电。然而,它是可以保存SRAM2内容:
        –待机模式时 当寄存器PWR_CR3的RRS位是置"1"时,SRAM2保留内容,在这种情况下,SRAM2由低功耗
                     稳压器提供。
                     当寄存器PWR_CR3的RRS位清零时,在这种情况下,主电压稳压器和低功率稳压器被关断。
                     在VCORE电压域的所有时钟停止,PLL,MSI,HSI16和HSE被禁用。LSI和LSE可以保持运行。
                     RTC保持活跃。当退出待机模式时,系统时钟是MSI从1兆赫至8兆赫。
 6. 关机模式(Shutdown mode):VCORE电压域断电。在VCORE电压域所有的时钟停止,
                                
                                   PLL,MSI,HSI16,LSI和HSE被禁用。LSE保持运转。
                                   退出关机模式时,系统时钟是MSI在4兆赫。
                                   在这种模式下,电源电压监测被禁用。

  各低功耗模式之间的转换见下图:

                      L4_1.jpg

(二)实验内容及工程的建立:

  1.本人主要想对低功耗运行模式和低功耗模式睡眠模式进行实验测试,根据各低功耗模式之间转换图,程序的方框图如下:

                  
                                        main.jpg


       为了完成上面步骤,利用STLink的USB转串口功能,在程序中设计了USART2的响应,制定了一个简单的协议,
  协议命令为二字节,通过STLink的USB转发送到USART2,协议具体如下:
   发送 : 0x08 0x02  由主模式进入低功耗运行模式。系统频率使用MSI,频率降为1MHz。
  
       发送 : 0x08 0x03  由低功耗运行模式进入主模式。系统频率使用HSI16,配置为80MHz。
   在低功耗运行模式下 发送 : 0x08 0x08 由低功耗运行模式进入低功耗睡眠模式。

   UART2命令响应代码如下:

void U2_cmd(void)
{
if(__HAL_UART_GET_FLAG(&huart2, UART_FLAG_RXNE) != RESET)  
if(HAL_UART_Receive(&huart2,U2_Rxbuf,2,100)==HAL_OK)
   {
  
     if((U2_Rxbuf[0]==0x08)&&(U2_Rxbuf[1]==0x01))//====主模式
      {
      SysTick->CTRL  |= SysTick_CTRL_ENABLE_Msk;
     
     MX_USART2_UART_Init();
        U2_buf[0]=0x09;  U2_buf[1]=0x01;
       HAL_UART_Transmit(&huart2,U2_buf,2,100);
     }
   if((U2_Rxbuf[0]==0x08)&&(U2_Rxbuf[1]==0x02))//====进入低功耗运行模式
      {  
         //进入低功率运行模式,进行如下几步:
         //降低系统时钟频率低于2兆赫。
         //通过设置在PWR_CR1寄存器的LPR位,强迫调节器在低功耗模式。
   
     SystemClock1M();
     MX_USART2_UART_Init();
     SET_BIT(PWR->CR1, PWR_CR1_LPR);
     
        U2_buf[0]=0x0A;  U2_buf[1]=0x02;
       HAL_UART_Transmit(&huart2,U2_buf,2,100);
     }
   if((U2_Rxbuf[0]==0x08)&&(U2_Rxbuf[1]==0x03))//====退出低功耗运行模式进入主模式
      {
         //退出低功耗运行模式,进行如下几步:
         //通过清除在PWR_CR1寄存器的LPR位,强迫调节器在主运行模式。
         //等待直到PWR_SR2寄存器的REGLPF清零。
         //提高系统时钟频率,恢复主运行模式的时钟频率。

     CLEAR_BIT(PWR->CR1, PWR_CR1_LPR);
     while(HAL_IS_BIT_SET(PWR->SR2,PWR_SR2_REGLPF));   //HAL_IS_BIT_CLR(REG, BIT);
     SystemClock80M();
     MX_USART2_UART_Init();
     
     
        U2_buf[0]=0x0B;  U2_buf[1]=0x03;
       HAL_UART_Transmit(&huart2,U2_buf,2,100);
     }
   if((U2_Rxbuf[0]==0x08)&&(U2_Rxbuf[1]==0x08)) //====进入睡眠模式
      {
     SysTick->CTRL  &= ~SysTick_CTRL_ENABLE_Msk; //禁止系统中断
     HAL_NVIC_DisableIRQ(LPTIM1_IRQn);
     HAL_NVIC_DisableIRQ(TIM1_UP_TIM16_IRQn);  //禁止TIM1中断   
     
     HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);     
         
        U2_buf[0]=0x0D;  U2_buf[1]=0x08;
       HAL_UART_Transmit(&huart2,U2_buf,2,100);
     }
   }
}

      
  2.工程的建立:

   工程在STM32CubeMx中建立配置了一个LPTIM1,一个TIM1, 三个UART分别为PUART1,UART2,UART4见下图:

       Cube1.jpg


       时种配置见下图:

       Cube2.jpg

      
   引脚配置见下图:
       Cube3.jpg

整个工程文件见附件:
    My_L476_1.rar (9.12 MB, 下载次数: 510)
DL2.JPG

评分

参与人数 1 ST金币 +30 收起 理由
沐紫 + 30

查看全部评分

1 收藏 5 评论14 发布时间:2015-12-4 08:43

举报

14个回答
JackieLaura 回答时间:2015-12-4 11:11:36
貌似这个万用表的精度不够吧
stmcu.org.png
huaiqiao 回答时间:2015-12-4 13:27:42
那个模块图画的很好。就是“各低功耗模式之间的转换”,用什么软件画的?
wm20031015 回答时间:2015-12-4 15:12:54
换个微安档的表测,这数据不大对
Brady 回答时间:2015-12-4 16:42:47
跟手册上的数据对比如何?
沐紫 回答时间:2015-12-4 17:32:43
谢谢楼主
moyanming2013 回答时间:2015-12-4 18:08:08
学习了。。。
yanhaijian 回答时间:2015-12-5 11:55:19
再接再厉。
青蓝冰水 回答时间:2017-4-9 11:55:09
很好地帖子
DemonA 回答时间:2018-1-3 18:23:12
楼主,这个功耗还是很大呀
watersui 回答时间:2018-3-1 09:50:50
附件下载参考参考
wolfgang 回答时间:2018-3-1 10:10:36
数据没对,看看软件设置。
小小个子 回答时间:2018-4-2 14:27:16
学习了,谢谢楼主
小马哥 回答时间:2018-11-17 22:01:31
小哥,感觉你写的很不错能否给我也写一片。
qianqufei 回答时间:2019-10-20 15:37:46
谢谢楼主,很好的贴子
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版