文档库 最新最全的文档下载
当前位置:文档库 › ks103基于stm32的程序

ks103基于stm32的程序

u16 I2C_CSB_detect(u16 CSB_ADDRESS, u16 CSB_MODE){ u16 distance; //*((u8 *)0x4001080c) |=0x80; while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)); // Added by Najoua 27/08/2008 /* Send START condition */ I2C_GenerateSTART(I2C1, ENABLE); //*((u8 *)0x4001080c) &=~0x80; /* Test on EV5 and clear it */ while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); //已发送启动条件
/* Send EEPROM address for write */ I2C_Send7bitAddress(I2C1, CSB_ADDRESS, I2C_Direction_Transmitter);
/* Test on EV6 and clear it */ while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); //已发送从机地址 /* Clear EV6 by setting again the PE bit */ I2C_Cmd(I2C1, ENABLE);
/* Send the EEPROM's internal address to write to */ I2C_SendData(I2C1,2);
/* Test on EV8 and clear it */ while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); //第一个数据已发送 /* Send the EEPROM's internal address to write to */ I2C_SendData(I2C1, CSB_MODE); //测距方式0xb0
/* Test on EV8 and clear it */ while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); //第一个数据已发送 /* Send STRAT condition a second time */ I2C_GenerateSTART(I2C1, ENABLE); /* Test on EV5 and clear it */ while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); /* Send EEPROM address for read */ I2C_Send7bitAddress(I2C1, CSB_ADDRESS, I2C_Direction_Receiver); /* Test on EV6 and clear it */ while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)); /* While there is data to be read */
/* Test on EV7 and clear it */ if(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)) { distance = I2C_ReceiveData(I2C1); }
/* Enable Acknowledgement to be ready for another reception */ I2C_AcknowledgeConfig(I2C1, ENABLE); return distance;}

相关文档