使用该款编译器的原因mpu6050偏差太大了如果加上磁力计虽然会好点但是会受种种因素影响不确定性太大了。我在满足电赛官方的限制前提下找到了这款陀螺仪没有姿态解算芯片也是M0公司的。精度误差0.1。0零飘MSPM0高精度单轴陀螺仪驱动代码通过网盘分享的文件m0陀螺仪驱动.zip链接: https://pan.baidu.com/s/1zmwyOncI_yPr0MAFco7MbA?pwd9271 提取码: 9271发这篇文章原因如果你使用的编译器是ccs那你就应该没什么大问题因为厂家提供的文档手册就是ccs开发的。如果你用的是keil编译器并且按照陀螺仪官方的配置选项配下来你会发现你编译时0警告0报错但是下载就报这个错。如图那么这时候就会以为时芯片被锁了其实不然。问题这个是M0芯片问题不是锁芯片NO解决问题原因因为浮点数导致的我们需要将这个串口打印函数改成整形的输出。1打开CY_Z.C文件找到第237行将void CY_Z_PrintTelemetry(const CY_Z_Telemetry *telemetry)完全替换掉。替换如下//这个问题如果小数就卡死程序如果整数就不会//这个问题如果小数就卡死程序如果整数就不会 void CY_Z_PrintTelemetry(const CY_Z_Telemetry *telemetry) { char text[80]; int length; int angle telemetry-angle_deg 0 ? (int)telemetry-angle_deg : -(int)telemetry-angle_deg; int gyro telemetry-gyro_dps 0 ? (int)telemetry-gyro_dps : -(int)telemetry-gyro_dps; length snprintf(text, sizeof(text), CY_Z seq%u angle%ddeg gyro%ddps\r\n, telemetry-seq, angle, gyro); if (length 0) { CY_Z_Uart0WriteString(text); } }替换后你的程序大概率就烧入进去了如果你想要刚刚被我们舍弃的小数位那你只需要把拿到的数据扩大1000被倍这样就可以读到精确的数据了。主程序你们可以参考一下#include ti_msp_dl_config.h #include CY_Z.h #include OLED.h #include usart.h CY_Z_Telemetry telemetry; int car_yaw_angle 0; int main(void) { SYSCFG_DL_init(); CY_Z_Init(); CY_Z_SendZeroAngleFixed(); OLED_Init(); UART0_Init(); OLED_ShowString(1,1,angle:); int a1; while (1) { while(CY_Z_GetTelemetry(telemetry)) { car_yaw_angle (int)telemetry.angle_deg; } UART0_SendStr(angle:); UART0_SendInt(car_yaw_angle); UART0_SendStr(\r\n); OLED_ShowSignedNum(2,1,car_yaw_angle,5); } }