/* Test on I2C1 EV5 and clear it */ while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
/* Send slave Address for write */ I2C_Send7bitAddress(I2C1, RDA5800C_SLAVE_ADDRESS7, I2C_Direction_Transmitter);
/* Test on I2C1 EV6 and clear it */ // while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); //程序就死在这里了,我注释掉后又会死在后面的check语句里面
/* Send data */ while (Tx_Idx < BufferSize) { /* Send I2C1 data */ I2C_SendData(I2C1, I2C1_Buffer1_Tx[Tx_Idx++]);
/* Test on I2C1 EV8 and clear it */ // while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); //最后我这里面就只有一句了,就是不停的发数据,什么都不检查了,得到的示波器的波形就是一个byte的0,后接一个bit高位(也就是第九个脉冲,应该得到ack吧?)接着又是一个byte0,一个bit的高位,接着就是我的延时,然后就是1了,跟发0的情况一样,中间多出一个高位。。。。我想请问一下,这是为什么啊?是不是我没有收到应答,DR就又重新把我的数据发了一遍?还是别的原因啊?我的射频芯片是不是不用做配置,直接像我这里一样只要往里发数据就可以了?他的应答我怎么知道有没有呢?请指教。
2. SB: Start Bit (Master mode). 0: No Start condition 1: Start condition generated. – Set when a Start condition generated. – Cleared by software by reading the SR1 register followed by writing the DR register, or by hardware when PE=0 意思就是说:发送完Start后,master要读取SR1寄存器,然后往DR寄存器中写入从设备的地址,以此来清掉SB位。