TI中文支持网
TI专业的中文技术问题搜集分享网站

IIC配置连续接受2个字节数据

TM4C123GH6PM

请问这样配置用问题吗?

怎么感觉采集到的数据有点怪?

/******************************* IIC *************************************////PORT : PA6–>SCL                                                         //
//       PA7–>SDA                                                         //
//*************************************************************************//

void I2C_init(void)//I2C初始化
{  SysCtlPeripheralEnable( SYSCTL_PERIPH_I2C1);//使能I2C模块
  SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOA);//使能对应的I/O模块
   GPIOPinConfigure(GPIO_PA6_I2C1SCL);//配置相应的I/O管脚作为SCL/SDA
  GPIOPinConfigure(GPIO_PA7_I2C1SDA);
  GPIOPinTypeI2CSCL(GPIO_PORTA_BASE,GPIO_PIN_6);
  GPIOPinTypeI2C(GPIO_PORTA_BASE,GPIO_PIN_7);
  I2CMasterInitExpClk(I2C1_BASE,SysCtlClockGet(),true);//主机模式配置:频率80MHz=80 000 000,400kbp
  I2CMasterEnable(I2C1_BASE);//主机使能
}

int I2CRead(uint8 DevAddr,uint8 RegAddr)//写从机地址,寄存器地址,数据读取函数
{
      static int i2c_data=0;
      char i2c_getdata[2];
      uint8 i;
      I2CMasterSlaveAddrSet(I2C1_BASE, DevAddr, false);//与主机对应的从机地址设置,发送数据模式
      I2CMasterDataPut(I2C1_BASE, RegAddr);//发送一个字节的从机寄存器地址
      //while(I2CMasterBusy(I2C0_BASE));
      I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START);//主机突发起始
      //I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_SEND);//主机单次发送
      while(I2CMasterBusy(I2C1_BASE));//等待总线空闲
      I2CMasterSlaveAddrSet(I2C1_BASE, DevAddr, true);//与主机对应的从机地寄存器址设置,接受数据模式
      I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_START);//主机突发接受起始
      while(I2CMasterBusy(I2C1_BASE));//等待总线空闲
      for(i=0;i<2;i++)//接受两个字节数据
      {
        i2c_getdata[i]= I2CMasterDataGet(I2C1_BASE);//读取主机接受到的一个字节数据
        if(i<1)//如果接受字节<2,主机继续接受
          I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_CONT);
        else//反之,结束接受
        {
          I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_FINISH);
          while(I2CMasterBusy(I2C1_BASE));//等待主机空闲
          I2C_init();//方便下一次数据接受
        }
      }
      i2c_data=((int)i2c_getdata[1]<<8|i2c_getdata[0]);//2个字节数据转化为一个字的数据
      return i2c_data;//返回接受到数据
 
}

xyz549040622:

配置没什么问题呀。感觉怪怪的是出现什么情况呢,一般来说只要I2C可以正常采集数据,就是程序流程的配合问题了。由于无法拿到全部代码,无法进一步判断。

kqian0327:

你好,

配置看起来是没有问题的。

你IIC硬件的上拉电阻用的是多少欧姆的?

赞(0)
未经允许不得转载:TI中文支持网 » IIC配置连续接受2个字节数据
分享到: 更多 (0)