这几天在调STM32+MPU6050实现   低功耗唤醒功


功能描述: 

1.  平时没有数据的时候,mcu处于 stop模式下,

2.  利用RTC实现定时唤醒,

3.以上功能中已经实现 mcu低功耗唤醒      及RTC定时唤醒。


下一步要尝试   mpu6050 有数据时唤醒单片机,平时单片机处于低功耗状态


如果有朋友也在做  mpu6050低功耗唤醒单片机的功能希望能够一起交流。


这里附上qq :1812669090  如果 要低功耗  和定时唤醒的代码欢迎和我联系


首先说一下STM32低功耗模式


这张表意思看一下就行,我这里用的是停止模式,理由很简单,任一中断都能唤醒,只不过唤醒后的配置相对待机模式要麻烦一点。


那么,第一个问题来了  我们的单片机如何才能进入到低功耗?这个时候,你应该考虑一个问题,在什么位置进入低功耗?这个需要根据你的项目需求是什么,如果你的项目需要单片机一上来进入低功耗,那就把 进入低功耗的指令放在main函数的最前面,当然这种情况几乎是不存在的因为我们在进入低功耗之前  肯定要做一些初始化配置。好了,接下来切入正题进入低功耗。在这之前你应该做好 


RCC_Enter_Stop();

这个函数里面封装了进入低功耗的指令,是我自己写的,我们来看一下函数里面的内容:


void RCC_Enter_Stop(void)

{

    

// RCC_PLLCmd(DISABLE); //关闭时钟

  MY_GPIO_AN();//将没有用的IO设置为  模拟输入模式

RTC_ClearFlag(RTC_FLAG_WUTF);//将RTC唤醒中断清除 

 

  Delay_ms(500);

/* Enable Wakeup Counter */

    RTC_WakeUpCmd(ENABLE);//在进入低功耗之前首先 要设置自己的唤醒源

    //这个不一定是RTC 要依据自己的唤醒源

 

    /* Enter Stop Mode */

    PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);//重点来了这个就是进入STOP

//模式的指令   这个函数是库函数,  咱们不用管

 

    /* Enable Wakeup Counter */

  //  RTC_WakeUpCmd(DISABLE);  //关闭RTC的计数器 为什么? 应为之后要对他进行配置 配置完成之

//后再去开启

    

    /* After wake-up from STOP reconfigure the system clock */

    /* Enable HSE */

    RCC_HSEConfig(RCC_HSE_ON);

//将外部32.768KHZ的外部时钟打开,因为在进入低功耗之后时钟被切换

//成了内部低频时钟, 所以想要让单片机回到正常工作模式 必须要从新打开时钟

   

 /* Wait till HSE is ready */

    while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET)

    {}   //等待时钟稳定

    

    /* Enable PLL */

    RCC_PLLCmd(ENABLE);

    

    /* Wait till PLL is ready */

    while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

    {}

    

    /* Select PLL as system clock source */

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    

    /* Wait till PLL is used as system clock source */

    while (RCC_GetSYSCLKSource() != 0x0C)

    {}

}

这个我要说明一下,


1。将IO口设为  模拟输入模式,这里是最关键的,因为直接牵扯到你的硬件电路。我之前就吃了这个的亏,IO口设置没对,功耗一直在200uA一直下不来。


为什么?


1.硬件 ,可能你的板子上连了一大堆没用的器件,如果你的功能中没有用到这些器件最好把他们去掉。当然你要会看原理图别拆错而导致板子无法工作。


2.IO口状态,这里要说的并不是所有的IO口都要设为模拟,而是将没用到的IO口设置为模拟模式。如果IO口在电路中做了上拉或者下拉,那么你在进入低功耗之前就必须将IO口的状态设置为与硬件相同的模式(该上拉的上啦,该下拉的下拉),这里我把我项目中对IO口的操作里出来希望能有所启发。


void MY_GPIO_AN(void)

{

 

GPIO_InitTypeDef  GPIO_InitStructure;

// GPIO_DeInit(GPIOA);

// GPIO_DeInit(GPIOB);

// GPIO_DeInit(GPIOC);

 

 

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOB|RCC_AHBPeriph_GPIOC, ENABLE);

  

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_11|GPIO_Pin_8|GPIO_Pin_9|

GPIO_Pin_10|GPIO_Pin_12|GPIO_Pin_15|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; //

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

 

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_12|GPIO_Pin_13|

GPIO_Pin_14|GPIO_Pin_15|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_9|GPIO_Pin_0|

GPIO_Pin_1|GPIO_Pin_10|GPIO_Pin_11;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; //

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_ResetBits(GPIOB,8);

GPIO_ResetBits(GPIOB,2);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; //

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

GPIO_Init(GPIOC, &GPIO_InitStructure);

   

}

这段代码不再一一解释其实就是,我这里只是将没有用到的IO口设置为了模拟输入模式。


今后还会更新RTC配置低功耗唤醒功能。

关键字:mpu6050  STM32  休眠唤醒  低功耗 引用地址:mpu6050 +STM32 休眠唤醒问题+低功耗

上一篇:在keil (MDK)中添加 STM32型号
下一篇:串口控制LED点亮stm32中断 跑马灯

推荐阅读

