本帖最后由 SkyGz 于 2016-7-25 21:47 编辑
I2C库用的是正点原子里的, 用IO模拟的
void MPU6050_Read_Buffer(u8 reg_addr, unsigned char *Read, u8 num)
{
unsigned char i;
IIC_Start();
IIC_Send_Byte(MPU6050_Addr);
IIC_Wait_Ack();
IIC_Send_Byte(reg_addr);
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(MPU6050_Addr + 1);
IIC_Wait_Ack();
for(i = 0; i < (num - 1); i++)
{
*Read = IIC_Read_Byte(1);
Read++;
}
*Read = IIC_Read_Byte(0);
IIC_Stop();
}
====================================================================
u8 BUF_6050_buff[14];//6050所有测量参数
MPU6050_Read_Buffer(ACCEL_XOUT_H, BUF_6050_buff, 14);
//如果我不加入下面这些复位, 否则 经常读取的是0, 即时重新上电 也是0...... 连 ST_LINK仿真器时, KEIL LOAD程序后, 正常, 这时 断开仿真器供电线给板子重上电, 又全是0了...晕.
//今天之前一直用的是 硬件I2C正常的, 结果今天硬件I2C卡在I2C_CheckEvent里, 不行了, 一搜说硬件I2C有BUG, 也不知怎么回事, 之前好好的, 晕死, 不行我 就改成IO模拟, 却又出这样的问题了.........
//换MPU模块, 也是一样...
u8 cnt = 0;
for(u8 i = 0; i < 14; i++)
if (BUF_6050_buff == 0) cnt++;
if (cnt == 14)
{
MPU6050_WriteReg( PWR_MGMT_1, 0x01); //休眠状态
delay_ms(10);
MPU6050_WriteReg( PWR_MGMT_1, 0x00); //解除休眠状态
MPU6050_Read_Buffer(ACCEL_XOUT_H, BUF_6050_buff, 14);
};
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>