折腾低功耗已经第四天了,可以说筋疲力尽,没想到这个低功耗竟然卡住了我,看到好多人都可以做到11u我却问题颇多。无奈来此求助。 首先说我遇到的问题。我用主函数来测试功耗,不加其他额外的函数。但是出现了奇葩的问题,无论我怎么改,用asm(“halt”)打算进入停机模式,还是用asm("wfi")进入等待模式,功耗不变,我开始怀疑我的测试方法,最初我是用手持万用表测试的,表上的显示精度可以达到uA,之后我又拿了个源表(吉时利2410)我以为这次没问题了,这次又出了个奇葩的问题,当我用源表供电的时候VCAP竟然没电压,这什么情况,我用示波器看了下,好吧,竟然是斜波,就是方波给电容充电的感觉,可手册上写的应该1.8v。我换上电源供电,1.8v左右,没问题,我又不明白了。原本的问题还没解决,新的问题又来了。我放弃了源表。继续用我的电源供电,用手持万用表测试,想着精度差点就差点吧。可是当我用如下程序(1)测试的时候竟然只有200u,这算上全速了吧。感觉有问题,又换了个程序(2),打算测下什么都关闭,进入到停机状态的电流。结果400多u,我的表出问题了?还是硬件电流出问题了呢。硬件电路我是买的芯片和tssop转接板自己焊的最小系统,没有任何外设。用stlink和stvd都能下载进去程序,并且测试能控制端口,在stlink里面也可以仿真,寄存器的值也都对。我到底哪里没考虑全面。之前对单片机只是简单接触,第一次用st的片子。我觉得我好想要放弃了,原本不应该是问题的问题竟然困扰了我这么多天。希望能有朋友有经验的多帮忙,小弟谢谢啦! 程序(1) unsigned long int count=0; void main() { CLK_ICKR|=0X01;//HSI使能 CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//预分频8分频得到16M频率 CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);//cpu分频系数为1 CLK_PCKENR1&=0X40; CLK_PCKENR2&=0X73;//关闭外设时钟 PA_DDR|=0X0E; PA_CR1|=0x0E; PA_ODR&=~0x0E; PB_DDR|=0X30; PB_CR1|=0x30; PB_ODR&=~0X30; PC_DDR|=0XF8; PC_CR1|=0xf8; PC_ODR&=~0xF8; PD_DDR|=0X7c;//设为输出 PD_CR1|=0x7c;//设为推挽 PD_ODR&=~0x7c;//设为低电平 WWDG_CR&=0X80;//关闭窗口关门狗 CPU_CFG_GCR&=0XFE;//关闭swim while(1) { asm("nop"); } } 程序2 unsigned long int count=0; void main() { CLK_ICKR|=0X01;//HSI使能 CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//预分频8分频得到16M频率 CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);//cpu分频系数为1 CLK_PCKENR1&=0X40; CLK_PCKENR2&=0X73;//关闭外设时钟 CLK_ICKR|=0X08;//打开低速时钟信号 while(!(CLK_ICKR&0X10));//等待LSI准备 CLK_SWCR|=0X02;//切换使能 CLK_SWR=0XD2;//设置目标时钟为LSI,需使能LSI_EN选项字节 while(CLK_SWCR&0X01!=0);//切换忙,等待切换完成 CLK_SWCR&=~0X08;//清除切换标志 CLK_ICKR&=~0X01;//关闭HSI PA_DDR|=0X0E; PA_CR1|=0x0E; PA_ODR&=~0x0E; PB_DDR|=0X30; PB_CR1|=0x30; PB_ODR&=~0X30; PC_DDR|=0XF8; PC_CR1|=0xf8; PC_ODR&=~0xF8; PD_DDR|=0X7c;//设为输出 PD_CR1|=0x7c;//设为推挽 PD_ODR&=~0x7c;//设为低电平 WWDG_CR&=0X80;//关闭窗口关门狗 CPU_CFG_GCR&=0XFE;//关闭swim FLASH_CR1&=~0X08;//flash在停机状态掉电 while(1) { asm("halt"); } } |
RE:stm8s003低功耗问题求助
RE:stm8s003低功耗问题求助
回复:stm8s003低功耗问题求助
貌似前面看到一个类似的问题,低功耗指的是芯片,不知楼主测的是芯片还是这个系统?系统除了单片机还有外围器件的功耗
我测试的芯片的功耗,我用了一个tssop和DIP的转接板自己焊接了一个最小系统,最小系统只包含了vcap的一个105电容,别的没有,完了我把swim和nrst引脚引出来了,为了下程序,别的就没有了。芯片我通过测试io口的波形,内部程序给一定的波形来验证芯片功能的完整。其他的我就没想到还要有什么考虑的了
回复:stm8s003低功耗问题求助
在应用中,低功耗的产品不只是采用低功耗的mcu,更多的要依赖于外围电路的低功耗设计
我测试的芯片的功耗,我用了一个tssop和DIP的转接板自己焊接了一个最小系统,最小系统只包含了vcap的一个105电容,别的没有,完了我把swim和nrst引脚引出来了,为了下程序,别的就没有了。芯片我通过测试io口的波形,内部程序给一定的波形来验证芯片功能的完整。其他的我就没想到还要有什么考虑的了
RE:stm8s003低功耗问题求助
RE:stm8s003低功耗问题求助
3V输入,经过表后,可能只有2V了(有时需要示波器才能看到)
RE:stm8s003低功耗问题求助
1.外设的低功耗,不需要的外设模块,全部关闭。
2.GPIO的处理,不需要的IO最好做悬浮输入处理。
3.主时钟的处理,先降到最低内部LSI时钟,关闭其他不需要的时钟模块。
4.进入低功耗模式。
谢谢楼主共享,学习了