因为初次接触TM4c的I2C的固件库操作,不想用GPIO口模拟I2C操作,但是在使用的时候出现了一点问题,陀螺仪6050的数据完全读不出来,我6050只接了4根线,分别是VCC,GND,SCL,SDA,这里有部分代码
uchar data[8] = {0};
//设置时钟,为外部晶振,一分频,16MHZ
SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);
InitConsole();
//使用的是I2C0,所以所用的SCL和SDA是用PB2和B3
SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
GPIOPinConfigure(GPIO_PB2_I2C0SCL);
GPIOPinConfigure(GPIO_PB3_I2C0SDA);
GPIOPinTypeI2C(GPIO_PORTB_BASE,GPIO_PIN_3);
GPIOPinTypeI2CSCL(GPIO_PORTB_BASE,GPIO_PIN_2);
//false为100kbit/s,true为400kbit/s
I2CMasterInitExpClk(I2C0_BASE,SysCtlClockGet(),false);
//设置从机地址 false 向从机发送信号,true接收从机的信号
UARTprintf("the\n");
//使能从机模块,基地址为where_i2c
I2CSlaveEnable(where_i2c);
I2CMasterSlaveAddrSet(I2C0_BASE,where_i2c,true);
UARTprintf("the\n");
//空接收数据,确保接收到的第一个数据不会是空数据
I2CMasterControl(I2C0_BASE,I2C_MASTER_CMD_SINGLE_RECEIVE);
//等待从主机来的接收请求
/*
while(!(I2CSlaveStatus(I2C0_BASE)&I2C_SLAVE_ACT_TREQ))
{
}
*/
while(1)
{
// for(;i < 8;i++)
{
//读取一个数据,到数据寄存器中
// I2CSlaveDataPut(I2C0_BASE,data[i]);
//告诉主机读取数据了
I2CMasterControl(I2C0_BASE,I2C_MASTER_CMD_SINGLE_RECEIVE);
//等待数据发送完成
// while(!(I2CSlaveStatus(I2C0_BASE)&I2C_SLAVE_ACT_TREQ))
// {
// }
data[0] = I2CSlaveDataGet(I2C0_BASE);
UARTprintf("data[0] = %c\n",data[0]);
希望能得到解答,UART只是用来调试用的
}
SysCtlDelay(SysCtlClockGet()/3);
UARTprintf("-------------------------\n");
// i= 0;
}