最近想做四轴飞行器,淘宝了个GY-86模块,用STM32硬件IIC读它,MUP6050能读到数据,但是HMC5883L读不到数据,仿真发现当发送HMC5883地址过去时候,模块一直没有应答。。。。。。不知道是什么问题?请大家帮忙看下。
原理图:
IIC代码
[mw_shl_code=c,true] I2C_GenerateSTART(I2C1, ENABLE); //产生 I2Cx 传输 START 条件
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); //检查最近一次I2C事件是否是输入的事件
I2C_Send7bitAddress(I2C1, 0x3C, I2C_Direction_Transmitter);//向指定的从 I2C 设备传送地址字,选择发送方向
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
I2C_SendData(I2C1, WriteAddr); //通过外设 I2Cx 发送一个数据
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_SendData(I2C1, pBuffer);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_GenerateSTOP(I2C1, ENABLE);//产生 I2Cx 传输 STOP 条件[/mw_shl_code]
程序一直停在
[mw_shl_code=c,true]while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));[/mw_shl_code]
后来我把0X3C换成0X1E和0X3D都不行。。。。。。
IIC基本配置代码
[mw_shl_code=c,true]void I2C_Mode_Config(void)
{
I2C_InitTypeDef I2C_InitStructure;
/* I2C 配置 */
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
/* 高电平数据稳定,低电平数据变化 SCL 时钟线的占空比 */
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStructure.I2C_OwnAddress1 = 0x0A;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable ;
/* I2C的寻址模式 */
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
/* 通信速率 */
I2C_InitStructure.I2C_ClockSpeed = 400000;
/* I2C1 初始化 */
I2C_Init(I2C1, &I2C_InitStructure);
/* 使能 I2C1 */
I2C_Cmd(I2C1, ENABLE);
}[/mw_shl_code]
不知道没有错误,我是先用同一段代码先读到MUP6050的值,然后改下从机地址去读HMC5883L,但是没有响应
{
delay_ms(1000);
PMU6050_WriteReg(MPU6050_RA_PWR_MGMT_1, 0x00);
PMU6050_WriteReg(MPU6050_RA_SMPLRT_DIV , 0x07);
PMU6050_WriteReg(MPU6050_RA_CONFIG , 0x06);
PMU6050_WriteReg(MPU6050_RA_ACCEL_CONFIG , 0x08);
PMU6050_WriteReg(MPU6050_RA_GYRO_CONFIG, 0x18);
PMU6050_WriteReg(MPU6050_RA_INT_PIN_CFG, 0x02);
PMU6050_WriteReg(MPU6050_RA_USER_CTRL, 0x00);
}[/mw_shl_code]
加上最后2句
---------------------------------
1、请问下怎么区分是否为辅助I2C总线,我只是能看出来他们都挂在I2C总线上,还有这个模块还有个MSS5611气压计,也是不是同为I2C辅助总线?
2、如果用第一种方法,6050有3个数据,HMC5883L也有3个数据,是按顺序读出?还是6050内部把这6个数据进行融合,再输出3个数据?
3、如果用第二种方法,STM手册I2C模式设置只有I2C_Mode_I2C、I2C_Mode_SMBusDevice、I2C_Mode_SMBusHost这3种模式,请问你指的passthrough模式是在哪里设置?
4、谢谢你的回答,我纠结好久了
一周热门 更多>