历史上的今天
返回首页

历史上的今天

今天是:2024年12月19日(星期四)

正在发生

2019年12月19日 | STM8L052C6 低功耗+LCD显示 经验分享

2019-12-19 来源:eefocus

由于工作原因,需要做一个低功耗的红外遥控器。于是接触了STM8L这系列低功耗单片机,因为我这个项目要求资源要求不高,所以选了052C6这款。32k flash,2Kbytes的RAM,还有EEPROM。资源很丰富,能满足很多场合的应用了。


这款单片机的低功耗宣称可以小于1uA,不过没什么实际意义,什么都没开的数据。我自己做实验,做一块最小系统版,halt模式下电流为3uA左右。IO口的状态不同,电流相差很大,经过实验发现GPIO_Mode_Out_OD_Low_Slow 模式下功耗最低。实际应用中应该按照IO口外接电路原理分析得到最佳状态。


进入低功耗模式很简单,一句 halt();就解决了。不过根据前人经验来说,最好在执行此语句前先关闭所有用到的外设时钟,设置好所有的中断和IO口状态。对了,halt模式下只能使用外部中断唤醒。halt模式比较简单,多花点时间调下就可以了。不过我在做的过程中也发现了同样的程序有时候功耗降不下来。推测与STVD编译器有关。




接下来说LCD,STM8L052C6这款单片机自带段式LCD驱动,非常方便经济。这个驱动函数刚开始写还真有点懵。仔细读英文的datasheet,加上网上找一些前人的经验贴逐渐明白了,其实还是很有意思的。下图是我的LCD的com和seg的相关参数。


根据上图,我用excel做了下面这张图。有了这张图,编程简单多了。




原因就是STM8L的LCD驱动是通过写LCD_RAM这个寄存器实现的。参考手册介绍如下图:




通过这张图可以清楚的发现LCD的每一个SEG口,COM口都对应着这些寄存器中的一位,只需要置一即可点亮这一段了。


注意:写这个LCD_RAM 寄存器的时候一定要先清0,再写,否则写不进去。






附LCD配置程序:


void LCD_Congfig(void)

{

  CLK_PeripheralClockConfig(CLK_Peripheral_LCD,ENABLE);   //启用或禁用指定的外围时钟

  CLK_RTCClockConfig(CLK_RTCCLKSource_HSI,CLK_RTCCLKDiv_64);      //必须配置RTC时钟源,HSI选为RTC时钟

    /*lcd初始化,*/

  LCD_Init(LCD_Prescaler_8,LCD_Divider_16,LCD_Duty_1_4,LCD_Bias_1_3,LCD_VoltageSource_Internal );//LCD_VoltageSource_External,LCD_VoltageSource_Internal

        /*lcd端口的配置*/  

        LCD_PortMaskConfig(LCD_PortMaskRegister_0,0Xff); // seg 0-7为     seg口

LCD_PortMaskConfig(LCD_PortMaskRegister_1,0X1f); // seg 8,9 12   为seg口

LCD_PortMaskConfig(LCD_PortMaskRegister_2,0X00); // 

LCD_PortMaskConfig(LCD_PortMaskRegister_3,0X00);



LCD_ContrastConfig(LCD_Contrast_Level_7);        //配置LCD的对比度0---7

LCD_DeadTimeConfig(LCD_DeadTime_1);              // 配置LCD液晶的死区时间0--7

LCD_PulseOnDurationConfig(LCD_PulseOnDuration_5);// 配置LCD脉冲持续时间0--7    

LCD_Cmd(ENABLE);    


}      


附LCD显示程序:


__CONST uint8_t  LCM_Num[17]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x77,0x1f,0x4e,0x3d,0x4f,0x47,0x00};


//按0abcdefg顺序 /* 0    1   2  3   4  5   6  7 8  9   A b c  d E  F  none*/


void LCD_WriteNum1(u8 bNum)

