2025年STM32通过串口进入和唤醒停止模式

STM32通过串口进入和唤醒停止模式STM32 具有运行 睡眠 停止和待机四种工作模式 上电复位后 STM32 处于运行状态 当内核不需要继续运行 就可以选择进入后面的三种低功耗模式降低功耗 这三种模式中 电源消耗不同 唤醒时间不同 唤醒源不同 我们可以根据不同的应用需求 选择**的低功耗模式 睡眠模式 CM3

大家好,我是讯享网,很高兴认识大家。

        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(); }

小讯
上一篇 2025-02-20 16:22
下一篇 2025-02-24 21:07

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/61006.html