STM32l151带MPU6050中断唤醒并发送数据到云平台

2019-09-09来源: eefocus关键字:STM32l151  MPU6050  中断唤醒  云平台

最近在调试STM32L151带mpu6050的中断唤醒的项目,下面写一下项目经历:


1.首先贴出我的主函数


int main(void)

 

SystemInit();

delay_init(72);  //初始化延时函数

 

MY_GPIO_AN();//全部 模拟输入

//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2

  Base_TIM6_Init();

uart_init(115200); //初始化串口波特率为115200

  SYS_RTCInit(60*5); //12h*/

RTC_WakeUpCmd(DISABLE);

ADC_SX_DMA_Config(); //初始化 四项电压采集 A 046

  GPIO_Setup(); //开机和电源引脚

LS_A9500_PWL;

  LS_A9500_KEYL;

  GpioState1 = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8);

C_Get_State();

 // MPU_Init_agin();

 

while(1)

{

if((RTC_flag==1)||QD_Wakeup_Flag==1||first_flag==1)

{

uart_init(115200); //初始化串口波特率为115200

  delay_ms(26);

    GPIO_Setup();//9500开关

LS_A9500_PWL;

    LS_A9500_KEYL;

if(Turn_ON_A9500())

{

int m=0;

if(gprs_init())

{  

MPUAGAIN:

     m++;

   MPU_Init_agin();

for(i=0;i<10;i++)

if(m>10)

break;

MPU_Get_Accelerometer(&aacx,&aacy,&aacz); //得到加速度传感器数据

MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz); //得到陀螺仪数据

//    imuUpdate(aacx, aacy, aacz, gyrox, gyroy, gyroz,x3, y3, z3,&quaNow);//姿态解算结果

lmd=32767/2; //计算 加速度计灵敏度

ax=aacx/lmd;  //x轴加速度

ay=aacy/lmd;

az=aacz/lmd;

 

pr=-aacx/sqrt(aacz*aacz+aacy*aacy); 

rr=aacy/sqrt(aacz*aacz+aacx*aacx);

 

pitch=((atan(pr)*180)/3.1415926); //俯仰角

roll=((atan(rr)*180)/3.1415926);//横滚角

 

   if(pitch==0||roll==0)

goto MPUAGAIN;

else break;

a = pitch*100;

c = roll*100;

 

b =(int)a;

if(b<0)

b=abs(b);

 

d=(int)c;

if(d<0)

d=abs(d);

 

USART0_TX_Buffer[18]=b>>8; //将b转化为16进制  并放在数组的28 、29两个字节内

USART0_TX_Buffer[19]=b;

 

USART0_TX_Buffer[20]=d>>8;

USART0_TX_Buffer[21]=d;

 C_Get_State();

if(RTC_flag==1)

  for(i=0;i<1;i++)

 {

    {                                         

        //free_UART0_Recv_Buffer();//清除串口2接收

       Send_to_Server();//上传数据到云平台 

       //free_UART0_Recv_Buffer();

    }

}  

 

if(first_flag==1)

{

    for(i=0;i<1;i++)

  {

 

        Send_to_Server();//上传数据到云平台

   }

}

if(QD_Wakeup_Flag==1)

   {

   for(i=0;i<1;i++)

{

Send_to_Server();//上传数据到云平台

}

  }

 

    } // if(gprs_init())

 

}//if(Turn_ON_A9500())

  RTC_flag=0;

  QD_Wakeup_Flag=0;

  first_flag=0;

}//if(RTC_flag==1|First_flag==1)

else if((0 == QD_Wakeup_Flag)&&(0 == RTC_flag)&&(0==first_flag)){

delay_init(72);  //初始化延时函数

MPU_Init();//mpu6050低功耗初始化

Turn_OFF_A9500();

mpu6050int_init();//外部中断初始化

RCC_Enter_Stop();//进入低功耗

Delay_ms(1000);

  

                 }

 }//大while

}//main