“我们相信,人工智能(AI)在现阶段并不是要取代医生。在诊断过程中,AI能为医生提供参考,提高医生的诊断正确率,对医疗行业来讲,这就是巨大的进步。”9月6日,在腾讯优图和《科学》系列期刊联合举办的首届计算机视觉峰会上,腾讯优图实验室总经理贾佳亚强调了AI在医疗中的角色——辅助,而不是替代。去年11月,科技部提出依靠腾讯建设医疗影像国家新一...
随着金融科技迅猛发展,软银愿景基金正加快相应的产业投资布局。 根据报道,软银集团旗下的愿景基金在公开市场面临极大挑战,已投资的新创公司上市后表现将影响到该公司1000亿美元的投资是否能够成功,且CEO孙正义或许要重新规划未来愿景基金的投资重点。愿景基金投资的金额及速度都十分快,目前已经花费超过700亿美元的金额投资新创公司,大部分受惠公司...
合适的就是最好的,这是选择万用表的第一要素。例如你平时只是用万用表测量电路的通断,并且要时常带在身边,那就可以选择一个没有电流测量功能的、携带方便的万用表。再比如你的工作领域对功耗非常敏感,往往要测量uA级别的电流,那你就需要买一个电流测量精度高、能够测量uA级别电流的万用表。目前大家几乎都用数字万用表了,指针式万用表已经很少用了,...
大家好, ZDS2022示波器提供了SD总线的触发与解码功能,其中包括了SD_SD和SD_SPI两种模式。今天和大家来分享下SD_SD模式的解码操作。按下【Decode】键,将解码类型设为SD_SD,打开协议触发,按下协议参数软键,可对总线触发相关内容进行设置,时钟通道设为通道1,命令信源设为通道2,总线类型可以选择MMC或SD,我们设置总线类型为SD。触发模式包括开始位...

史海拾趣

问答坊 | AI 解惑

谁能给我推荐几本关于嵌入式开发的书籍

各位大哥,前辈  我是嵌入式专业的学生,不知道看哪些书,希望大家能够给我推荐几本,谢谢了…

查看全部问答∨

烦啊,还是串口问题

打印机能收到串口发过去的数据,用打印机的Hex Dump看打印机收到的16进制数确认打印机是收到正确的数据 但咋就收不到打印机发回来的数据呢 用PC给打印机发指令,能正常收到打印机返回的数据         PrintASCII68(0,3,"2. ...…

查看全部问答∨

找USB驱动开发和简单硬件开发的硬件人员

各位,我正在做一个项目,需要有经验的您参与:   (1)USB驱动开发。   (2)普通电话机硬件。   (3)地点:上海   需要有丰富经验,酬金面谈,您如果需要挣外快,请和我联系:13818802872。  ...…

查看全部问答∨

MCU的伴侣 – Ramtron的FM31系列产品

MCU的伴侣 – Ramtron的FM31系列产品 注:本文档只对FM31系列做一个简单说明 Ramtron的Fm31XX产品是Ramtron最有竞争力的产品系列,产品包含4K-256K的铁电存储器,精度为+2.17PPM的RTC(每天误差24*60*60*2.17/100 0000=0.187488秒,每月5.62464秒), ...…

查看全部问答∨

用GPRS进行PPP的过程中碰到问题

我目前使用的是SIMCOM300的GPRS,当LCP协商好PAP后,总是验证不通过,希望各位大侠能帮我找一下原因,下面是我协商过程的数据! 接收数据(来自ISP) 7E FF 7D 23 C0 21 7D 21 7D 22 7D 20 7D 3C 7D 21 7D 24 7D 26 40 7D 23 7D 24 C0 2 ...…

查看全部问答∨

我写的tim计数器不准

写了个精确延时的计时器,精度10us(因为定时器16位), 调用参数为1000000的结果是大概600ms, 差距很大啊,不知道是啥原因。#define DELAY_TIMER        TIM1static unsigned&n ...…

查看全部问答∨

SD卡复位成功,可是初始化收不到00,希望版主帮忙

大致代码如下,用的是Znfat的代码,复位成功了,初始化不行。请大家帮忙看看。 #include \"STC12C5A32S2.H\"#define DELAY_TIME 10#define TRY_TIME 200void SD_spi_write(unsigned char x) {    _dat=x;  SD_SI=_dat7; SD_SCL=0; ...…

查看全部问答∨

我抢发第二贴:Hercules的意思

看到新模块来了,凑上热闹哈: Hercules的汉语解释为: Hercules   [\'hə:kjuli:z] n.大力英雄,力士,武仙座 名词 n. [男子名] 赫尔克里士。来源于拉丁语,希腊、罗马神话中的大力神 唉以前我怎么没听说过。看来我OUT了。 [ ...…

查看全部问答∨

【抢楼有礼】学DSP-Sitara精品课程,晒成绩!(什么时候开始第二期)

【抢楼有礼】学DSP-Sitara精品课程,晒成绩! 第一期的获奖名单已经公布,奖品已经发出,什么时候开始第二期啊,期待中啊…

查看全部问答∨

在本论坛下载的文件为什么变成只有十几K?

明明的几M的PDF或者压缩文件,可是一下下来就只有10几K了。我用的是QQ旋风下载的。请问各位是怎么回事啊?…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved