首页天道酬勤低功耗触摸芯片(低功耗芯片架构设计技术)

低功耗触摸芯片(低功耗芯片架构设计技术)

admin 12-04 21:20 250次浏览

(1)改变ST平台背景

最近恩智浦芯片买不到了。此前,产品在低功耗应用中使用恩智浦或L系列。现在订单交货时间50周,大宗材料价格300。这个价格让人望而生畏,太多了,哈哈。

我别无选择,只能切断站台。我拿了一批GD片回来做了一个项目,但是那个项目不需要低功耗,是用电源适配器供电的,不需要考虑功耗问题。这个新项目是电池供电的,GD用不了,只能让采购部弄点ST回来试试,选ST的L系列,哈哈,ST还是有点钱就能拿到货的。ST的低功耗模式没有恩智浦多,分为五类:1、睡眠模式,2、低功耗运行模式3、低功耗睡眠模式4、停止模式5、待机模式。

我已经看过了。1类、2类和3类功耗较高,不适合当前使用。5级等于唤醒芯片复位,SRAM数据无法保存,IO状态无法保证,这个也不能用。第4站模式适用于本项目。手动指示最小停止模式为0.8uA,远低于一般MCU,完全够用,如下图所示:

(2)低功耗调试经验

常规经验(这是基于前人的经验):

1.外围时钟必须切换到内部时钟;

2.关闭所有不用的外设,想用就重新打开;

3.浮动引脚必须配置为下拉;这可以直接在STM32cube软件中配置。

4.硬件上的上拉和下拉电阻不要随便加,使用的外设芯片也要注意功耗;外围功能电源必须由mos管切换。

5.进入低功耗有几种选择(休眠、关机、待机),不同模式的唤醒机制略有不同;

6.你需要一个经过测试的低功耗DEMO,测试硬件问题或者移植到你的项目中,哪个最可靠;

这是第一次使用st的L系列,直接参考手册中做的电路。焊接时,会留下一块特殊的板,但只有单片机和芯片周围的器件没有焊接。直接做一个调试功耗最小的系统板是我的习惯。一般来说,我会做一个新项目。如果是新的微控制器,将焊接一个基本板来调整功耗。然后找官方低功耗套路验证,这次功耗特别高,官方套路有300多uA。后来检查电路,发现BOOT0的电平可选电阻选择有问题,太小了。一个10M的开关后,功耗马上降到3uA,基本够用了,待机电流越低不是越好。现在一次性锂子电池容量大,待机电流太小。如果采集周期太小,

(3)分享使用经验(3)STM32CUBE

1.创建新项目

第一步肯定是下载软件,所以就不多说了。只要找到官方下载。对应的L系列也需要安装一个软件包。我们之前用的是F429,这次试用的L053下载了另外一个安装包。

双击该软件。

然后打开并选择创建新项目:

等待软件加载一些功能后,选择你的单片机。

找到你的单片机后,双击就可以了。

出现我们可以配置的界面,下面是我们选择的MCU:

我们慢慢摸索具体用途,哈哈。

用这个STM32cube软件,还不如官方说的新手能用。我觉得完整的新手估计就够了,至少钟树很难理解。在从事飞思卡尔之前,也就是现在的恩智浦,都是先看寄存器手册,然后按照套路学习,很难一步估计。有些经验,用这个软件配置初始化比

较合适,各项功能很清晰。

2. 配置我们需要的IO口和功能

按照具体的项目配置IO口和功能,下图是我最近这个项目用到的,3个串口,一个ADC监视电池电压,5个按键中断,然后还有一些IO控制,内部的EEPROM,RTC定时器和硬件看门狗。

本来也可以用内部HSI,我担心频率不那么精准,串口通讯波特率可能会有些问题,还是加了一个外部8M晶振,配置一下时钟树。

配置完之后生成代码,选着保存的目录等等

还有一个自动配置未使用的IO 为输入状态

3. 在低功耗前提下各个功能程序处理经验

在低功耗前提下,使用各个功能,就要做到,用到打开,用完立即关闭。

以采集电池电量为例,如下

u16 Get_VBat(void) {         float  temp;         u16 BATTER_VALUE,VREFINT_CAL;         u16 Ref_Vol;         u16 Vdc;                 MX_ADC_Init();  //重新初始化                 BATTER_VALUE = GET_ADC(ADC_CHANNEL_0);         Ref_Vol = GET_ADC(ADC_CHANNEL_VREFINT);                         printf("电池:%d\r\n",BATTER_VALUE);         printf("基准:%d\r\n",Ref_Vol);                 BATTER_VALUE = 2*BATTER_VALUE;                 temp=((float)BATTER_VALUE/Ref_Vol)*1.24;         Vdc = (u16)(temp*1000);         printf("Vdc=%u\r\n",Vdc);                 HAL_ADC_DeInit(&hadc);    //关闭ADC采集         return Vdc; }

使用ADC重新初始化,用完之后马上关闭。

4. 低功耗实现命令

低功耗命令实际就一句话就行了,再加上唤醒配置和暂停系统时钟中断。STM32系统自动就把时钟重新选择了,不需要我们自己弄,这个比较方便,之前做NXP的每一项低功耗对时钟都有要求,进之前要自己切换时钟才行,不然可能会报错。在停止模式下,VCORE 域中的所有时钟都会停止,PLL、MSI、HSI16 和 HSE RC 振荡器也被禁止。内部 SRAM 和寄存器内容将保留。

具体函数如下:

  HAL_SuspendTick();     //挂起(暂停)系统时钟中断                 HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,                                    PWR_STOPENTRY_WFI);  //0.75ma  WFI任意中断唤醒  WFE唤醒事件                 HAL_ResumeTick();           // /*唤醒之后恢复系统时钟中断 */

STOP模式LPUART1和任意的外部中断,RTC中断都可以唤醒,唤醒之后需要重新初始化系统时钟,才能保证你的功能正常运行。

总结:

整体来说STM32L053的体验还不错,功耗也很低,整体这个项目画板子焊接调试2周多的时间就基本上搞定,目前搞了几台设备到现场去测试了,大功能没啥问题,哈哈。

这个项目使用的功能不多,主要就是串口和低功耗,然后使用了内部的EEPROM保存一些关键参数,希望能给大家一点有用的帮助。

原标题:STM32L053芯片使用STM32CUBE软件开发低功耗设备一些经验分享

原作者:laocuo1142

本文为21ic有奖征文作品,详情请见21ic论坛活动专区:第二届万元红包——蓝V达人有奖征文活动,如果您也有兴趣参与征文,欢迎进入论坛参与活动~

tiktok怎么在国内使用-tiktok国际版怎么使用雷士灯具管理系统
() 过椭圆上一点的切线方程(高数求椭圆在某点切线方程)
相关内容