这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【12.29更新L053低功耗再测试】snake0301的低功耗进程

共28条 1/3 1 2 3 跳转至

【12.29更新L053低功耗再测试】snake0301的低功耗进程

高工
2015-11-30 22:31:34     打赏


高工
2015-11-30 22:31:59     打赏
2楼
我在长沙发现了楼主

高工
2015-11-30 22:40:49     打赏
3楼

下午收到一快递

拿到手一看,L053牛可力欧

下半年各种狗血事情,焦头烂额,欠下论坛不少债

给点时间慢慢恢复

感谢组织依然如此信任

开箱


经典的简约包装风格

图森破图样

介就是传说中的L053

话说L系列有L0、L3、L4之类

大的区别就是内核不同

L0便是M0+内核了,L3、L4便是M3和M4咯

stlink v2部分

依然是F103C8的主控

话说后面的片子越来越多

stlink的主控也逐步在升级了

急不可耐地上电

伟大的USB3.0再次出现不兼容的情况

可能是楼主电脑芯片组的问题吧

换到USB2.0的端口

世界清静了。。。。。。

上电后

有个简单的demo

通过user按键去控制LED的闪烁速度

看现象应该是按键中断,控制blink速度

下了一大堆资料

整理了一下

附上一些自己觉得有点价值的


固件库:——回复可见内容——

固件库Getting Started:——回复可见内容——

固件库使用指南:——回复可见内容——

图形化代码生成工具:——回复可见内容——

nucleo电路图:——回复可见内容——

stm32l053nucleo用户指南:——回复可见内容——

那些描述demo之类的口水文档,这里就不污染论坛了

回复可见吧


顺道装了一下STM32CubeMX

也就是传说中的 图形化代码配置工具

支持的器件真不少啊

依稀记得最开始的时候

cubeMX支持的器件少得可怜

时间过得真快啊

配置界面

只是扫了一眼,没使用

不太习惯,还是喜欢一个个参数自己慢慢配

毕竟是大势所趋,以后再适应一下这货吧


菜鸟
2015-12-03 16:44:01     打赏
4楼
看看

高工
2015-12-03 22:43:51     打赏
5楼

低功耗代码测试


L053这块U主打低功耗

所以试用这块,必须要体验一下ST的低功耗水准

看看和MSP430、AVR之类的区别在哪

可是闹出了不少幺蛾子


先来看看大概吧

L053设置了很多低功耗模式,包括

sleep mode,这个模式仅CPU停止了,所有外设都在工作

low-power run mode,简单点理解就是各种时钟都是最小的,MCU超低速运行

low-power sleep mode,以上两者的合体

stop mode with RTC,除了RTC时钟外,其它时钟全部停止,各种震荡源全部停止

可以被任意外部中断唤醒

RAM和寄存器的值不会丢失

stop mode without RTC,上个模式干掉RTC

standby mode with RTC,类似stop mode with RTC模式,只是RAM和寄存器的值会丢失

不过和standby mode有关的寄存器值不会丢失

standby mode without RTC,上个模式干掉RTC

上面只是简单描述了一下各个模式的情况

具体外设工作情况还得仔细看数据手册的详细说明

其实总结一下

L053真正的低功耗模式只有3种:

sleep、stop和standby

看看stop模式的功耗

正常温度范围内不会超过5μA

再来看看standby模式的功耗

正常温度情况下,不会超过4μA

关闭看门狗和LSI甚至不到1μA

sleep模式由于需要考虑外设的多种情况,比较复杂

所以这里就没贴出来了

尤其注意了一下段式液晶驱动外设的情况

stop和standby模式都能够运行段式液晶

静态不到0.2μA,1/8不到3μA

手册上看上去好牛x的电流消耗啊

实测怎么样呢

一个个来

测试条件:stlin供电,JP6测试通过L053的总电流

先上个测试代码吧(回复可见):——回复可见内容——

