当前位置: 首页> 娱乐> 明星 > 微信小程序后端开发语言_中山制作企业网站_seo网站排名优化案例_网络营销型网站

微信小程序后端开发语言_中山制作企业网站_seo网站排名优化案例_网络营销型网站

时间:2025/9/26 14:30:01来源:https://blog.csdn.net/qq_64219867/article/details/144900216 浏览次数:0次
微信小程序后端开发语言_中山制作企业网站_seo网站排名优化案例_网络营销型网站

需求描述

寄存器操作进入待机模式。待机模式的唤醒方式比较有限。我们这次使用WKUP引脚的上升沿唤醒。PA0就是WKUP引脚。

当然PA0仍然需要工作在下拉输入模式,只有这样当按键按下的时候才会有一个上升沿。

由于我们电路中PA0已经连接了LED1,所以要产生上升沿需要先用杜邦线连接GND(拉低),然后再连接3.3V电源即可(拉高)。

另外也可以使用NRST引脚实现唤醒。

思路

首先用杜邦线连接GND和PA0,然后设置PA0 位下拉输入模式,继续设置stm32进入待机模式,最后用杜邦线连接3V3和PA0,产生上升沿,进行唤醒。

相关寄存器

PA0需要开启唤醒功能

PDDS位配置

SLEEPDEEP位配置

main.c

#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"void enter_standby_mode(void);int main(void)
{// 初始化USART_Init();LED_Init();KEY_Init();printf("尚硅谷低功率实验:待机模式...\n");// 1. 开启LED灯,延时2s,模拟正常程序执行过程LED_On(LED_2);Delay_s(2);while (1){// 2. 进入待机模式printf("正常代码执行完毕,3s后进入待机模式...\n");Delay_s(3);printf("进入待机模式,请接线唤醒...\n");Delay_ms(1);	// 引入延时,确保发送信息成功enter_standby_mode();// 4. 以下代码不会执行printf("从待机模式中唤醒...\n");Delay_s(2);}
}// 定义进入睡眠模式的函数
void enter_standby_mode(void)
{// 1. 设置深睡眠模式SCB->SCR |= SCB_SCR_SLEEPDEEP;// 2. 开启PWR模块时钟RCC->APB1ENR |= RCC_APB1ENR_PWREN;// 3. 配置PDDS = 1,表示待机模式PWR->CR |= PWR_CR_PDDS;// 4. 使能 PA0 的唤醒功能PWR->CSR |= PWR_CSR_EWUP;// 5. 使用WFI指令,进入待机模式__WFI();
}

问题1:运行完之后会发现,不断的唤醒。

查看寄存器发现,唤醒标志位没有清0操作。重点时WUF唤醒标志位。

添加代码:

    // 开启PWR模块时钟RCC->APB1ENR |= RCC_APB1ENR_PWREN;// 判断是否有标志位,如果有就直接清除if (PWR->CSR & PWR_CSR_SBF){printf("从待机模式唤醒!\n");PWR->CR |= PWR_CR_CSBF;}if (PWR->CSR & PWR_CSR_WUF){printf("发生了唤醒事件!\n");PWR->CR |= PWR_CR_CWUF;}

main.c(完整版)

#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"void enter_standby_mode(void);int main(void)
{// 初始化USART_Init();LED_Init();KEY_Init();// 开启PWR模块时钟RCC->APB1ENR |= RCC_APB1ENR_PWREN;// 判断是否有标志位,如果有就直接清除if (PWR->CSR & PWR_CSR_SBF){printf("从待机模式唤醒!\n");PWR->CR |= PWR_CR_CSBF;}if (PWR->CSR & PWR_CSR_WUF){printf("发生了唤醒事件!\n");PWR->CR |= PWR_CR_CWUF;}printf("尚硅谷低功率实验:待机模式...\n");// 1. 开启LED灯,延时2s,模拟正常程序执行过程LED_On(LED_2);Delay_s(2);while (1){// 2. 进入待机模式printf("正常代码执行完毕,3s后进入待机模式...\n");Delay_s(3);printf("进入待机模式,请接线唤醒...\n");Delay_ms(1);	// 引入延时,确保发送信息成功enter_standby_mode();// 4. 以下代码不会执行printf("从待机模式中唤醒...\n");Delay_s(2);}
}// 定义进入待机模式的函数
void enter_standby_mode(void)
{// 1. 设置深睡眠模式SCB->SCR |= SCB_SCR_SLEEPDEEP;// 3. 配置PDDS = 1,表示待机模式PWR->CR |= PWR_CR_PDDS;// 4. 使能 PA0 的唤醒功能PWR->CSR |= PWR_CSR_EWUP;// 5. 使用WFI指令,进入待机模式__WFI();
}

关键字:微信小程序后端开发语言_中山制作企业网站_seo网站排名优化案例_网络营销型网站

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: