打印

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

[复制链接]
250|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
稻花香1号|  楼主 | 2020-4-3 22:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
初学i2c接口,编写个程序i2c读器件ACK  如:"ack=i2c_SendData(0x46);“反复尝试了3个I2C器件,始终只有MPU6050(Addr:0xD0)返回ACK为低电平。反复尝试N次后使本人失去了学习的勇气,太诡异了。请各位大神指教问题所在。谢谢! 三个器件为 MPU6050(Addr:0xD0) ,BH1750(Addr:0x46) ,24c02(Addr:0xA0) 其中 24c02(Addr:0xA0) 与 MPU6050(Addr:0xD0)器件确定是好的,使用STM32标准库编程,器件可以正常使用。 代码如下 :void I2C_Test(void){       u8 ack=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();} /***   以下是模拟i2c程序    ***/   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);}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){       unsignedcharack=0x44,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 readdata.             Delay_us(3);             i2c1_SCL_Out_Low;//start the next bit data totransmit.             }             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;}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

381

主题

382

帖子

1

粉丝