| GPIO_InitTypeDef  GPIO_InitStructure; I2C_InitTypeDef  I2C_InitStructure;
 
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);              //使能LED时钟
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);  /** CODEC_I2C peripheral configuration */
 
 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
 GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
 GPIO_Init(GPIOB, &GPIO_InitStructure);
 
 
 I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
 I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
 I2C_InitStructure.I2C_OwnAddress1 = 0xC0;
 I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
 I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
 I2C_InitStructure.I2C_ClockSpeed = 1000000;  /** Enable the I2C peripheral */
 I2C_Init(I2C1, &I2C_InitStructure);
 I2C_Cmd(I2C1, ENABLE);
 
 }
 
 /*******************************************************************************
 * Function Name  : I2C_Configuration
 * Description    : EEPROM管脚配置
 * Input          : None
 * Output         : None
 * Return         : None
 * Attention                 : None
 *******************************************************************************/
 void Single_Write(u8 slaveAddr,u8 writeAddr,u8 pBuffer)
 {
 /* Send START condition */
 I2C_GenerateSTART(I2C1, ENABLE);          //发送开始信号
 /* Test on EV5 and clear it */
 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
 
 /* Send MPU6050 address for write */
 I2C_Send7bitAddress(I2C1, slaveAddr, I2C_Direction_Transmitter);          // 发送 MPU6050 地址、状态(写)
 /* Test on EV6 and clear it */
 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
 
 /* Send the MPU6050's internal address to write to */
 I2C_SendData(I2C1, writeAddr);                   //发送 MPU6050内部某个待写寄存器地址
 /* Test on EV8 and clear it */
 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
 
 /* Send the byte to be written */
 I2C_SendData(I2C1, pBuffer);                     //发送要写入的内容
 /* Test on EV8 and clear it */
 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
 
 /* Send STOP condition */
 I2C_GenerateSTOP(I2C1, ENABLE);          //发送结束信号
 }
 
 /*******************************************************************************
 * Function Name  : I2C_Configuration
 * Description    : EEPROM管脚配置
 * Input          : None
 * Output         : None
 * Return         : None
 * Attention                 : None
 *******************************************************************************/
 
 void Single_Read(u8 slaveAddr, u8* pBuffer, u8 readAddr, u16 NumByteToRead)
 {
 
 /* While the bus is busy */
 while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
 
 /* Send START condition */
 I2C_GenerateSTART(I2C1, ENABLE);
 /* Test on EV5 and clear it */
 while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
 
 /* Send MPU6050 address for write */
 I2C_Send7bitAddress(I2C1, slaveAddr, 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 MPU6050's internal address to write to */
 I2C_SendData(I2C1, readAddr);
 /* 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 MPU6050 address for read */
 I2C_Send7bitAddress(I2C1, slaveAddr, 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 */
 while(NumByteToRead)
 {
 if(NumByteToRead == 1)
 {
 /* Disable Acknowledgement */
 I2C_AcknowledgeConfig(I2C1, DISABLE);
 
 /* Send STOP Condition */
 I2C_GenerateSTOP(I2C1, ENABLE);
 }
 
 /* Test on EV7 and clear it */
 if(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED))
 {
 /* Read a byte from the MPU6050 */
 *pBuffer = I2C_ReceiveData(I2C1);
 
 /* Point to the next location where the byte read will be saved */
 pBuffer++;
 
 /* Decrement the read bytes counter */
 NumByteToRead--;
 }
 }
 
 /* Enable Acknowledgement to be ready for another reception */
 I2C_AcknowledgeConfig(I2C1, ENABLE);
 }
 
 
 
 
 |