历史上的今天
返回首页

历史上的今天

今天是:2025年03月29日(星期六)

2019年03月29日 | STM32F030低功耗之停机模式的进入和唤醒

2019-03-29 来源:eefocus

本人使用的是STM32F030F4P6进行从机低功耗的设计。设计需求是和主机进行状态同步,主机超时不从串口给回馈(主机关机了)从机进入停机模式等待串口来数据进行唤醒(主机开机了)。


1.停机模式介绍

STM32F030F4P6有三个低功耗模式。待机模式下(standby)功耗最低但是需要wake_up引脚上升沿或者RTC闹钟才能进行唤醒,在硬件已经设计好的基础上不满足本次软件设计的需求。然后考虑功耗第二低的停机模式(stop),刚好停机模式能够被任一外部中断包括串口中断进行唤醒。



2.停机模式的进入

停机模式的进入由数据手册可知,需要将SLEEPDEEP寄存器置1,PDDS寄存器置0,还要设置PWR->CR位。这些操作在库函数的PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);里面已经封装好了,直接调用即可。调用该函数时需要选择是WFI模式还是WFE模式,关于这两个模式的区别在数据手册中有介绍,个人理解的是WFI模式进入之后如果需要串口唤醒则需要将串口接收引脚配置为外部中断(之前是串口中断)。



封装的进入停机模式的函数,调用即可进入停机模式。


void enter_stop_mode(void)//进入停止模式

{

EXIT_UART_Init();//RX引脚配置为外部中断

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR , ENABLE);//开电源管理时钟

PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);//进入停机模式

}

配置串口RX引脚为外部中断,若没有此配置,串口中断将无法唤醒单片机。


void EXIT_UART_Init(void)

{

GPIO_InitTypeDef   GPIO_InitStructure; 

    USART_InitTypeDef  USART_InitStruct;

    NVIC_InitTypeDef   NVIC_InitStructure;

EXTI_InitTypeDef EXTI_InitStruct;

 

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);

 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//输入模式

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; 

    GPIO_Init(GPIOA, &GPIO_InitStructure);

 

NVIC_InitStructure.NVIC_IRQChannel = EXTI4_15_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

 

SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource10);

EXTI_InitStruct.EXTI_Line = EXTI_Line10;

EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿中断

EXTI_InitStruct.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStruct); 

}

3.停机模式的唤醒

停机模式下中断唤醒的程序入口在EXTI4_15_IRQHandler();函数里面。中断唤醒之后系统默认使用内部时钟,没有经过倍频,串口波特率也不正常,若唤醒之后希望程序继续运行需要重新初始化系统时钟和串口。本设计需要和主机保持状态一致,停机模式的唤醒都是因为主机开机了,从机也需要重启一下。所以一旦发生停机唤醒事件,直接软件复位,重新开始程序。


void EXTI4_15_IRQHandler(void)

{

  if(EXTI_GetITStatus(EXTI_Line10) != RESET)

  {

    EXTI_ClearITPendingBit(EXTI_Line7);

NVIC_SystemReset();//复位重启

  }

}

总结一下,如果需要使用串口唤醒停机模式,一定注意以下两点!


1.进入停机模式时一定需要将串口接收引脚定义为外部中断。


2.停机唤醒之后需要重新配置时钟和初始化串口。


推荐阅读

史海拾趣

Fedco_Batteries公司的发展小趣事

在快速发展的同时,Fedco_Batteries始终关注社会责任。公司积极参与公益事业,捐款捐物支持灾区重建、教育扶贫等项目。同时,公司还注重环保和可持续发展,致力于研发环保型电池产品,减少对环境的影响。这种关注社会责任的企业精神,让Fedco_Batteries在社会上树立了良好的形象。

德索五金(dosinconn)公司的发展小趣事
CALMIRCO公司的发展小趣事

随着技术实力的不断增强,CALMIRCO公司开始积极拓展国内外市场。公司通过参加国际电子展会、建立海外销售渠道等方式,逐渐将产品推向全球。同时,CALMIRCO公司还注重品牌建设,通过广告宣传、媒体报道等多种渠道提升品牌知名度和美誉度。这些举措使得CALMIRCO公司的产品在市场上获得了广泛认可,公司也因此成为电子行业的佼佼者。

ASPEED Technology公司的发展小趣事

2016年,ASPEED Technology宣布并购博通旗下的Emulex Pilot™远程服务器管理芯片业务。这一举措标志着ASPEED在服务器管理芯片领域取得了重要突破,为公司带来了先进的远程服务器管理技术和市场份额。通过并购,ASPEED不仅获得了强大的技术支持,还进一步巩固了其在全球服务器管理芯片市场的地位。

Corporation Soneet公司的发展小趣事

然而,随着市场竞争的加剧,Soneet也面临着来自同行的挑战。为了应对这些挑战,Soneet不断加强研发投入,提升技术创新能力。同时,公司还通过优化生产流程、降低成本等方式,提高产品的竞争力。这些措施使得Soneet能够在激烈的市场竞争中保持领先地位。

品赞(G-Switch)公司的发展小趣事
首先检查电源是否正常供电,线路是否连接良好。

问答坊 | AI 解惑

出售液晶屏

LQ035Q7DB02/3.5\"液晶屏,带触摸.有资料 KHS038AAEAA-G83-06全新现货. LM32019T带高压.有资料.                        知春电子城,2C020柜台 010-62620599、13269197072…

查看全部问答>

MAX743双输出集成稳压器

MAX743双输出集成稳压器…

查看全部问答>

vs2005一用wstring就link出错?

代码如下 void test(){     wstring wstr=L\"\"; } 复制代码 注释掉这个函数,全部正确(0错误0警告),取消注释,链接错误 正在编译... wince demo.cpp 正在链接... wince demo.obj : error LNK2019: 无法解析的外部符号 \"public: ...…

查看全部问答>

dhcp client 移植问题,大家指教。

现在在做一个东西,但是手头的montavista系统带的文件系统下没有dhcp client。所以想要把一个pc机上的源码编译后用到我们的系统上。 请问这个东西要怎么做?是否有哪位高人做过这个东西,可以指点一下啊。 已经编译了dhcp client,不知还要改哪 ...…

查看全部问答>

请问wince环境下如何通过gprs远程无线与exchange服务器同步?

windowsmobile下手机上有个内置的activesync客户端一直在运行的,wince下不知道有没有这个东西,如果有,使用方式和wm下是一样的吗?谢谢…

查看全部问答>

利用CCSV5.1自带的430ware的强大资源库学习MSP430

本人为在校大学生,以前一直用的是51.八月初的时候被老师拉过来参加“TI杯”模拟电子专题邀请赛,这才接触到了MSP430。学校发了三块开发板,一块launchpad、一块MSP430FR5739、一块是MSP430F5529。这些板子用着感觉都挺好的,只可惜赛后都被收回去 ...…

查看全部问答>

压力传感器和荷重传感器

各位高手,小弟想请教一个问题,因为碰到很多客户使用荷重传感器,想了解下荷重传感器和压力传感器的区别,谁能详细的介绍下?!谢谢…

查看全部问答>

想收一张STM32F429Discovery(已就购入,请勿跟帖)

希望坛友可以好心出一片给我,其实我想直接去x宝买。或者rs买,但是价格有点小贵,如果能有130-150左右包邮就好了。…

查看全部问答>