{

   //COM0      

LCD->RAM[LCD_RAMRegister_0] &= (~0x02);

   LCD->RAM[LCD_RAMRegister_0] |= (uint8_t)((LCM_Num[bNum]&0x08)>> 2);// 1D

LCD->RAM[LCD_RAMRegister_0] &= (~0x01); 

LCD->RAM[LCD_RAMRegister_0] |= (uint8_t)((LCM_Num[bNum]&0x04)>> 2);// 1E 

   //COM1  

LCD->RAM[LCD_RAMRegister_3] &= (~0x10);

   LCD->RAM[LCD_RAMRegister_3] |= (uint8_t)((LCM_Num[bNum]&0x01)<< 4);// 1G 

LCD->RAM[LCD_RAMRegister_3] &= (~0x20);

   LCD->RAM[LCD_RAMRegister_3] |= (uint8_t)((LCM_Num[bNum]&0x10)<< 1);// 1C  

   //COM2  

LCD->RAM[LCD_RAMRegister_7] &= (~0x02);

   LCD->RAM[LCD_RAMRegister_7] |= (uint8_t)((LCM_Num[bNum]&0x20)>> 4);// 1B

LCD->RAM[LCD_RAMRegister_7] &= (~0x01);

   LCD->RAM[LCD_RAMRegister_7] |= (uint8_t)((LCM_Num[bNum]&0x02)>> 1);// 1F  

   //COM3  

LCD->RAM[LCD_RAMRegister_10]&= (~0x10);

   LCD->RAM[LCD_RAMRegister_10]|= (uint8_t)((LCM_Num[bNum]&0x40)>> 2);// 1A 

}


LCM_Num[bNum]根据你的LCD实际情况修改。


先这样吧。吐槽下STVD的编译器还真是有点问题,对于一些语句的编译很不理想,容易出问题。编程的时候需要尽量简化语句,保证编译成功。否则有些问题真是找的头疼。。。

推荐阅读

史海拾趣

C&H Technology公司的发展小趣事

为了进一步提升竞争力,C&H Technology积极寻求与其他企业的战略合作。公司与一家知名的手机制造商签订了长期合作协议,共同开发定制化芯片解决方案。同时,C&H Technology还与一家领先的半导体生产企业建立了战略联盟,共同研发新型半导体材料和生产工艺。这些战略合作不仅为公司带来了更多的商业机会,也提升了公司的技术水平和品牌影响力。

安美通(APPCON)公司的发展小趣事

在发展过程中,安美通始终注重与合作伙伴的互利共赢。公司与多家知名企业建立了战略合作关系,共同开拓市场、分享资源。这些合作不仅为公司带来了更多的商业机会,也提高了其在行业内的知名度和影响力。

API Delevan公司的发展小趣事

随着技术的不断进步,API Delevan公司始终保持着对创新的追求。研发团队不断攻克技术难关,推出了一系列具有创新性的电感器、RF线圈、功率电感器等产品。这些产品不仅提高了性能,还降低了能耗,满足了客户的多样化需求。同时,公司还注重产品升级,不断提升产品的竞争力。

CLAIREX公司的发展小趣事

Clairex Technologies成立于1993年,当时的市场上,航空电子部件的供应存在着严重的质量问题。老David Catter和一位商业伙伴发现了这一商机,他们提议改进并供应财富500强公司通用航空航空电子部门所需的零件。然而,创业的道路并非一帆风顺。他们面临着资金短缺、技术难题以及市场竞争激烈等多重挑战。但凭借对技术的深入理解和不懈的努力,Clairex团队成功设计出了一款性能卓越的光电导体,并在得克萨斯州普莱诺开始了生产。这一创新产品很快便赢得了市场的认可,为Clairex的发展奠定了坚实的基础。

Eastman Kodak Company公司的发展小趣事

