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硬件的上拉电阻用的是多少欧姆的?