OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 12293|回复: 8

stm32通过程序降低功耗

[复制链接]

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2014-5-16
在线时间
17 小时
发表于 2014-5-16 09:47:40 | 显示全部楼层 |阅读模式
5金钱
原子哥,我想问一下关于低功耗的问题。
    我想要在单片机软件这方面尽可能的降低功耗,在网上搜索了一下,只有降低CPU频率和尽可能减少外设使用这两个方法。我也想过让stm32进入低功耗模式,但是低功耗的唤醒好像都是等同于复位,我希望程序唤醒之后程序能继续执行。
     我想问的是1、降低CPU频率和减少外设的方法是否可行,降低cpu频率的话会有什么影响。
                    2、低功耗模式唤醒都是等同于复位吗?
                    3、有什么好办法能降低功耗吗?(软件方面)

求帮忙。

最佳答案

查看完整内容[请看2#楼]

回复【3楼】杭电凌云: --------------------------------- 1,降低CPU时钟,就跑得慢了,处理事务就变慢了,其他一般没有副作用了. 2,只有待机模式唤醒,才等同于复位,你可以用睡眠模式,但是进入睡眠模式要用WFE,而不是WFI. 3,你自己已经将MCU的降低功耗讲的差不多了,剩下的就是其他外部电路了..很多时, 这个,才是耗电大户....
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-16 09:47:41 | 显示全部楼层
回复【3楼】杭电凌云:
---------------------------------
1,降低CPU时钟,就跑得慢了,处理事务就变慢了,其他一般没有副作用了.
2,只有待机模式唤醒,才等同于复位,你可以用睡眠模式,但是进入睡眠模式要用WFE,而不是WFI.
3,你自己已经将MCU的降低功耗讲的差不多了,剩下的就是其他外部电路了..很多时, 这个,才是耗电大户....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-16 12:58:28 | 显示全部楼层
这个参考STM32中文参考手册40页 4.3 低功耗模式 章节
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2014-5-16
在线时间
17 小时
 楼主| 发表于 2014-5-16 13:12:57 | 显示全部楼层
回复【2楼】Badu_Space:
---------------------------------
谢谢回复,我看过这个章节,降低功耗只是提到降系统时钟和关外部时钟,和我说的一样。
              我想知道的是降低了时钟频率会对整个系统有影响吗?
              我希望从低功耗返回的时候程序能继续执行,就是还有其他办法吗?
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2014-5-16
在线时间
17 小时
 楼主| 发表于 2014-5-16 14:09:42 | 显示全部楼层
我想到了一个方法,在睡眠模式开启之前,先把当前的PC压到堆栈里面,中断唤醒之后再从这里开始,就像中断的原理一样
             可是我不会这样的写法,哪位大神教教我吧。
     急求。。。
回复

使用道具 举报

1

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2014-3-12
在线时间
9 小时
发表于 2014-5-16 21:24:30 | 显示全部楼层
楼主,你可以参考下这么做:
设定一个定时器,每20ms进一次中断。
电源管理模式设置为等待中断,这样你主函数里的主循环每执行完一次就进入睡眠。
而等待下一次20ms定时中断的唤醒。中断唤醒CPU后会继续下一轮的执行

while(1)
{
    fun1();//
    fun2();//
    fun3();//
    _asm("wfi");
}
功夫再高、也怕羊刀
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2014-5-16
在线时间
17 小时
 楼主| 发表于 2014-5-17 11:36:07 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
谢谢原子哥了,考虑到休眠模式会用到bkp,pwr,exti这几个外设,而且我的非休眠模式时间较长,我还是降下频率吧。
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2014-5-16
在线时间
17 小时
 楼主| 发表于 2014-5-17 11:39:36 | 显示全部楼层
回复【6楼】加速度:
---------------------------------
谢谢你的回复,我希望系统能先自动调整到合适的状态,然后休眠一段时间,等待外部的条件改变,再唤醒单片机开始自动调整。如果定时睡眠的话应该会有影响的。
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2014-5-16
在线时间
17 小时
 楼主| 发表于 2014-5-17 17:58:16 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
原子哥,我实际操作过,降低频率,关一些外设时钟,或者睡眠模式,对于整个系统降低功耗来说都算是杯水车薪,效果不是很明显。
               待机和停机模式我没试过,不知道效果如何。
          就我当前的感觉来说,降低外部设备的功耗才能有效的解决功耗问题。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-8 04:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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