引脚更改,以及相关寄存器的不同
F1
//IO方向设置
#define MPU_SDA_IN() {GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=8<<12;}
#define MPU_SDA_OUT() {GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=3<<12;}
//IO操作函数
#define MPU_IIC_SCL PAout(2) //SCL
#define MPU_IIC_SDA PAout(3) //SDA
#define MPU_READ_SDA PAin(3) //输入SDA
F4
//IO方向设置
#define SDA_IN() {GPIOA->MODER&=~(3<<(4*2));GPIOA->MODER|=0<<4*2;} //PB9输入模式
#define SDA_OUT() {GPIOA->MODER&=~(3<<(4*2));GPIOA->MODER|=1<<4*2;} //PB9输出模式
//IO操作
#define IIC_SCL PAout(7) //SCL
#define IIC_SDA PAout(4) //SDA
#define READ_SDA PAin(4) //输入SDA
其操控IO输出方向的寄存器不同,不可盲目移植
关于mpu6050自检不通过时的bug
主要原因:delay函数没有初始化,导致时序出现了些许错误,导致角加速度自检出现问题,最终自检不通过,注意mpu6050要初始化delay。
关于mpu6050零漂的解决
mpu6050零漂无法根本解决,但因为其变化趋于线性,可取一段时间的变化做线性回归,解算出关系曲线,对yaw角进行补偿,达到抑制零偏的目的。