因为初次接触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;
}
jinjie chen:
回复 xyz549040622:
很谢谢你,我才发现我的“ti”文件夹里面由这个“.c文件”,里面的函数就是可以直接用吧
xyz549040622:
回复 jinjie chen:
是的。TI有第三方库的,里面的库函数可以直接调用。
peng chen12:
回复 xyz549040622:
能说明一下具体怎么调用嘛?
user4998476:
回复 xyz549040622:
第三方库在哪里?
xyz549040622:
回复 user4998476:
C:\ti\TivaWare_C_Series-2.1.4.178\sensorlib
TIVA下这个文件夹下就有6050的库的。