求助啊!I2C和MPU6050一直出不来结果

2019-07-21 18:49发布

这下面是我的程序    求帮我看看啊



void i2cinit()
{
        SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0);
  GPIOPinConfigure(GPIO_PB2_I2C0SCL);
  GPIOPinConfigure(GPIO_PB3_I2C0SDA);
        GPIOPinTypeI2CSCL(GPIO_PORTB_BASE, GPIO_PIN_2);
  GPIOPinTypeI2C(GPIO_PORTB_BASE, GPIO_PIN_3);
        GPIOPadConfigSet(GPIO_PORTB_BASE,GPIO_PIN_2,GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPU);
  GPIOPadConfigSet(GPIO_PORTB_BASE,GPIO_PIN_3,GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_OD);
        I2CMasterInitExpClk(I2C0_BASE, SysCtlClockGet(), false);
        I2CMasterEnable(I2C0_BASE);
}
void write(uint8_t DevAddr,uint8_t RegAddr,uint8_t writedata)
{
        I2CMasterSlaveAddrSet(I2C0_BASE, DevAddr, false);
        I2CMasterDataPut(I2C0_BASE,RegAddr);
        while(I2CMasterBusy(I2C0_BASE)){}
        I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_START);
        I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_SEND);
        while(I2CMasterBusy(I2C0_BASE)){}
  I2CMasterDataPut(I2C0_BASE, writedata);
        I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_START);
        I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_SEND);
  while(I2CMasterBusy(I2C0_BASE)){}
        I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH);
        i2cinit();
}
uint8_t read(uint8_t DevAddr,uint8_t RegAddr)
{
int data;
        I2CMasterSlaveAddrSet(I2C0_BASE, DevAddr, false);
        I2CMasterDataPut(I2C0_BASE,RegAddr);
        while(I2CMasterBusy(I2C0_BASE)){}
        I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_START);
        I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_SEND);
        while(I2CMasterBusy(I2C0_BASE)){}
        I2CMasterSlaveAddrSet(I2C0_BASE, DevAddr, true);
        I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_RECEIVE_START);
        I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE);
  while(I2CMasterBusy(I2C0_BASE)){}
        data= I2CMasterDataGet(I2C0_BASE);
        I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_RECEIVE_FINISH);
        i2cinit();
        return data;
}
void mpuinit()
{
        SysCtlDelay(100* (SysCtlClockGet() / 3000));
        write(0x50,PWR_MGMT_1, 0x80);
        SysCtlDelay(100* (SysCtlClockGet() / 3000));
        write(0x50,PWR_MGMT_1, 0x01);
        write(0x50,SMPLRT_DIV, 0x07);
        write(0x50,CONFIG, 0x06);
        write(0x50,GYRO_CONFIG, 0x18);
        write(0x50,ACCEL_CONFIG, 0x00);
}
int
main(void)
{
        init();
        i2cinit();
        InitConsole();
        mpuinit();
        while(1){
        UARTprintf("%o ",read(0x50,0x68));
  delay(500);}}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
bush0104
1楼-- · 2019-07-23 04:36
 精彩回答 2  元偷偷看……
bush0104
2楼-- · 2019-07-23 05:09
1223657347 发表于 2016-7-28 10:45
楼主可以参考我调通过的I2C的代码(TM4C123GH6PM)

My i2c的头文件有吗大哥
1223657347
3楼-- · 2019-07-23 07:32
本帖最后由 1223657347 于 2016-7-28 13:19 编辑
bush0104 发表于 2016-7-28 11:44
My i2c的头文件有吗大哥
  1. /**
  2.   ******************************************************************************
  3.   * [url=home.php?mod=space&uid=288409]@file[/url]    MyI2C.h
  4.   * [url=home.php?mod=space&uid=187600]@author[/url]  KEN
  5.   * [url=home.php?mod=space&uid=895143]@version[/url] V1.0
  6.   * [url=home.php?mod=space&uid=212281]@date[/url]    2015年6月21日
  7.   * [url=home.php?mod=space&uid=247401]@brief[/url]         My Inter-Integrated Circuit, IIC相关函数的接口
  8.   ******************************************************************************
  9.   * @attention
  10.   *
  11.   * 本固件仅供参考,为客户提供产品的编码信息,以便节省客户时间。由该固件的使用而
  12.   * 造成产品上的损失的,Ks'P概不承担直接或间接的责任。
  13.   *
  14.   * <h2><center>&copy; COPYRIGHT 2015 Ks'P</center></h2>
  15.   ******************************************************************************
  16.   */
  17. #ifndef __MYI2C_H
  18. #define __MYI2C_H

  19. /********I2C Pin***********
  20. *        PA6                ->        I2C1_SCL
  21. *        PA7                ->        I2C1_SDA
  22. *************************
  23. */

  24. #define EEPROM_Addr                        0xA0

  25. void MyI2C_WaitDeviceForStandBy(uint8_t DeviceAddr);

  26. void MyI2C_WriteReg(uint8_t DeviceAddr, uint32_t RegAddr, uint8_t *wbuff, uint32_t LenOfReg, uint32_t LenOfBuff);
  27. void MyI2C_ReadReg(uint8_t DeviceAddr, uint32_t RegAddr, uint8_t *rbuff, uint32_t LenOfReg, uint32_t LenOfBuff);

  28. #endif
复制代码
bush0104
4楼-- · 2019-07-23 11:18
1223657347 发表于 2016-7-28 11:49

读取出来的数据是放在哪里的,大哥
1223657347
5楼-- · 2019-07-23 12:00
本帖最后由 1223657347 于 2016-7-28 12:18 编辑
  1. #define MPU6050_ADDR                                                0xD0
  2. #define MPU6050_O_PWR_MGMT_1                                0x6B // Power management 1 register
  3. #define MPU6050_PWR_MGMT_1_DEVICE_RESET                0x80 // Device reset

  4. #define MPU6050_O_ACCEL_XOUT_H                                0x3B // X-axis acceleration data MSB register

  5. uint8_t reg_temp;
  6. uint8_t raw_data[14];

  7. reg_temp = MPU6050_PWR_MGMT_1_DEVICE_RESET;
  8. MyI2C_WriteReg(MPU6050_ADDR, MPU6050_O_PWR_MGMT_1, &reg_temp, 1, 1); //设备复位

  9. MyI2C_ReadReg(MPU6050_ADDR, MPU6050_O_ACCEL_XOUT_H, raw_data, 1, 14); //读原始数据
复制代码

随手写了几行,再不会用我就实在没办法了

bush0104
6楼-- · 2019-07-23 13:23
1223657347 发表于 2016-7-28 11:49

能不能传一个你读取写入的例子我看一下,谢谢了,我这学完51就用这个,才三四天自己学,确实搞不明白啊。。。

一周热门 更多>