比较苦逼的是,手上的万用表直流电流最小量程20mA

所以一下测试不一定准确

有兴趣有条件的筒子,可以把代码拿去测试一下

先看看板子自带的demo消耗的电流

存在LED等各种消耗

demo的电流达到7个mA多一点点

再看看

默认配置下sleep模式

2.5个mA的样子

接下来出场的是stop模式

160μA啊

说好的5μA呢

再看看standby模式

已经是这块渣表的极限了

看着像是在10μA左右

也比标称的高出不少


不过以上测试都是在高量程档位测试小数值

一定会有所误差

so,有条件的筒子能够测测最好


到这里

对于L053的功耗就基本上有误滴感受了一下

等过几天换块好点的表再来试试


高工
2015-12-03 23:15:29     打赏
6楼

既然是低功耗器件的试用

玩低功耗是必须滴

准备准备硬件吧


目前结合手头上有的器件

决定做一个带温度显示的电子钟

图样图森破,不过加了个低功耗在里面

就是个精细活了

先介绍一下这次的成员

n多年前在TI申请的温度传感器

L053内部也有,舍远求近

1°C的误差

不过功耗参数不错

全速运行45μA

有低功耗模式可以配置,待机0.1μA

DS1302,地球人都知道

也有低功耗模式可以配置

不知道是不是假货

不过待了驱动IC

据说全部点亮150μA左右

后面再用L053的LCD外设去驱动这货

简单布了个局

嗯,纽扣电池是必须滴

洞洞板+Arduino接口

骚一下

接下来就围绕这些东东

开始低功耗的第一次倒腾


to be continued......




专家
2015-12-04 13:01:37     打赏
7楼
JJ动手能力好强大,我还在mbed上玩呢,还没玩到低功耗

高工
2015-12-06 22:09:02     打赏
8楼

点亮段式液晶


前几天看了一下L053的手册

发现内置有LCD驱动外设

可以支持到5X51,

玩低功耗,段式液晶才是正道啊

就去淘宝撸了几片

噩梦开始鸟


段式液晶的管脚真多啊

小小一块就有26个管脚

原来还准备用arduino接口的

直接路上两排排母了

焊得哥眼冒金星,双手发抖

这种复杂的段式液晶真是不适合DIY

坑爹的还没完

之前没有仔细看nucleo的用户手册

开始焊接了才发现

一大堆跳线要处理

结果背板被改得稀烂

com和seg口主要集中在A口和B口

后来拿出数据手册一看

IIC外设全部集中在B口

传感器咋办啊、时钟芯片咋整啊

看样子只能软件模拟了

也好,ST的硬件IIC不碰也罢,哈哈


ST官方在固件库中给出了stm32L053-Discovery段式LCD外设的驱动例程

专门把stm32L053-Discovery的原理图找来研究了一下

根据代码,实测官方的例程完全不能够使用到这块

又啃了一晚上LCD外设的资料

终于,终于贱笑了,贱笑了......


完成显示后,直接跑步进入stop模式

发现液晶还是能够正常显示滴

上代码


void LCD_GPIO_Config(void)
{
    GPIO_InitTypeDef     GPIO_InitStruct;
    
    /* ?? LCD IOPORT ?? */
    __GPIOA_CLK_ENABLE();        
    __GPIOB_CLK_ENABLE();         
    __GPIOC_CLK_ENABLE(); 

    GPIO_InitStruct.Pin       = GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_6 | GPIO_PIN_7  | GPIO_PIN_8 | GPIO_PIN_9 |GPIO_PIN_10|GPIO_PIN_15 ;
    GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull      = GPIO_NOPULL;
    GPIO_InitStruct.Speed     = GPIO_SPEED_FAST;
    GPIO_InitStruct.Alternate = GPIO_AF1_LCD;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);    
    
    GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_5 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_3 | GPIO_PIN_4| GPIO_PIN_11 | GPIO_PIN_10;  
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);    

    GPIO_InitStruct.Pin =  GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6| GPIO_PIN_8 | GPIO_PIN_2| GPIO_PIN_3 ;                               
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);     
}

