当前位置:网站首页>STM32通过串口进入和唤醒停止模式
STM32通过串口进入和唤醒停止模式
2022-07-06 16:03:00 【Kay Note】
STM32 具有运行、睡眠、停止和待机四种工作模式。上电复位后 STM32 处于运行状态,当内核不需要继续运行,就可以选择进入后面的三种低功耗模式降低功耗,这三种模式中,电源消耗不同、唤醒时间不同、唤醒源不同,我们可以根据不同的应用需求,选择最佳的低功耗模式。
睡眠模式:CM3 内核停止,外设仍然运行,此功耗是最高的。
停止模式:所有时钟都停止,此功耗较低,典型大概在20uA左右 。
待机模式:1.8V 内核电源关闭,此功耗最低,典型大概在2uA左右。
在实际的开发运用时,我们常用的低功耗模式是停止模式,唤醒方式是任一外部中断。本文主要讲的是通过串口唤醒和进入停止模式,要实现通过串口唤醒停止模式,就需要用到外部中断。把串口Rx引脚设置成外部中断,上升沿触发,这样在串口收到数据时就会触发外部中断,从而唤醒停止模式。相关代码如下
首先是配置串口接收端为外部中断:
/*************************************************
Function: void EXIT_UART_Init(void)
Description: 外部中断初始化
Calls:
Called By:
Input: 无
Output: 无
Return:
Others:
*************************************************/
void EXIT_UART_Init(void)
{
LL_EXTI_InitTypeDef EXTI_InitStruct = {0};
/* GPIO Portd Clock Enable */
LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);
/**/
LL_EXTI_SetEXTISource(LL_EXTI_CONFIG_PORTA, LL_EXTI_CONFIG_LINE3);
/**/
EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_3;
EXTI_InitStruct.LineCommand = ENABLE;
EXTI_InitStruct.Mode = LL_EXTI_MODE_IT;
EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_RISING;
LL_EXTI_Init(&EXTI_InitStruct);
/**/
LL_GPIO_SetPinPull(GPIOA, LL_GPIO_PIN_3, LL_GPIO_PULL_DOWN);
/**/
LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_3, LL_GPIO_MODE_INPUT);
/* EXTI interrupt init*/
NVIC_SetPriority(EXTI2_3_IRQn, 1);
NVIC_EnableIRQ(EXTI2_3_IRQn);
}
然后使能相关时钟,进入停止模式。
/*************************************************
Function: void enter_stop_mode(void)
Description: 进入停止模式
Calls:
Called By:
Input: 无
Output: 无
Return:
Others:
*************************************************/
void enter_stop_mode(void)
{
EXIT_UART_Init(); //配置串口引脚为外部中断
__HAL_RCC_PWR_CLK_ENABLE(); //使能 PER 时钟
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); //进入 stop 模式
}
在低功耗模式唤醒之后,默认使用的系统时钟是HSI,所以就需要重新配置系统时钟。为了方便这里直接使用了复位系统的操作,如果在实际的项目中需要保持外部的IO口状态不变,就不能使用系统复位命令,需要重新配置系统时钟和其他外设时钟。
/*
************************************************************
* 函数名称: void exit_stop_mode(void)
*
* 函数功能: 系统复位
*
* 入口参数: 无
*
* 返回参数: 无
*
* 说明:
************************************************************
*/
void exit_stop_mode(void)
{
__set_FAULTMASK(1); //关闭所有中断
NVIC_SystemReset();
}
边栏推荐
- 内网穿透zerotier 外网(手机、电脑等)访问内网设备(树莓派、NAS、电脑等)
- 11 preparations for Web3 and Decentralization for traditional enterprises
- Cloud native (32) | kubernetes introduction to platform storage system
- Stop saying that microservices can solve all problems
- PDF批量拆分、合并、书签提取、书签写入小工具
- 零代码高回报,如何用40套模板,能满足工作中95%的报表需求
- [unmanned aerial vehicle] multi unmanned cooperative task allocation program platform, including Matlab code
- Efficient ETL Testing
- What does front-end processor mean? What is the main function? What is the difference with fortress machine?
- MySQL implementation of field segmentation from one line to multiple lines of example code
猜你喜欢
JDBC programming of MySQL database
今日睡眠质量记录78分
matplotlib画柱状图并添加数值到图中
MATLIB从excel表中读取数据并画出函数图像
电脑重装系统u盘文件被隐藏要怎么找出来
(1) Chang'an chain learning notes - start Chang'an chain
Eureka Client启动后就关闭 Unregistering application xxx with eureka with status DOWN
AI金榜题名时,MLPerf榜单的份量究竟有多重?
MySQL implementation of field segmentation from one line to multiple lines of example code
I've been laid off, and I'll lose money for everything. The days when I once made a monthly salary of 20000 are not coming back
随机推荐
Stop saying that microservices can solve all problems
今日睡眠质量记录78分
Modules that can be used by both the electron main process and the rendering process
Up to 5million per person per year! Choose people instead of projects, focus on basic scientific research, and scientists dominate the "new cornerstone" funded by Tencent to start the application
PDF批量拆分、合并、书签提取、书签写入小工具
Today, I met a senior test developer from Tencent and saw the ceiling of the foundation
Is the more additives in food, the less safe it is?
COSCon'22 社区召集令来啦!Open the World,邀请所有社区一起拥抱开源,打开新世界~
MySQL connected vscode successfully, but this error is reported
士大夫哈哈哈
(1)长安链学习笔记-启动长安链
Wu Enda 2022 machine learning course evaluation is coming!
asp读取oracle数据库问题
Gradle知识概括
If the request URL contains jsessionid, the solution
每年 2000 亿投资进入芯片领域,「中国芯」创投正蓬勃
There are only two TXT cells in the ArrayExpress database. Can you only download the sequencing run matrix from line to ENA?
Coscon'22 community convening order is coming! Open the world, invite all communities to embrace open source and open a new world~
Knowledge * review
Gradle知識概括