stm32f103串口唤醒_低功耗串口与一般串口对接[通俗易懂]

stm32f103串口唤醒_低功耗串口与一般串口对接[通俗易懂]STM32具有运行、睡眠、停止和待机四种工作模式

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

stm32f103串口唤醒_低功耗串口与一般串口对接[通俗易懂]

睡眠模式: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();
}

今天的文章stm32f103串口唤醒_低功耗串口与一般串口对接[通俗易懂]分享到此就结束了,感谢您的阅读。

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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注