想法思路:先写好I2C底层的GPIO的初始化和6个时序基本单元,也就是起始,终止,发送一个字节,接收一个字节,发送应答和接收应答。写好I2C的通信层后,再建立mpu6050.c和.h的文件,在这一层,我们将基于I2C通信的模块,来实现指定地址读,指定地址写,在实现 写寄存器对芯片进行配置,读寄存器得到传感器数据,最后在main.c中,调用MPU6050模块,初始化,拿到数据,显示数据。
首先MyI2c模块:
void MyI2C_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11; //SCL是PB10,SDA是PB11
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB, GPIO_Pin_10 | GPIO_Pin_11);
}
起始条件之前,先定义如下:可以简化代码,如需更换引脚,自行修改
void MyI2C_W_SCL(uint8_t BitValue)
{
GPIO_WriteBit(GPIOB, GPIO_Pin_10, (BitAction)BitValue);
Delay_us(10);
}
void MyI2C_W_SDA(uint8_t BitValue)
{
GPIO_WriteBit(GPIOB, GPIO_Pin_11, (BitAction)BitValue);
Delay_us(10);
}
uint8_t MyI2C_R_SDA(void)
{
uint8_t Bit