经过破产保护和重组的洗礼后,伊士曼柯达公司更加注重创新和可持续发展。公司加强了与新兴科技公司的合作,积极探索新的业务模式和市场机会。同时,柯达还致力于研发更加环保、高效的影像产品和技术,以满足客户对高品质影像的需求。未来,伊士曼柯达公司将继续秉承创新、品质、服务的理念,不断推动影像行业的发展和进步。

Hirschmann公司的发展小趣事
当外部触发信号作用于TC4013时,定时器开始工作。同时,TC4066根据预设的数字信号状态来调整电路参数(如电阻、电容值),从而改变定时电路的延时时间或输出特性。最终,定时电路根据这些设置输出具有特定脉冲宽度或时间间隔的信号。

问答坊 | AI 解惑

EAVS商铺报警监控工程技术方案

前言: 随着经济的快速发展,我国零售业市场不断的扩大,单店铺经营的从业者愈来愈多,不但丰富了产品的渠道供应,满足消费者的就近消费的需求,在另外一方面:也大大解决了社会就业的问题和个人投资的取向问题。总之,增加了市场的繁荣和 ...…

查看全部问答>

wince 5.0 stepldr+eboot引导OS,eboot起不来,大家指导下

把stepldr.nb1烧到nand flash block0;eboot.nb0烧到nand flash block2.通过串口信息可以看到stepldr正常运行,可eboot没有反应. stepldr.bib 如下: MEMORY ;   Name      Start     Size  ...…

查看全部问答>

做modbus通讯. 一个PC作为从机(服务器),它的一个com1口能不能连接多个主机(客户端)??

做modbus通讯. 一个PC作为从机(服务器),它的一个com1口能不能连接多个主机(客户端)??…

查看全部问答>

关于如何网络协议的学习,tcp/ip???请熟悉tcp/ip的哥们指点一下

想学习tcp/ip协议,但不知道如何开始? 有几个问题 1:在学习中需要注意的问题 2:网络的5层都要特别关注么?对于嵌入式领域而言 3:对于嵌入式领域而言有什么特别需要注意的?…

查看全部问答>

关于STM32USB中的SetEPTxStatus(ENDP1,EP_TX_NAK)问题USB,NAK

看过本论坛上的一个帖子https://bbs.eeworld.com.cn/redirect.php?tid=110546&goto=lastpost,里面提到“STM32接收到一个IN事件后发送完毕软件不用把端点设成NAK。硬件在每次成功的传输之后都会把端点的状态设为NAK。只需在下次要发送的时候 ...…

查看全部问答>

视频与影像指南

德州仪器 (TI) 在视频领域拥有超过 25 年的丰富经验,产品涵盖视频链的各个环节,包含从原始内容创建到最终欣赏体验的全过程。   客户可充分利用 TI 在视频压缩与码制转换方面的丰富技术,以极低的成本向市场快速推出各种差异化的产品。TI ...…

查看全部问答>

CooCox工具简介——免费和开源的ARM嵌入式开发工具

CooCox成立于2009年初,致力于为ARM开发者提供免费和开源的嵌入式开发工具。CooCox开发了大量基于网络的组件,让嵌入式开发如搭积木般简单。CooCox希望能和所有ARM爱好者一起搭建一个贡献与分享的交流平台。   CooCox工具包括一整套的工具 ...…

查看全部问答>

spi 驱动陀螺仪程序

陀螺仪:lsm330dl单片机; stm32f103vct6还需要一个软件程序提供陀螺仪XYZ轴的角度读出 …

查看全部问答>

如何测试开关电源的效率

谁能告诉我如何测试开关电源的效率?非常感谢…

查看全部问答>

滤波器实现方波转精密正弦波

先有一频率3K左右的方波,要把其转换为精密的正弦波,用max275怎么实现,别的芯片也可以,跪求电路图!邮箱:124548443@qq.com [ 本帖最后由 lzb124548443 于 2013-5-28 10:20 编辑 ]…

查看全部问答>