关键字:STM32l151  MPU6050  中断唤醒  云平台 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic473931.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:正点原子 第6讲 STM32芯片解读
下一篇:正点原子STM32F4外部中断实验

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM8l 进入低功耗之前配置
在做stm8L的小一个项目,由电池供电,当按键长按关机,系统进入停机模式,虽然系统运行的时候有十几毫安的电流消耗(还没使用RTC定时唤醒),但是在停机模式下电流消耗竟然还有1.33ma的电流,花了半天的时间找资料,看文档,在网上看到不少大牛能做到0.4ua,自己无论如何设置IO,外设都无补于事,停机模式下电流最低还有1ma。 最后只能将开机初始化的外设函数一个一个注释掉,包括ADC,DMA,beep,以及TIM4,最后发现只注释掉ADC的初始化函数,再进入停机模式,果然电流接近0,5ua,也就是说可能ADC模块在进入停机模式前的关闭设置不正确,之前的是这样的:void PerCLK_OFF(){  
发表于 2019-11-16
STM8L051低功耗实现
最近项目中需要用到门磁,用的STM8L051芯片。使用纽扣电池自然少不了要求低功耗节能省电。首先看下这款芯片的低功耗能力:halt模式下可以达到350nA,可以说是非常省电了。从Halt模式唤醒的时间也非常快,只需要5us。门磁的功能介绍:就是利用磁铁吸合干簧管之后,给单片机一个脉冲,分开后再产生一个脉冲。然后通过无线发射模块将状态发送出去。非常简单。实现思路:上电后进入Halt模式-->有按键或吸合IO变化,唤醒MCU-->发射状态-->完成后进入Halt模式,如此循环。补充,在进入Halt模式之前,要先做好一些前期设置,否则测量出来的电流会与理想值有偏差。主要是IO口的设置。1.空的引脚全部推挽输出高或低
发表于 2019-11-15
STM8L051低功耗实现
关于串口唤醒STM8L151低功耗HALT模式的方法——外部中断法
以前看到一款xx公司的低功耗产品,用的是STM8L151的MCU,无线模组是LORA或者NB模组,因为我选择用的另一款M0+核的芯片,所有也一直没有太多时间去研究那个产品究竟是怎么用串口唤醒M0核的MCU STM8L151的。M0+核的在低功耗处理上方便太多,串口可直接唤醒。想不明白在HALT模式下功耗为什么如此之低,因为在HALT模式下MCU是不支持串口唤醒的。后来通过试验,发现了其中奥秘:实现这个功能需要绕个弯弯。首先M0定义MCU HLAT时候只能通过外部中断或者RTC自动唤醒,所以一定是串口先设置成为了外部中断唤醒。核心思路是舍弃串口信息的前一段信息。串口唤醒HALT模式下的STM8L步骤如下:在进入HLAT之前,设置串口
发表于 2019-11-15
STM8L051xx Active-Halt mode(活跃停机模式)学习
则它的中断向量地址为(IRQ No。+2),如RTC的IRQ No.为4,则向量地址为4+2=6,在此要特别注意GPIO口的外部中断,STM8L是PB,PD全部的IO口有专门的中断向量地址EXTIB,EXTID,但是其他的IO口没有专门的中断向量地址,则根据不同的引脚,有EXTI0-EXTI7,假如PC1,它的中断向量地址则为EXTI1.因为这些没有区分具体的IO口,在确定具体为那个引脚时,需要使用查询法。即查询相应的引脚状态即可。#pragma vector=6__interrupt void RTC_IRQHandler(void){    static uint32_t RTC_Counter1Second
发表于 2019-11-15
STM8L051xx Active-Halt mode(活跃停机模式)学习
STM8L调低功耗方法
做低功耗产品主要把握一下几点:1、功能芯片能关电源的,关闭电源。2、能配置低功耗模式的芯片配置成低功耗模式。3、对于外部有上拉下拉电阻的引脚分别推挽输出高电平和低电平,一般电路中上拉电阻比较多(比如IIC的总线外部都有上拉的,按键上拉),没有上拉的引脚都推挽输出低电平。4、最后是关闭CPU指令。
发表于 2019-11-15
STM8L Active-halt模式下的低功耗调试
此模式下的低功耗与halt模式下的低功耗差不多,但Active-halt模式下多了个唤醒,而halt模式下是深睡,主频外设什么的全部都关掉了;Active-halt模式下,一样的首先要将没用到的GPIO全部输出低,其它用到的按要求配置即可,这个低功耗主要的就是GPIO的配置状态,及外设的功耗,其实也很容易就完成。还有最重要的一点,PWR_UltraLowPowerCmd(ENABLE);//超低功耗这句必须得有,不然不会到超低功耗。void RTC_Config(void){    //CLK_LSEConfig(CLK_LSE_ON);    CLK_LSICmd(ENABLE);//使能L
发表于 2019-11-15
小广播
何立民专栏 单片机及嵌入式宝典

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

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