(7)void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data);
uint8_t I2C_ReceiveData(I2C_TypeDef* I2Cx);
发送数据和接收数据
(8)void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction);
发送从机地址(当然I2C_SendData也可以发送)
(9)I2C_CheckEvent(I2C_TypeDef* I2Cx, uint32_t I2C_EVENT);
检查应答位
四丶代码部分及解析(使用了MPU6050观察实验现象)
(一)I2C及MPU6050初始化部分
#include "stm32f10x.h" // Device header
#include "MPU6050_Reg.h"
#define MPU6050_ADDRESS 0xD0
void MPU6050_Init(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE); //开启GPIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //开启I2C时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; //设置为开漏复用输出(手册中要求)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIO
I2C_InitTypeDef I2C_InitStructure;
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; //I2C模式
I2C_InitStructure.I2C_ClockSpeed = 50000; //传输速度,最大不能超过400KHZ
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; //时钟占空比
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; //主机是否设置应答
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; //主机地址位数 7位或10位
I2C_InitStructure.I2C_OwnAddress1 = 0x00;