void LCD_GLASS_Init(void)
{

  
  /* LCD GPIO ³õʼ»¯*/ 
  LCD_GPIO_Config();
  

  __LCD_CLK_ENABLE(); //LCDʱÖÓʹÄÜ

  /*LCD³õʼ»¯½á¹¹Ìå*/
  LCDHandle.Instance = LCD;
  LCDHandle.Init.Prescaler = LCD_PRESCALER_1;//CLKPS = LCDCLK  
  LCDHandle.Init.Divider = LCD_DIVIDER_31;
  LCDHandle.Init.Duty = LCD_DUTY_1_4;
  LCDHandle.Init.Bias = LCD_BIAS_1_3;//Æ«ÖÃ
  LCDHandle.Init.VoltageSource = LCD_VOLTAGESOURCE_INTERNAL;//ÄÚ²¿LCDµçÔ´
  LCDHandle.Init.Contrast = LCD_CONTRASTLEVEL_4;//×î´óµçѹ3.12
  LCDHandle.Init.DeadTime = LCD_DEADTIME_0;
  LCDHandle.Init.PulseOnDuration = LCD_PULSEONDURATION_4;
  LCDHandle.Init.HighDrive = DISABLE;
  LCDHandle.Init.BlinkMode = LCD_BLINKMODE_OFF;
  LCDHandle.Init.BlinkFrequency = LCD_BLINKFREQUENCY_DIV32;
  /* Initialize the LCD */
  HAL_LCD_Init(&LCDHandle);
    
}

int main(void)
{
  /* This sample code shows how to use STM32L0xx LCD HAL API to configures the LCD Blink
     mode and Blink frequency.*/  
 
  /* STM32L0xx HAL library initialization:
       - Configure the Flash prefetch, Flash preread and Buffer caches
       - Systick timer is configured by default as source of time base, but user 
             can eventually implement his proper time base source (a general purpose 
             timer for example or other time source), keeping in mind that Time base 
             duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and 
             handled in milliseconds basis.
       - Low Level Initialization
     */
    /* Configure the system clock */
  SystemClock_Config();
  LCD_GPIO_Config();
	  HAL_PWREx_EnableUltraLowPower();
  /* LCD GLASS Initialization */
  LCD_GLASS_Init();
		HAL_LCD_Write(&LCDHandle, LCD_RAM_REGISTER0, 0, 0x05f33fff); //¸ù¾Ýseg¡¢com¿ÚÈ·¶¨Öµ
	HAL_LCD_UpdateDisplayRequest(&LCDHandle);
    HAL_LCD_Write(&LCDHandle, LCD_RAM_REGISTER2, 0, 0x05f33fff); 
HAL_LCD_UpdateDisplayRequest(&LCDHandle);	
    HAL_LCD_Write(&LCDHandle, LCD_RAM_REGISTER4, 0, 0x05f33fff); 
		HAL_LCD_UpdateDisplayRequest(&LCDHandle);
    HAL_LCD_Write(&LCDHandle, LCD_RAM_REGISTER6, 0, 0x05f33fff); 
		
		//Åܲ½½øÈëstopģʽ
		  HAL_LCD_UpdateDisplayRequest(&LCDHandle);
			HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);

  /* Infinite loop */
  while (1)
  {    

  }
}


注释咱都是乱码?

基本就是

初始化

显示数据

进入stop模式


限于手上的渣表

暂时没有测stop模式下的功耗

过几天撸快好点的表,再一次献上

to be continued......



菜鸟
2015-12-07 08:42:44     打赏
9楼
支持一下!

专家
2015-12-07 09:48:50     打赏
10楼
上几个推荐的段式液晶链接,跟着JJ老师一起玩

共28条 1/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]