本项目专注于使用STM32微控制器与MPU6050惯性测量单元传感器结合,实现精准的姿态检测和运动跟踪功能。适合于机器人、无人机等应用开发学习。
```c
int main(void) {
u8 t = 0, report = 1; // 默认开启上报功能
u8 key;
float pitch, roll, yaw; // 欧拉角数据
short aacx, aacy, aacz; // 加速度传感器原始数据
short gyrox, gyroy, gyroz; // 陀螺仪原始数据
short temp; // 温度
SystemInit();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 设置NVIC中断分组为抢占优先级2位,响应优先级2位
uart_init(115200); // 串口初始化波特率为115200
delay_init(); // 延时初始化
LED_Init(); // 初始化与LED连接的硬件接口
KEY_Init(); // 初始化按键
MPU_Init(); // 初始化MPU6050传感器
while (mpu_dmp_init()) {
printf(\n\rMPU6050 Error\n\r);
delay_ms(200);
}
while (1) {
key = KEY_Scan(0);
if (key == KEY0_PRES) { // 按下按键时切换上报状态
report = !report;
if (report)
printf(\n\rUPLOAD ON \n\r);
else
printf(\n\rUPLOAD OFF\n\r);
}
if (!mpu_dmp_get_data(&pitch, &roll, &yaw)) {
temp = MPU_Get_Temperature(); // 获取温度值
MPU_Get_Accelerometer(&aacx, &aacy, &aacz); // 获取加速度传感器数据
MPU_Get_Gyroscope(&gyrox, &gyroy, &gyroz); // 获取陀螺仪数据
if (report)
mpu6050_send_data(aacx, aacy, aacz, gyrox, gyroy, gyroz);
if (report)
usart1_report_imu(aacx, aacy, aacz, gyrox, gyroy, gyroz,
(int)(roll * 100), (int)(pitch * 100),
(int)(yaw * 10));
if ((t) == 0) {
printf(\n\rtemp:%f\n\r, temp / 100.0);
printf(\n\rpitch:%f\n\r, pitch * 10);
printf(\n\roll:%f\n\r, roll * 10);
printf(\n\ryaw:%f\n\r, yaw * 10);
t = 0;
}
}
t++;
}
}
```