×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-09-02 发布时间:
|

最近在调试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



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
用Atmega 16单片机驱动字符型液晶显示芯片