stm32读取多个mpu9250的数据出现问题

我需要用stm32读取10个Mpu9250的数据,因为mpu9250中的磁力计的I2C地址无法改变,所以我用16路模拟开关CD74HC4067来轮询读取各个9250的数据,我是共用各个9250的SDA线,让HC4067分别控制10个9250的SCL线,通过分别置16路模拟开关的地址选择引脚的高低电平来轮流和每个9250通信,但是测试后发现,这10个9250的数据是串在一起的。也就是说无论我选择接通哪一路9250,但是动其他的9250这一路9250的数据也会有变化,不知道有没有大佬能指导我一下该怎么办?

     GPIO_SetBits(GPIOA,GPIO_Pin_12);
     GPIO_ResetBits(GPIOA,GPIO_Pin_13);
     GPIO_ResetBits(GPIOA,GPIO_Pin_14);
     GPIO_ResetBits(GPIOA,GPIO_Pin_15);
     delay_ms(2);
     MPU_Get_Gyroscope(&gx1,&gy1,&gz1);
     printf("%7.2d%7.2d%7.2d   ", gx1,gy1,gz1);
//   
     GPIO_ResetBits(GPIOA,GPIO_Pin_12);
     GPIO_SetBits(GPIOA,GPIO_Pin_13);
     GPIO_ResetBits(GPIOA,GPIO_Pin_14);
     GPIO_ResetBits(GPIOA,GPIO_Pin_15);
     delay_ms(2);
     MPU_Get_Gyroscope(&gx2,&gy2,&gz2);
     printf("%7.2d%7.2d%7.2d   ", gx2,gy2,gz2);

4个回答

试着把scl线和sda线都用吗模拟开关分选试一下

不可能吧,最好用示波器量下,如果你真的控制了10个SCL信号,只有SDA信号是不会有数据的,现在最有可能的情况是IO口复用或者电压不够导致10个SCL信号操作有问题

u010221760
黄国涛 回复weixin_44849612: 最好用示波器对比下信号,你现在的思路是从软件和现象上面去分析,但调单片机的问题一般都是从硬件着手分析。你现在单独可以,代表SDA和SCL是正常的,用上模拟开关不正常,就量下MCU这端和9250这端的SDA和SCL信号,肯定至少有一个不正常,如果是MCU这端不正常,九成是硬件有问题(依照我以往的经验,这种可能性比较小),如果是9250不正常,应该是你的模拟开关出了问题,这个时候可以量下模拟开关那边的电压是不是对的,因为现在你的模拟开关是用MCU的IO口去操控,我还是最怀疑这块,因为MCU的IO很容易复用和电压不够
4 个月之前 回复
weixin_44849612
weixin_44849612 我共用sda和共用scl都试过了,发现共用scl出来的数据都变成0了,共用sda倒是能读出数据,虽然这个数据也不准确。我单独用一个9250测试了一下,发现不用这个模拟开关,读出来的器件ID是正确的0X68,但是一旦使用了模拟开关,读取其器件ID都是0XFF了,哪怕我只在模拟开关上放一个9250
4 个月之前 回复

原理图能发出来看下吗?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问