显示屏加上多个外部模块同时工作,电子称的功耗还是很大的。
但是不用担心,因为STM32提供了三种低功耗模式——睡眠、停机、待机
顺便说下32芯片的几种工作模式:
1、工作模式:外设正常运行,内核CPU及SRAM供电,未使用外设的时钟默认关闭。 2、睡眠模式:只有CPU停止工作,各个外设正常工作,依靠任何中断/事件唤醒。 3、停机模式:1.8V供电区域时钟被停止,内部HSI,PLL,外部时钟HSE均关闭,同时电压检测器也可进入低功耗模式,但SRAM和寄存器不断电,此时只能依靠外部中断(EXTI)和RTC时钟才能唤醒。 4、待机模式:1.8V供电区域被时钟停止,内部HSI,PLL,外部时钟HSE均关闭,同时电压检测器也可进入低功耗模式,SRAM和不属于待机电路的寄存器也被断电关闭,此时即使是外部中断(EXTI)也不能将其唤醒,只能通过复位(外部复位,看门狗复位)、唤醒引脚、RTC时钟来唤醒。 但是无论是在停止模式 还是待机模式下,RTC和IWDG及其时钟源不会被关闭。
以STM32进入低功耗模式为主,其他模块也一同进入相应的睡眠模式,将系统在不承重的时候功耗最低。
并且可以配置睡眠状态下的唤醒方式——中断唤醒或者事件唤醒。
本系统在低功耗下进入停机模式。
进入停机模式只需要两句话即可:
低功耗的同时设置了中断唤醒方式,所以需要在按键中断中重新配置系统时钟(重要):
/*
** 系统从停止模式被唤醒时是使用HSI作为系统时钟的
停机唤醒后配置系统时钟: 使能 HSE, PLL
并且选择PLL作为系统时钟.
*/
void Restart_From_Low_Power(void)
{
//启动并配置stm32
ErrorStatus HSEStartUpStatus;
//使能 HSE
RCC_HSEConfig(RCC_HSE_ON);
//等待 HSE 准备就绪
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
//使能 PLL
RCC_PLLCmd(ENABLE);
//等待 PLL 准备就绪
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
//选择PLL作为系统时钟源
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//等待PLL被选择为系统时钟源
while(RCC_GetSYSCLKSource() != 0x08)
{
}
}
//启动CS1237
CS1237_Restart();
//启动触摸屏
HMI_Unsleep_Mode();
//显示OLED
OLED_Display_On();
}
目标效果:当电子称没有进行称重的一段时间后,自动进入低功耗模式,并且可以利用按键一键唤醒。
实施思路:
当系统处于静止并没有称量任何物品的时候,转换的重量为0g,选择小于1g作为低功耗的判断标志是为了防止微小抖动带来的误差。
采用LED闪烁来提示用户当前没有称量任何物品。LED会在系统判断上述条件满足时闪烁一次。
在中间任何时刻开始称重,系统会自动清零之前的计数标志,重新开始判断。
以系统主循环作为定时标志,可以节省一个定时器资源。实测主循环一次时间约为1.5秒,当LED闪烁50次,也就是75秒之后,系统会自动进入睡眠模式。
睡眠模式包括AD芯片的Power down模式,HMI触摸屏的睡眠模式,OLED屏幕的片选失能和STM32主控芯片的停止模式。
当STM32处于停止模式的时候,系统关闭所有外设时钟,停止运转。此时内部电流最低可低至20uA。
具体实现程序:
//低功耗判断
low_power_weight_1 = now_weight;
if((low_power_weight_1 < 1) && ((low_power_weight_1-low_power_weight_2 < 1) || (low_power_weight_2-low_power_weight_1 < 1)))
{
low_power_num++;
LED1_Twinkling(2);
LED2_Twinkling(2);
Delay_ms(1000);
}
else
{
low_power_num = 0;
low_power_weight_2 = low_power_weight_1;
}
//重量低于1g并且在x秒内没有变化,即开始进入低功耗
if(low_power_num >= 50)
{
//计数清零,准备下一次的计数
low_power_num = 0;
//蜂鸣器首先响用来提示
Beep_Warning(3,200);
//进入低功耗
Low_Power_Mode();
}
最近考研复习时间真的很紧张啊。只能晚上抽时间写一下啦。
|