打印
[APM32F1]

【学习笔记】低功耗实现

[复制链接]
1398|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
多云转晴|  楼主 | 2022-6-2 16:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
芯片的低功耗模式在实际应用十分重要,这几天刚好也使用了STOP的两个模式,做一个简单的笔记和分享。
使用的芯片型号是APM32F103XB.
①搭建整体框架,用于通过程序可以简单地选择不同的低功耗模式。
int Lowpower_Select(uint32_t Num)
{
        //IO口设置为模拟输入
        GPIO_Lowpower_Init();
       
        //关闭总线时钟
        RCM->AHBCLKEN = 0;
        RCM->APB1CLKEN = 0;
        RCM->APB2CLKEN = 0;
       
        //选择想要进入的低功耗模式
        if(Num == 1)
        {
                Lowpower_Stop_Regulator_On_lowpower();
        }
        else if(Num == 2)
        {
                Lowpower_Stop_Regulator_lowpower();
        }
        else
        {
                return 0;
        }
        return 0;
}
②对GPIO的初始化,就是将所有的IO口设置为模拟输入,因为将其设置为模拟输入时,其输出缓冲器被关闭,施密特触发器输入被禁用,因此I/O引脚的每个模拟值零消耗。施密特触发器的输出被强制为恒定值(0)。上拉和下拉电阻被硬件关闭。
void GPIO_Lowpower_Init(void)
{
        //打开所有GPIO的时钟
        RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOA|RCM_APB2_PERIPH_GPIOB|RCM_APB2_PERIPH_GPIOC|RCM_APB2_PERIPH_GPIOD|RCM_APB2_PERIPH_GPIOE|RCM_APB2_PERIPH_GPIOF|RCM_APB2_PERIPH_GPIOG);
       
        //将所有IO口配置为模拟输入
        GPIO_Config_T GPIO_Lowpower_ALL_CHANGE_AIN;
        GPIO_Lowpower_ALL_CHANGE_AIN.mode = GPIO_MODE_ANALOG;
        GPIO_Lowpower_ALL_CHANGE_AIN.pin = GPIO_PIN_ALL;
        GPIO_Lowpower_ALL_CHANGE_AIN.speed = GPIO_SPEED_50MHz;
        GPIO_Config(GPIOA,&GPIO_Lowpower_ALL_CHANGE_AIN);
        GPIO_Config(GPIOB,&GPIO_Lowpower_ALL_CHANGE_AIN);
        GPIO_Config(GPIOC,&GPIO_Lowpower_ALL_CHANGE_AIN);
        GPIO_Config(GPIOD,&GPIO_Lowpower_ALL_CHANGE_AIN);
        GPIO_Config(GPIOE,&GPIO_Lowpower_ALL_CHANGE_AIN);
        GPIO_Config(GPIOF,&GPIO_Lowpower_ALL_CHANGE_AIN);
        GPIO_Config(GPIOG,&GPIO_Lowpower_ALL_CHANGE_AIN);
       
        //关闭所有GPIO的时钟
        RCM_DisableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOA|RCM_APB2_PERIPH_GPIOB|RCM_APB2_PERIPH_GPIOC|RCM_APB2_PERIPH_GPIOD|RCM_APB2_PERIPH_GPIOE|RCM_APB2_PERIPH_GPIOF|RCM_APB2_PERIPH_GPIOG);
}
③配置不同的低功耗模式,以stop为例
void Lowpower_Stop_Regulator_On_lowpower(void)
{
        //关闭内部高速时钟和内部低速时钟
        RCM_DisableHSI();
        RCM_DisableLSI();
        //打开PMU的时钟
        RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_PMU);
        //清除唤醒标志位
        PMU_ClearStatusFlag(PMU_FLAG_WUE);
        //进入停止模式
        PMU_EnterSTOPMode(PMU_REGULATOR_ON,PMU_STOP_ENTRY_WFI);//PMU_STOP_ENTRY_WFE  可选择中断或者事件
}
void Lowpower_Stop_Regulator_lowpower(void)
{
        //关闭内部高速时钟和内部低速时钟
        RCM_DisableHSI();
        RCM_DisableLSI();
        //打开PMU的时钟
        RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_PMU);
        //清除唤醒标志位
        PMU_ClearStatusFlag(PMU_FLAG_WUE);
        //进入停止模式
        PMU_EnterSTOPMode(PMU_REGULATOR_LOWPOWER,PMU_STOP_ENTRY_WFI);//PMU_STOP_ENTRY_WFE  可选择
}

使用特权

评论回复
沙发
chenqianqian| | 2022-6-7 19:15 | 只看该作者
低功耗模式下能做到多少uA?

使用特权

评论回复
板凳
daichaodai| | 2022-6-8 08:02 | 只看该作者
实测低功耗能做到多少?

使用特权

评论回复
地板
ulystronglll| | 2022-9-7 15:57 | 只看该作者
低功耗模式         

使用特权

评论回复
5
digit0| | 2022-9-7 16:10 | 只看该作者
俩种模式下配置完后功耗分别是多少?

使用特权

评论回复
6
jackcat| | 2022-9-7 16:54 | 只看该作者
多用低功耗的模式吧  

使用特权

评论回复
7
aspoke| | 2022-9-7 17:20 | 只看该作者
MCU其实比起外围电路功耗很小

使用特权

评论回复
8
youtome| | 2022-9-7 19:12 | 只看该作者
间歇式工作方式,如何省电,实现低功耗

使用特权

评论回复
9
Bowclad| | 2022-9-7 20:30 | 只看该作者
低功耗时多少ua啊?

使用特权

评论回复
10
phoenixwhite| | 2022-9-8 08:37 | 只看该作者
选用低功耗的MCU和将MCU空闲时设置到睡眠状态

使用特权

评论回复
11
louliana| | 2022-9-8 10:08 | 只看该作者
低功耗设计方法有哪些

使用特权

评论回复
12
updownq| | 2022-9-8 12:53 | 只看该作者
低功耗方式如何实现?  

使用特权

评论回复
13
htmlme| | 2022-9-8 13:45 | 只看该作者
实现低功耗mcu是休眠还是断电

使用特权

评论回复
14
jonas222| | 2022-9-8 14:38 | 只看该作者
掉电运行方式没有什么好说的  

使用特权

评论回复
15
timfordlare| | 2022-9-8 15:28 | 只看该作者
主要用MCU来将外围电路的功耗降下来。

使用特权

评论回复
16
Stahan| | 2022-10-4 20:26 | 只看该作者
低功耗模式

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

17

帖子

0

粉丝