OpenEdv-开源电子网

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

《M144Z-M3最小系统板使用指南——STM32F103版》第三十一章 待机模式实验

[复制链接]

1051

主题

1062

帖子

2

精华

超级版主

Rank: 8Rank: 8

积分
4367
金钱
4367
注册时间
2019-5-8
在线时间
1193 小时
发表于 2024-4-24 17:01:56 | 显示全部楼层 |阅读模式
本帖最后由 正点原子运营 于 2024-4-23 15:39 编辑

第三十一章 待机模式实验
1)实验平台:正点原子 M144Z-M3 STM32F103最小系统板

2) 章节摘自【正点原子】M144Z-M3最小系统板使用指南——STM32F103版


4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boar ... _mini_sysboard.html

5)正点原子官方B站:https://space.bilibili.com/394620890

6)正点原子STM32技术交流QQ群:725095144

155537c2odj87vz1z9vj6l.jpg

155537nfqovl2gg9faaol9.png

本章介绍STM32F103低功耗模式中的待机模式,进入待机模式后,MCU内部的电压调压器将断开1.3V电源域的电源,这意味着内核和外设都将停止工作,并且内核寄存器和内存中的数据都将丢失,但这也是功耗最低的模式,待机模式下可被WKUP引脚的上升沿唤醒。通过本章的学习,读者将学习到低功耗模式下待机模式的使用。
本章分为如下几个小节:
31.1 硬件设计
31.2 程序设计
31.3 下载验证

31.1 硬件设计
31.1.1 例程功能
1. TFTLCD上显示实验信息
2. LED0闪烁时,按下KEY0按键后,MCU进入待机模式
3. MCU进入待机模式后,按下WKUP按键,MCU重新运行

31.1.2 硬件资源
1. LED
       LED0 - PB5
       LED1 - PE5
2. 正点原子 2.8/3.5/4.3/7/10寸TFTLCD模块
3. 按键
       WKUP - PA0
       KEY0 - PE4

31.1.3原理图
本章实验介绍STM32F103低功耗模式中的待机模式,不涉及连接原理图。

31.2 程序设计
31.2.1 HAL库的PWR驱动
本实验配置了WKUP按键(连接至WKUP引脚)唤醒待机模式,因此具体的配置步骤如下:
①:使能WKUP引脚功能
②:进入待机模式
在HAL库中对应的驱动函数如下:
①:使能WKUP引脚功能
该函数用于使能WKUP引脚功能,其函数原型如下所示:
  1. voidHAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx);
复制代码
该函数的形参描述,如下表所示:
QQ截图20240423153843.png
表31.2.1.1 函数HAL_PWR_EnableWakeUpPin()形参描述
该函数的返回值描述,如下表所示:
QQ截图20240423153902.png
表31.2.1.2 函数HAL_PWR_EnableWakeUpPin()返回值描述
该函数的使用示例,如下所示:
  1. #include "stm32f1xx_hal.h"
  2. void example_fun(void)
  3. {
  4.     /* 使能WKUP引脚功能 */
  5.    HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
  6. }
复制代码
②:进入待机模式
该函数用于进入待机模式,其函数原型如下所示:
  1. voidHAL_PWR_EnterSTANDBYMode(void);
复制代码
该函数的形参描述,如下表所示:
QQ截图20240423153909.png
表31.2.1.3 函数HAL_PWR_EnterSTANDBYMode()形参描述
该函数的返回值描述,如下表所示:
QQ截图20240423153916.png
表31.2.1.4 函数HAL_PWR_EnterSTANDBYMode()返回值描述
该函数的使用示例,如下所示:
  1. #include "stm32f1xx_hal.h"
  2. void example_fun(void)
  3. {
  4.     /* 进入待机模式 */
  5.     HAL_PWR_EnterSTANDBYMode();
  6. }
复制代码

31.2.2 PWR驱动
本章实验的PWR驱动主要负责向应用层提供进入待机模式的函数。本章实验中,PWR的驱动代码包括pwr.c和pwr.h两个文件。
PWR驱动中,进入待机模式的函数,如下所示:
  1. /**
  2. *@brief   进入待机模式
  3. *@param   无
  4. *@retval  无
  5. */
  6. voidpwr_enter_standby(void)
  7. {
  8.    __HAL_RCC_PWR_CLK_ENABLE();
  9.    
  10.     /* 配置唤醒引脚 */
  11.    HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
  12.    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
  13.    
  14.     /* 进入待机模式 */
  15.    HAL_PWR_EnterSTANDBYMode();
  16. }
复制代码
从上面的代码中可以看出,在进入待机模式前使能了WKUP引脚功能,最后调用函数HAL_PWR_EnterSTANDBYMode()进入待机模式。

31.2.3 实验应用代码
本章实验的应用代码,如下所示:
int main(void)
  1. {
  2.     uint8_t t = 0;
  3.     uint8_t key;
  4.    
  5.    HAL_Init();                         /* 初始化HAL库 */
  6.    sys_stm32_clock_init(RCC_PLL_MUL9); /* 配置时钟,72MHz */
  7.    delay_init(72);                     /* 初始化延时 */
  8.    usart_init(115200);                 /* 初始化串口 */
  9.    led_init();                         /* 初始化LED */
  10.    key_init();                         /* 初始化按键 */
  11.    lcd_init();                         /* 初始化LCD */
  12.    
  13.    lcd_show_string(30, 50, 200, 16, 16, "STM32", RED);
  14.    lcd_show_string(30, 70, 200, 16, 16, "STANDBYTEST", RED);
  15.    lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED);
  16.    
  17.    lcd_show_string(30, 110, 200, 16, 16, "KEY0:EnterSTANDBY MODE", RED);
  18.    lcd_show_string(30, 130, 200, 16, 16, "KEY_UP:ExitSTANDBY MODE", RED);
  19.    
  20.     while (1)
  21.     {
  22.          key = key_scan(0);
  23.          if (key == KEY0_PRES)
  24.          {
  25.              /* 按下KEY0按键,进入待机模式 */
  26.              pwr_enter_standby();
  27.          }
  28.          
  29.          if (++t == 20)
  30.          {
  31.              t = 0;
  32.              LED0_TOGGLE();
  33.          }
  34.          
  35.          delay_ms(10);
  36.     }
  37. }
复制代码
从上面的代码中可以看出,在完成相关的初始化操作后,便不断地扫描按键,若扫描到KEY0按键被按下,则会进入待机模式,进入待机模式后LED0便不再闪烁,说明此时程序已经停止运行,进入了待机模式,此时可以按下WKUP按键进行待机模式唤醒,随后便可看到LED0恢复闪烁,说明程序再次运行。

31.3 下载验证
在完成编译和烧录操作后,可以看到LED0闪烁提示系统正在运行,此时可以按下KEY0按按键,可以看到LED0不再闪烁,这是因为系统已经进入待机模式了,此时再按下WKUP按键,即可从待机模式下唤醒,可以看到LED0继续闪烁。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-5-16 06:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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