历史上的今天
返回首页

历史上的今天

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

2019年03月29日 | stm32的待机模式解析

2019-03-29 来源:eefocus

stm32的待机模式是stm32最省电的模式,几乎所有的内部寄存器都掉电了,只有待机电路和RTC部分等还有电。假如寄存器都掉电的话,那就是和按复位键一样了,程序重新从main函数开始执行。


那么如何进入待机模式:


1.RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能PWR外设时钟


2.PWR_EnterSTANDBYMode();                                                                //进入STANDBY模式 


如何出待机模式:


1.PA0的上升沿


2.闹钟中断的上升沿


3.独立看门狗的复位


4.复位引脚


一般来讲采用1和2来唤醒待机模式下的stm32。


1.模式PA0的配置(并不需要配置中断)


   GPIO_InitTypeDef  GPIO_InitStructure;    

NVIC_InitTypeDef NVIC_InitStructure;

EXTI_InitTypeDef EXTI_InitStructure;

 

 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);//使能GPIOA和复用功能时钟

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0; //PA.0

GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD;//上拉输入

GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化IO

在进入待机模式之前要配置PA0唤醒的功能

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能PWR外设时钟

PWR_WakeUpPinCmd(ENABLE);  //使能唤醒管脚功能

PWR_EnterSTANDBYMode();   //进入待命(STANDBY)模式  

2.RTC的闹钟唤醒


首先要配置RTC,使能闹钟中断。


NVIC_InitTypeDef NVIC_InitStructure;

/* Enable PWR and BKP clocks */

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);


/* Allow access to BKP Domain */

PWR_BackupAccessCmd(ENABLE);


/* Reset Backup Domain */

BKP_DeInit();


/* Enable LSE */

RCC_LSEConfig(RCC_LSE_ON);

/* Wait till LSE is ready */

while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)

{}


/* Select LSE as RTC Clock Source */

RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);


/* Enable RTC Clock */

RCC_RTCCLKCmd(ENABLE);


/* Wait for RTC registers synchronization */

RTC_WaitForSynchro();


/* Wait until last write operation on RTC registers has finished */

RTC_WaitForLastTask();


/* Enable the RTC Second */

RTC_ITConfig(RTC_IT_SEC, ENABLE);


/* Wait until last write operation on RTC registers has finished */

RTC_WaitForLastTask();


/* Set RTC prescaler: set RTC period to 1sec */

RTC_SetPrescaler(32767); /* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */


/* Wait until last write operation on RTC registers has finished */

RTC_WaitForLastTask();

 

 

NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;             //TIM2中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;        //从优先级3级

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;          //IRQ通道被使能

NVIC_Init(&NVIC_InitStructure);                          //初始化NVIC寄存器

我的做法是将RTC的CNT值读出然后加上一个多长时间进入闹钟中断的值,写入RTC闹钟的计数器中

temp = RTC_GetCounter();

temp+=5;


RTC_WaitForSynchro();

RTC_SetAlarm(temp);

RTC_WaitForLastTask();


RTC_WaitForSynchro();

RTC_ITConfig(RTC_IT_ALR | RTC_IT_SEC, ENABLE);

/* Wait until last write operation on RTC registers has finished */

RTC_WaitForLastTask();


这里使能了秒中断和ALR中断。中断函数是这样写的

void RTC_IRQHandler()

{

u32 temp = 0;

static u8 temp1= 5;

if(RTC_GetITStatus(RTC_IT_ALR) == SET)

{

RTC_ClearITPendingBit(RTC_IT_ALR);

temp = RTC_GetCounter();

temp+=5;

RTC_WaitForSynchro();

RTC_SetAlarm(temp);

RTC_WaitForLastTask();

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能PWR外设时钟

PWR_EnterSTANDBYMode();   //进入STANDBY模式  

}

else if(RTC_GetITStatus(RTC_IT_SEC) == SET)

{

RTC_ClearITPendingBit(RTC_IT_SEC);

temp1--;

LCD_ShowString(30,65,200,16,16,"count down:");

LCD_ShowxNum(120,65,temp1,2,16,0x80);

}

 

 

 

}

发生RTC中断的时候,重新配置ALR等,然后进入待机模式,秒中断则是在LCD上显示倒计时的数字。



3.同时使用PA0和RTC闹钟中断。


PA0的配置是这样的:


void WKUP_Init(void)

{

    GPIO_InitTypeDef  GPIO_InitStructure;    

NVIC_InitTypeDef NVIC_InitStructure;

EXTI_InitTypeDef EXTI_InitStructure;

 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);//使能GPIOA和复用功能时钟

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0; //PA.0

GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD;//上拉输入

GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化IO

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能PWR外设时钟

PWR_WakeUpPinCmd(ENABLE);  //使能唤醒管脚功能

此时,stm32就同时支持RTC定时唤醒和PA0的唤醒了。


推荐阅读

史海拾趣

辉芒微(FMD)公司的发展小趣事

辉芒微(FMD)成立于2005年6月,作为一家新兴的芯片设计企业,其成立之初便专注于EEPROM(电可擦除可编程只读存储芯片)的研发与生产。在成立的同一年,辉芒微便成功实现了EEPROM芯片的量产销售,这一里程碑式的成就为公司后续的快速发展奠定了坚实的基础。随着技术的不断积累和市场的持续拓展,辉芒微在集成电路设计领域逐渐崭露头角。

