[STM32F1]

STM32基础篇——待机唤醒实验

[复制链接]
1844|10
手机看帖
扫描二维码
随时随地手机跟帖
aizaixiyuanqian|  楼主 | 2018-1-17 22:12 | 显示全部楼层 |阅读模式
本帖最后由 aizaixiyuanqian 于 2018-1-17 22:14 编辑

前面的试验已经介绍了待机唤醒实验,之前的试验使用的只是通过串口输出,本次试验我们将向大家介绍 STM32 的待机唤醒通过 LCD 进行显示,按键操作待机和唤醒模式。通过按键 1进入待机模式,按键2来实现唤醒,唤醒后 LED 闪烁,待机时 LED 停止。按键操作的时候 LCD 上显示对应的操作信息。试验目标:
1、了解 STM32 的低功耗模式。
2、学会让单片机进入待机模式。
3、学会让单片机从待机模式唤醒。
aizaixiyuanqian|  楼主 | 2018-1-17 22:15 | 显示全部楼层
  STM32  的低功耗模式
STM32 降低功耗的方法除了可以通过降低系统时钟和关闭 APB 和 AHB 总线上未被使用的外设时钟以外,最好的方式就是让 STM32 进入低功耗模式了。 STM32 的低功耗模式一共有三种模式:
1、睡眠模式。Cortex-M3 内核停止,所有外设包括 Cortex-M3 核心的外设,如:NVIC、系统时钟(SysTick)等仍在运行。
2、停止模式。所有时钟都已停止。
3、待机模式。1.8V 电源关闭。

使用特权

评论回复
aizaixiyuanqian|  楼主 | 2018-1-17 22:17 | 显示全部楼层
1.PNG

在这三种模式中,最低功耗的是待机模式,在待机模式下,最低只需要 2uA 左右的电流。停机模式是次低功耗模式,典型电流的消耗在 20uA 左右。最后就是睡眠模式了。

使用特权

评论回复
aizaixiyuanqian|  楼主 | 2018-1-17 22:19 | 显示全部楼层
低功耗的操作步骤
今天我们来讲的是,程序先进行 5 秒种的倒计时然后让单片机进入待机模式,进入待机模式后,单片机不工作。当按键 K_UP 按下后系统待机模式被唤醒,继续倒计时 5 秒后又进入待机模式。如何进入待机模式呢?其实很简单,在数据手册上面就给有一个表格给我们:
1.PNG
只要按照上面的设置,就能够进入低功耗模式。

使用特权

评论回复
aizaixiyuanqian|  楼主 | 2018-1-17 22:21 | 显示全部楼层
1.  进入待机模式
1)  在设置之前,我们先将低功耗的时钟设置打开。RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能 PWR 外设时钟
2)  然后使能引脚唤醒功能。我们可以使用 PWR_WakeUpPinCmd()函数,它有一个参数,用来设置状态值,我们要开启所以设为:ENABLE。代码为: PWR_WakeUpPinCmd(ENABLE); //使能唤醒管脚功能
3)然后进入待机模式



使用特权

评论回复
aizaixiyuanqian|  楼主 | 2018-1-17 22:22 | 显示全部楼层
在 库 函 数 中 , 有 直 接 进 入 低 功 耗 模 式 的 函 数 。
PWR_EnterSTANDBYMode()。它无参数直接调用就可以了。
例程函数为:

void standmodeinit() //待机模式
{
NVIC_SystemLPConfig(NVIC_LP_SLEEPDEEP,ENABLE);//选择系统进入低功耗模式的条件
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//使能 PWR 外设时钟
PWR_WakeUpPinCmd(ENABLE);//使能唤醒管脚 使能或者失能唤醒管脚功能
PWR_EnterSTANDBYMode();//进入待机模式
}

使用特权

评论回复
aizaixiyuanqian|  楼主 | 2018-1-17 22:22 | 显示全部楼层
主程序
int main(void)
{
u8 num;
TFT_Init();  //TFT 初始化
LED_Init();  //LED 初始化
key_init();  //按键初始化
TFT_ClearScreen(BLACK);  //清屏
GUI_Show12ASCII(10,10,"K_LEFT: Enter Standy mode!",YELLOW,BLACK);
GUI_Show12ASCII(10,30,"K_UP: Exit Standy mode!",YELLOW,BLACK);
GUI_Show12ASCII(10,130,"Waite Enter Standy mode!",YELLOW,BLACK);
while(1)
{
if(num>10)
{
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
num=0;
}
else
{
GPIO_SetBits(GPIOC,GPIO_Pin_0);
num++;
}
delay_ms(100);  //LED 闪烁
if(k_left==0)
{
delay_ms(10);
if(k_left==0)
{
GUI_Show12ASCII(10,130," Enter Standy mode! ",YELLOW,BLACK);
standmodeinit(); //待机模式
}
}
}
}

使用特权

评论回复
aizaixiyuanqian|  楼主 | 2018-1-17 22:23 | 显示全部楼层
主函数的程序效果是:系统默认进入正常的工作模式,LED 闪烁,如果按键 K_LEFT 按下后,进入待机模式,LCD 上显示对应的信息,此时 LED 不闪烁。如果按键 K_UP 按下后唤醒,待机模式退出,LCD 上显示对于的信息,LED 闪烁。

使用特权

评论回复
aizaixiyuanqian|  楼主 | 2018-1-17 22:24 | 显示全部楼层
今天的比较简单,就到这里了,感谢大家的支持,

使用特权

评论回复
捉虫天师| | 2018-1-17 22:29 | 显示全部楼层
低功耗的操作。

使用特权

评论回复
jiekou001| | 2018-1-18 21:26 | 显示全部楼层
可以通过定时器唤醒这几种吗

使用特权

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

本版积分规则

62

主题

1353

帖子

6

粉丝