各位大侠,之前调试了很久,终于把我的写数据调通了,但是读数据到现在还没有调通,严重影响我的下面的工作,呵呵,十一还有计划,不想因此而耽误了,请各位大侠帮忙看看。 void write_data(u8 I2C1_Buffer_Tx[],int size) { int write_Idx=0; I2C_Cmd(I2C1, ENABLE); //使能I2C1 I2C_GenerateSTART(I2C1, ENABLE);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); I2C_Send7bitAddress(I2C1, RDA5800C_SLAVE_ADDRESS7, I2C_Direction_Transmitter); //发送地址 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
while (write_Idx < size) //发送数据 { I2C_SendData(I2C1, I2C1_Buffer_Tx[write_Idx++]); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); }
I2C_GenerateSTOP(I2C1, ENABLE); I2C_Cmd(I2C1, DISABLE); } 这个程序是可以跑通的,但是下面这个就不可以(当前前面我的配置都有的) void read_data(int readsize,u8 I2C1_buffer_Rx[]) { int read_Idx=0; I2C_Cmd(I2C1, ENABLE); I2C_GenerateSTART(I2C1, ENABLE);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); I2C_Send7bitAddress(I2C1, RDA5800C_SLAVE_ADDRESS7, I2C_Direction_Receiver); delay_ms(waittime); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)); I2C_AcknowledgeConfig(I2C1, ENABLE);
while(readsize) { if(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)) { if(readsize == 2) { I2C_AcknowledgeConfig(I2C1, DISABLE); }
if(readsize == 1) { I2C_GenerateSTOP(I2C1, ENABLE); } I2C1_buffer_Rx[read_Idx] = I2C_ReceiveData(I2C1);
read_Idx++; readsize--; delay_ms(waittime); } } } 读数据的时候有一个问题,就是我发完地址后数据线一直处于低电平状态,地址是正确的,有应答的,但是接下来就有18个脉冲(我猜想是发了一次没有应答又重新发一次)这个时候也有数据,但是完全不对,此后数据线就是一直处于高电平状态,再也没有数据发过来了,各位大侠帮我看看是不是我的程序出了什么问题或是时序什么的不对或是什么地方不对,帮帮忙哦。多谢多谢了。
|