野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6348|回复: 1

只能读取加速度、三轴、温度数据寄存器一次,之后都读不到??

[复制链接]
发表于 2017-8-26 16:11:09 | 显示全部楼层 |阅读模式
只能读取一次数据寄存器

u8
u8g_i2c_read_buf( u8 u8t_i2c_slaveaddr, u8 u8t_reg_addr, u8 *u8t_buf, u8 u8t_buf_len )
{       
        u8 u8t_ret = 0;
        u8 i = 0;
       
        /*------------------------- send read register address -------------------------*/
        /* wait i2c idle */
        while( I2C_GetFlagStatus( I2C1, I2C_FLAG_BUSY ) == SET );
       
        /* start signal */
        I2C_GenerateSTART( I2C1, ENABLE );
       
        /* check EV5 , read register SR1->clear EV5 */
        while( I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_MODE_SELECT ) == ERROR );
       
        /* send slave address */
        I2C_Send7bitAddress( I2C1, (u8t_i2c_slaveaddr << 1), I2C_Direction_Transmitter );
       
        /* check EV6 , read register SR1 and SR2->clear EV6 */
        while( I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED ) == ERROR );
       
        /* check EV8_2 , read register SR1 and SR2->clear EV8_2 */
        //while( I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED ) == ERROR );
        /* check EV8 , read register SR1 and SR2->clear EV8 */
        //while( I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTING ) == ERROR );

        /* send register address */
        I2C_SendData( I2C1, u8t_reg_addr );
       
        /* check EV8_2 , read register SR1 and SR2->clear EV8_2 */
        while( I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED ) == ERROR );
        /* check EV8 , read register SR1 and SR2->clear EV8 */
        //while( I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTING ) == ERROR );

       
        /*----------------------------- read register data -----------------------------*/
        /* start signal */
        I2C_GenerateSTART( I2C1, ENABLE );
       
        /* check EV5 , read register SR1->clear EV5 */
        while( I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_MODE_SELECT ) == ERROR );
       
        /* send slave address */
        I2C_Send7bitAddress( I2C1, (u8t_i2c_slaveaddr << 1), I2C_Direction_Receiver );
       
        /* check EV6 , read register SR1 and SR2->clear EV6 */
        while( I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED ) == ERROR );
       
        if ( u8t_buf_len == 1 )
        {
                /* if external process */
       
        }else
        {
                for( i=0; i<(u8t_buf_len-2); i++ )
                {
                        /* check EV7 */
                        while( I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED ) == ERROR );                   //第2次,卡死在这
               
                        u8t_buf = I2C_ReceiveData( I2C1 );
                       
                }
               
                /* check EV7 */
                while( I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED ) == ERROR );
               
                u8t_buf = I2C_ReceiveData( I2C1 );
        }
       
        /* Disable Acknowledgment */
        I2C_AcknowledgeConfig( I2C1, DISABLE );

        /* stop signal */
        I2C_GenerateSTOP( I2C1, ENABLE );
       
        /* check EV7 */
        while( I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED ) == ERROR );
       
        u8t_buf = I2C_ReceiveData( I2C1 );
       

        return u8t_ret;

}       


****************************************************************
另外一个问题,温度的解析不太对
代码:
        u8  u8t_mpu6050_buf[14];

        /* Temperature in degrees C =  (TEMP_OUT_Register_Value as a signed quantity)/340 + 36.53  */
        f32g_mpu6050_temp = (f32)( ( (u16)u8t_mpu6050_buf[6] << 8) | (u16)u8t_mpu6050_buf[7] );
        f32g_mpu6050_temp = ( f32g_mpu6050_temp/340.0) + 36.53 ;

现象: 764F975653FB46F599DD2D87593C504F.jpg





回复

使用道具 举报

发表于 2017-8-26 18:32:00 | 显示全部楼层
有例程直接参考就好啦
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-2 01:14 , Processed in 0.066853 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表