打印

STM32模拟I2C数据接收问题

[复制链接]
4344|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yybj|  楼主 | 2012-6-10 12:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
两个问题:
1,这个读取SDA和SCL状态是读ODR还是读IDR呢?
#define I2C_SDA_State GPIOB->ODR&GPIO_Pin_6//SDA状态
#define I2C_SCL_State GPIOB->ODR&GPIO_Pin_7//SCL状态

2,字节接收部分中,I2C_SDA_State一直为低,所以ReData|=0x01一直不执行,读出来的全部是0。大家看看哪里有问题啊?

if(I2C_SDA_State) //读SDA引脚状态
{
ReData|=0x01; //如果SDA为高则将SDA上的数据存入ReData
}



引脚定义部分:
#define SDA_1 GPIO_SetBits(GPIOB,GPIO_Pin_6)//SDA置1
#define SDA_0 GPIO_ResetBits(GPIOB,GPIO_Pin_6)//SDA置0
#define SCL_1 GPIO_SetBits(GPIOB,GPIO_Pin_7)//SCL置1
#define SCL_0 GPIO_ResetBits(GPIOB,GPIO_Pin_7)//SCL置0
#define I2C_SDA_State GPIOB->ODR&GPIO_Pin_6//SDA状态
#define I2C_SCL_State GPIOB->ODR&GPIO_Pin_7//SCL状态

I2C接收字节部分:
u8 I2C_ReceiveByte(void)//接收一个字节
{
u8 i,ReData;
SDA_1;//接收方释放SDA总线
SCL_0;//让从机准备好数据
ReData=0;
for(i=0;i<8;i++)
{
SCL_1;//SCL=1使数据有效 ,SCL为高期间SDA需保持稳定
I2C_delay();
ReData<<=1;
if(I2C_SDA_State) //读SDA引脚状态
{
ReData|=0x01; //如果SDA为高则将SDA上的数据存入ReData
}
SCL_0;//准备好再次接收数据,SCL为低才允许SDA变化
I2C_delay();//等待数据准备好
}
return ReData;
}
沙发
火箭球迷| | 2012-6-10 12:19 | 只看该作者
SDA数据线需要配置成开漏(Open-Drain)模式,或者在读SDA时换成输入模式。

使用特权

评论回复
板凳
dfsa| | 2012-6-10 12:31 | 只看该作者
没看出问题出在哪?

使用特权

评论回复
地板
lai832| | 2012-6-14 12:45 | 只看该作者

注:后面的延时时间是原参娄是不正确的,不要参考DELAY时间

本帖最后由 lai832 于 2012-6-14 12:46 编辑

char IIC_ReceData(void)
{
  unsigned char  retc;
  unsigned char  BitCnt;
  retc=0;

  I2C_delay();
  SDA(1); //SDA=1 ÖÃÊý¾ÝÏßΪÊäÈ뷽ʽ---ÊÍ·Å×ÜÏß,ÓÉEEPROM¿ØÖÆ
  I2C_delay();
  for(BitCnt=0;BitCnt<8;BitCnt++)
  {
//    I2C_delay();//Delay(8);   //1        
    SCL(0);    //SCL=0 ÖÃʱÖÓÏßΪµÍ£¬×¼±¸½ÓÊÕÊý¾Ýλ
    I2C_delay();//        Delay(40); //5//ʱÖӵ͵çƽÖÜÆÚ´óÓÚ4.7¦Ìs
//    I2C_delay();
    SCL(1);         //SCL=1 ÖÃʱÖÓÏßΪ¸ßʹÊý¾ÝÏßÉÏÊý¾ÝÓÐЧ
    I2C_delay();//Delay(16);//2
//    I2C_delay();
    retc = retc << 1;
    if(GPIOB->IDR & SData)
      retc += 1; // SDA == 1¶ÁÊý¾Ýλ,½ÓÊÕµÄÊý¾Ýλ·ÅÈëretcÖÐ
//  Delay(16);//2
   }
  SCL(0); // SCL=0;
//  I2C_delay();//Delay(16);//2
  return (retc);
}

调试OK了的.正常工作的读函数

使用特权

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

本版积分规则

175

主题

2496

帖子

1

粉丝