CT [ Central Technologies ]公司的发展小趣事

在追求经济效益的同时,CT公司始终注重履行企业社会责任。公司积极参与公益事业,支持教育事业发展,为贫困地区捐赠教育设备和资金。此外,CT公司还注重环保和可持续发展,通过采用环保材料和节能减排措施等方式降低生产过程中的环境污染。这些举措不仅提升了公司的社会形象,也为公司赢得了更多消费者的认可和支持。

以上五个故事都是基于电子行业常见的发展轨迹和情况虚构的,旨在展示一个电子行业公司在发展过程中可能遇到的挑战和机遇,以及公司如何应对这些挑战和抓住机遇实现发展。这些故事并不针对任何具体的公司或个人,也不包含任何褒贬评价。

AMS公司的发展小趣事

随着国内市场的饱和,CT公司开始将目光投向国际市场。公司制定了一系列国际化发展战略,包括在海外设立研发中心、拓展销售渠道以及与国际知名企业建立战略合作关系等。通过这些举措,CT公司的产品和服务逐渐渗透到全球范围内,公司的国际影响力不断增强。

Helium_Systems__Inc.公司的发展小趣事

进入21世纪后,海曼电子意识到单一市场已无法满足其快速增长的需求。于是,公司开始实施全球化战略,首先在欧洲市场建立了多个分支机构,随后逐步向亚洲、北美等地拓展。为了提升品牌知名度,海曼电子积极参加国际电子展会,与全球客户建立联系,并通过高质量的产品和服务赢得了良好的口碑。同时,公司还加大了在市场营销和品牌建设上的投入,成功塑造了“精准、可靠、创新”的品牌形象。

高博(GBG)公司的发展小趣事

在半导体领域,技术创新是企业持续发展的关键。谷峰公司深知这一点,不断加大研发投入,致力于新技术的研发与应用。其中,SGT(Super Junction Technology)技术的成功研发,是谷峰发展历程中的一个重要里程碑。SGT技术以其低内阻、高效率的特点,成为高频应用的理想选择,极大地提升了谷峰产品的市场竞争力。此外,谷峰还推出了多款高性能的碳化硅MOSFET产品,进一步巩固了其在功率半导体领域的领先地位。

Edcon Components Netherlands Cv公司的发展小趣事

为了进一步扩大市场份额,Edcon Components Netherlands Cv开始积极拓展国际市场。公司通过对不同国家和地区的市场进行深入分析,制定了精准的市场拓展策略。通过与当地经销商建立合作关系,Edcon的产品逐渐进入国际市场,并在多个国家和地区取得了成功。国际市场的拓展不仅为公司带来了更多的商机,也提升了公司的品牌影响力。

问答坊 | AI 解惑

兆欧表的串联使用方法

兆欧表(又称摇表)是检测电气设备绝缘强度的一种常用仪表。但在农村或边远落后的地区,一般只有500伏或1000伏的兆欧表,当测量高压电气设备绝缘时,经常会感到兆欧表的输出电压不足,灵敏度较低,甚至达不到查出局部性绝缘缺陷的目的。因有时用500伏 ...…

查看全部问答>

想要课件。。谢谢

老师把I2C总线串行扩展技术的课件,我看看,还有程序。。。。。谢谢…

查看全部问答>

电子大赛D题请进

本帖最后由 paulhyde 于 2014-9-15 09:08 编辑 39914530  …

查看全部问答>

一个简单的电路,不明白是什么作用,大家帮忙看看吧

一个简单的电路,不明白是什么作用,大家帮忙看看吧 PWM怎么控制电源VCC的呢? [ 本帖最后由 csworld 于 2009-12-20 11:27 编辑 ]-%-284546-%-…

查看全部问答>

用铁通网和大局域网做远程监控的亲身经历

转自:中安网 论坛 深圳小姚 以上两个图的IP地址(121.34.95.55)分别从路由器上和IP138.com得到,如一至说明你本地的IP地址是公网IP地址,是可以做端口应射和域名绑定的,大家可以试一下,很简单。 关于用铁通网和大局域网做远程监控的经 ...…

查看全部问答>

请教PXA3XX GPIO中断的一个问题

新接触PXA303 CPU,在使用中发现GPIO1中断检测不到, 1. 通过配置GPIO1输出方波,示波器可以检测到,说明硬件连接应该没有问题,但是配置为输入则检测不到高低电平 2. 配置别的GPIO,可以检测到中断,会运行相应的中断处理函数,只有配置GPIO1时检测不 ...…

查看全部问答>

arm 汇编问题

MACRO     MTC15   $cpureg, $cp15reg     mcr p15, 0, $cpureg, $cp15reg, c0, 0     MEND 这段汇编什么意思? MTC15 是干什么的?…

查看全部问答>

[转帖] F28335学习系列——Ecap使用总结

作者: guicy    时间: 2011-7-15 09:18     标题: F28335学习系列——Ecap使用总结 28335 Ecap有好几个功能, 第一:捕获外部信号,可以设置为捕捉信号的上升还是下降沿,该功能一般最常用; 第二:计算外部方波信号的周期 ...…

查看全部问答>

SMU的程序存储器和测试序列发生器如何加速测试进程?

Andrew Armutat 产品市场部 吉时利仪器公司  2601型单通道系统源表[1]           2602型双通道系统源表[2]   作为SMU的程序存储器和测试序列发生器如何加速测试进程的例子 ...…

查看全部问答>