找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 479|回复: 3
打印 上一主题 下一主题
收起左侧

stm8s单片机停机模式无法降低电流?

[复制链接]
回帖奖励 50 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:1047058 发表于 2022-11-23 18:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大佬好,最近在做一个stm8s驱动灯板的项目,用到了锂电池,可以进行充电。但在测试阶段发现电池掉电特别快,17h掉了0.6V,而驱动灯板至少需要2.7V,根本无法满足需求。所以加了一个进入停机模式的代码,可是发现没有得到改善。
今天测试了一下待机电流,发现竟然有6.5mA这么高!难怪根本存不住电,实在是太离谱了。
我用的是stm8s001,因为涉及到swim烧写口与IO口复用的问题,所以在main()里执行其他函数之前加了一句
Delay(1000);          //延时

方便进行烧录程序,因为在测试阶段所以这句代码也没有删掉。运用万用表测试时发现,初始上电,电流1mA,延时结束后初始化IO口初始化一堆函数后就变成了6.5mA。在关闭led灯板执行停机代码后,待机电流也是1mA,但很快也是经过几秒(推测是过了延时)就又变成了6.5mA。

查询了网上相关资料也没有找到合适的解决方法,百思不得其解,不知道到底是哪里出了问题,恳请各位大佬指教!

单片机源程序如下:
  1. //***************主函数**********************//
  2.         void main(void)
  3. {
  4.                 Delay(5000);
  5.                 ///*上电复位后延时5s,预约swim烧写时间,否则会锁死*///

  6.                 _asm("sim");        //关总中断
  7.                 Res_Ctrl(); //复位
  8.                 GPIO_init();//IO配置
  9.                 SysClkInit();//时钟配置
  10.                 EXTI_Init();//外部中断配置
  11.                 _asm("rim");        //开总中断
  12.                 while(1)
  13.                 {
  14.                 }
  15.         }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1047058 发表于 2022-11-23 18:32 | 只看该作者

  1.         /***********************************************************
  2.         函 数 名:        Key1_Working & Key2_Working
  3.         函数描述:  开机控制按键配置
  4.         备    注:  1、KEY1按键情况执行:
  5.                                         1)开机,高档亮度;
  6.                                         2)中档亮度;
  7.                                         3)爆闪SOS;
  8.                                         4)关机;
  9.         本函数在外部中断中执行,识别到按键按下才会执行相关挡位        。
  10.         ***********************************************************/
  11.         void Key1_Working(void)
  12.         {
  13.                 switch(Key1_Flag)
  14.                         {       
  15.                                 case 1://开机,高档亮度;
  16.                                         LED_PWM(1);
  17.                                         Flag=1;        //开关机标志位为1
  18.                                 break;
  19.                                
  20.                                 case 2://中档亮度;
  21.                                         LED_PWM(2);
  22.                                 break;
  23.                                
  24.                                 case 3://爆闪SOS;                       
  25.                                         LED_PWM(3);
  26.                                 break;
  27.                                
  28.                                 case 4:
  29.                                         LED_PWM(4);
  30.                                                 Key1_Flag = 0;        //按键计数为0
  31.                                                 Flag = 0 ;        //开关机标志位为0
  32.                                                 _asm("HALT");
  33.                                 break;
  34.                                
  35.                         default: break;       
  36.                         }
  37.         }
复制代码
回复

使用道具 举报

板凳
ID:1047058 发表于 2022-11-24 08:38 | 只看该作者
求各位大佬指点一下,刚刚我又看了一下,17h掉电了0.17V,虽然已经降低了但是还是无法满足正常使用的需求,实在不知道该怎么改了。
回复

使用道具 举报

地板
ID:1047058 发表于 2022-11-24 14:34 | 只看该作者
各位好,这个问题已经解决了。原来需要将_asm("HALT");这句加在main函数里,我选择了在其他函数初始化之后进入停机模式,这样待机电流可以降低至0.1mA甚至0.03mA。然后我又加了一句FLASH_CR1 |= 0x80; 这样FLASH就可以在停机模式下不掉电了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表