#include "stm32f10x.h" // Device header"
#include "OLED.h"
#include "Delay.h"
#include "inv_mpu.h"
#include "Serial.h"
#include "string.h"
#include "Servo.h"
#include "Motor.h"
#include "MPU6050_Exti.h"
#include "MPU6050.h"
float Pitch,Roll,Yaw;
int16_t GX, GY, GZ;
int main(void)
{
delay_init();
OLED_Init();
Serial_Init(); //串口初始化
Servo_Init(); //舵机初始化
Motor_Init(); //直流电机初始化
MPU6050_Exti_Init();//为MUP6050配置中断引脚PB12
MPU6050_DMP_Init(); //MUP6050 DMP库初始化
Servo_SetAngle(90);
Motor_SetSpeed(70);
while(1)
{
Serial_Printf("%.2f %.2f %.2f\r\n",Pitch,Roll,Yaw);
delay_ms(50);
OLED_ShowFloatNum(1, 1, Roll, 3, 2, OLED_8X16);
OLED_ShowFloatNum(1, 20, GY, 3, 2, OLED_8X16);
//OLED_ShowFloatNum(1, 40, Yaw, 3, 2, OLED_8X16);
OLED_Update();
}
}
void EXTI15_10_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line12) == SET) //判断是否是外部中断12号线触发的中断
{
MPU6050_DMP_Get_Data(&Pitch,&Roll,&Yaw);//获取MPU6050 DMP库的角度数据
MPU_Get_Gyroscope(&GX,&GY,&GZ); //获取MPU6050 原始角速度数据
EXTI_ClearITPendingBit(EXTI_Line12); //清除外部中断12号线的中断标志位
//中断标志位必须清除
} //否则中断将连续不断地触发,导致主程序卡死
}
问题时这样的:中断函数里有两个函数。第一个是获取DMP库的数据,第二个是获取陀螺仪原始的数据。如何我两个函数同时运行,第一个函数就获取不到数据,第二个函数可以获取到数据。如果我把第二个函数注释掉,第一个函数又能获取数据了。我参考别人平衡车的代码也是这样写的,可到了我这里就出现问题了,麻烦大神帮忙指点一下!
谢谢了!
|