OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2280|回复: 2

STM32 模拟I2C学习问题,发送3个器件地址,只一个回应

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2019-9-24
在线时间
6 小时
发表于 2020-2-9 23:44:17 | 显示全部楼层 |阅读模式
1金钱
初学i2c接口,编写个程序i2c读器件ACK  如:"ack=i2c_SendData(0x46);“反复尝试了3个I2C器件,始终只有一个返回ACK为低电平。
反复尝试后使本人失去了学习的勇气,太诡异了。请各位大神指教问题所在。谢谢!
三个器件为 MPU6050(Addr:0xD0) ,BH1750(Addr:0x46) ,24c02(Addr:0xA0)

其中 24c02(Addr:0xA0) 与 MPU6050(Addr:0xD0)器件确定是好的,使用STM32标准库编程,器件可以正常使用。

代码如下 :
void I2C_Test(void)
{
       u8ack=0x55;
       i2c_Start();

      // ack=i2c_SendData(0xA0);
      // printf("\n24c020(0xA0) Ack :0x%02x\n",ack);

      // ack=i2c_SendData(0xD0);
      // printf("\nMPU6050(0xD0) Ack :0x%02x\n",ack);

       ack=i2c_SendData(0x46);
       printf("\nBH1750(0x46) Ack :0x%02x\n",ack);
      
       i2c_Stop();
}
void i2c_Start(void)
{
       i2c1_SDA_Out_High;
       i2c1_SCL_Out_High;
       Delay_us(3);
       i2c1_SDA_Out_Low;
       Delay_us(3);
       i2c1_SCL_Out_Low;
       Delay_us(3);
}
/***   以下是模拟i2c程序    ***/   
void i2c_Stop()
{
       i2c1_SDA_Out_Low;
       i2c1_SCL_Out_Low;
       Delay_us(3);
       i2c1_SCL_Out_High;
       Delay_us(3);
       i2c1_SDA_Out_High;
       Delay_us(3);
}
u8 i2c_SendData(u8 Dat)
{
       unsignedchar ack,mask;
       i2c1_SCL_Out_Low;
       for(mask=0x80;mask!=0;mask>>=1)
       {      
              if(0==(mask&Dat))
                     i2c1_SDA_Out_Low;
              else
                     i2c1_SDA_Out_High;
              Delay_us(3);
              i2c1_SCL_Out_High;//waiting for the Slave read data.
              Delay_us(3);
              i2c1_SCL_Out_Low;//start the next bit data to transmit.
      
       }
              i2c1_SDA_Out_High;
              Delay_us(3);
              i2c1_SCL_Out_High;
      
              i2c1_SDA_InMode;   
              Delay_us(3);
              ack=(GPIOB->IDR  & GPIO_Pin_7);
              i2c1_SCL_Out_Low;
      
              i2c1_SDA_OutMode;
      
       returnack;
}

搜狗截图20年02月09日2330_1.jpg

Test.rar

1.45 MB, 下载次数: 4

测试程序上传

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2020-2-10 22:15:32 | 显示全部楼层
找不出问题就单独测试先(把其他两个期间拆了)
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

178

帖子

0

精华

高级会员

Rank: 4

积分
668
金钱
668
注册时间
2019-7-28
在线时间
60 小时
发表于 2020-2-10 22:51:51 | 显示全部楼层
建议地址采用:0xA1、0xA2、0xA3 一类的地址,
或有间隔,例如:0xA1、0xA3、0xA5 。
经验之谈,对时钟不规范(软IIC)的比较有效。一般数据不会错,地址容易错。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-20 13:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表