MPU6050配置中断读取数据

来源:互联网 发布:中电云集 阿里云 编辑:程序博客网 时间:2024/05/16 17:32

MPU6050相关寄存器写满数据后产生数据中断,主机检测外部中断用于读取数据,如此节省CPU资源



void MPU6050_Init(void){int i=0,j=0;//加入中断初始化EXIT_B5_Init();    //在初始化之前要延时一段时间,若没有延时,则断电后再上电数据可能会出错//没试过for(i=0;i<1000;i++)for(j=0;j<1000;j++);I2C_ByteWrite(0x00, MPU_PWR_MGMT1_REG);     //解除休眠状态I2C_ByteWrite(20 , MPU_SAMPLE_RATE_REG);    //陀螺仪采样率I2C_ByteWrite(0x06 , MPU_CFG_REG);I2C_ByteWrite(3<<3 , MPU_ACCEL_CFG_REG);  //配置加速度传感器工作在16G模式I2C_ByteWrite(0x18, MPU_GYRO_CFG_REG);     //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)//1001 1100  选择中断电平,逻辑电平为050us高查询立即自动清除I2C_ByteWrite(0x9c,MPU_INTBP_CFG_REG);I2C_ByteWrite(0x01,MPU_INT_EN_REG);//选择为数据中断}void EXIT_B5_Init(void){EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure;    GPIO_InitTypeDef GPIO_InitStructure; //GPIO设置 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能PORTB时钟GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //设置成下拉输入 GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB5//外部中断设置    //GPIOB5 中断线以及中断初始化配置   上升沿触发  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource5);  EXTI_InitStructure.EXTI_Line=EXTI_Line5;  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  EXTI_InitStructure.EXTI_LineCmd = ENABLE;  EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器//优先级设置NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;//使能按键key1所在的外部中断通道EXTI9_5_IRQHandler  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;//抢占优先级2,   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;//子优先级3  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道  NVIC_Init(&NVIC_InitStructure); }//外部中断B5服务程序 void EXTI9_5_IRQHandler(void){u8 sta;if(EXTI_GetITStatus(EXTI_Line5)!= RESET)  //B5{//I2C_BufferRead(u8* pBuffer, u8 ReadAddr, u16 NumByteToRead)I2C_BufferRead(&sta,MPU_INT_STA_REG,1);if (sta & 0x01){MPU6050ReadAcc(Acel);printf("加速度:%8d%8d%8d",Acel[0],Acel[1],Acel[2]);MPU6050ReadGyro(Gyro);printf("    陀螺仪%8d%8d%8d",Gyro[0],Gyro[1],Gyro[2]);MPU6050ReadTemp(&Temp);printf("    温度%d\r\n",Temp);}EXTI_ClearITPendingBit(EXTI_Line5); //清除LINE1上的中断标志位  }}




作者:Shaynerain

术业有专攻,闻道有先后

欢迎大神吐槽



1 0
原创粉丝点击