当前位置:网站首页>STM32 enters and wakes up the stop mode through the serial port
STM32 enters and wakes up the stop mode through the serial port
2022-07-06 23:42:00 【Kay Note】
STM32 Have run 、 sleep 、 Stop and standby four working modes . After power on reset STM32 In operation , When the kernel doesn't need to continue running , You can choose to enter the following three low-power modes to reduce power consumption , Of the three models , Different power consumption 、 Wake up time is different 、 Different wake-up sources , We can according to different application requirements , Choose the best low-power mode .

Sleep mode :CM3 Kernel stop , The peripheral is still running , This power consumption is the highest .
Stop mode : All clocks stop , This power consumption is low , Typical is probably 20uA about .
Standby mode :1.8V Kernel power off , This power consumption is the lowest , Typical is probably 2uA about .
In the actual development and Application , Our commonly used low-power mode is stop mode , The wake-up mode is any external interrupt . This article mainly talks about waking up and entering the stop mode through the serial port , To realize the wake-up stop mode through the serial port , External interrupts are needed . Put the serial port Rx The pin is set to external interrupt , Rising edge trigger , In this way, the external interrupt will be triggered when the serial port receives data , This wakes up the stop mode . The relevant code is as follows
First, configure the serial port receiving end as an external interrupt :
/*************************************************
Function: void EXIT_UART_Init(void)
Description: External interrupt initialization
Calls:
Called By:
Input: nothing
Output: nothing
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);
}Then enable the relevant clock , Enter stop mode .
/*************************************************
Function: void enter_stop_mode(void)
Description: Enter stop mode
Calls:
Called By:
Input: nothing
Output: nothing
Return:
Others:
*************************************************/
void enter_stop_mode(void)
{
EXIT_UART_Init(); // Configure the serial port pin as an external interrupt
__HAL_RCC_PWR_CLK_ENABLE(); // Can make PER The clock
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); // Get into stop Pattern
}After wakeup in low power mode , The default system clock is HSI, So you need to reconfigure the system clock . For convenience, the operation of the reset system is directly used here , If you need to keep external in the actual project IO Port state unchanged , You cannot use the system reset command , You need to reconfigure the system clock and other peripheral clocks .
/*
************************************************************
* The name of the function : void exit_stop_mode(void)
*
* The functionality : System reset
*
* Entrance parameters : nothing
*
* Returns the parameter : nothing
*
* explain :
************************************************************
*/
void exit_stop_mode(void)
{
__set_FAULTMASK(1); // Turn off all interrupts
NVIC_SystemReset();
}边栏推荐
- Devsecops software R & D security practice - release
- Huawei cloud gaussdb (for redis) unveils issue 21: using Gauss redis to achieve secondary indexing
- Graphite document: four countermeasures to solve the problem of enterprise document information security
- MATLIB从excel表中读取数据并画出函数图像
- docker mysql5.7如何设置不区分大小写
- Station B Big utilise mon monde pour faire un réseau neuronal convolutif, Le Cun Forward! Le foie a explosé pendant 6 mois, et un million de fois.
- 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
- 士大夫哈哈哈
- B站大佬用我的世界搞出卷積神經網絡,LeCun轉發!爆肝6個月,播放破百萬
- 亚朵三顾 IPO
猜你喜欢

The problem of ASP reading Oracle Database

求帮助xampp做sqlilab是一片黑

Gold three silver four, don't change jobs

Ajout, suppression et modification d'un tableau json par JS

With the help of this treasure artifact, I became the whole stack

Efficient ETL Testing

Design a red envelope grabbing system

(1)长安链学习笔记-启动长安链

AI金榜题名时,MLPerf榜单的份量究竟有多重?

今日睡眠质量记录78分
随机推荐
浅谈现在的弊端与未来的发展
[212] what are three methods for PHP to send post requests
Can online reload system software be used safely? Test use experience to share with you
这个『根据 op 值判断操作类型来自己组装 sql』是指在哪里实现?是指单纯用 Flink Tabl
【212】php发送post请求有哪三种方法
Résumé des connaissances de gradle
The programmer said, "I'm 36 years old, and I don't want to be rolled, let alone cut."
B站大佬用我的世界搞出卷积神经网络,LeCun转发!爆肝6个月,播放破百万
使用MitmProxy离线缓存360度全景网页
Pdf batch splitting, merging, bookmark extraction, bookmark writing gadget
How can Oracle CDC deserialize with jsondebeziumdeserializationschema
(LeetCode)两数之和
[communication] optimal power allocation in the uplink of two-layer wireless femtocell network with matlab code
服务器SMP、NUMA、MPP体系学习笔记。
mysql-cdc 的jar包 ,在flink运行模式下,是不是要放在不同的地方呢?
Knowledge * review
PDF批量拆分、合并、书签提取、书签写入小工具
Devsecops software R & D security practice - release
STM32通过串口进入和唤醒停止模式
士大夫哈哈哈