打印

我的I2C可以写数据但是读数据还是没有实现

[复制链接]
2495|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaohuic|  楼主 | 2008-9-25 22:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
I2c, TE, AD, ev, ST
各位大侠,之前调试了很久,终于把我的写数据调通了,但是读数据到现在还没有调通,严重影响我的下面的工作,呵呵,十一还有计划,不想因此而耽误了,请各位大侠帮忙看看。
void write_data(u8 I2C1_Buffer_Tx[],int size)
{  
  int write_Idx=0;
  I2C_Cmd(I2C1, ENABLE);   //使能I2C1
  I2C_GenerateSTART(I2C1, ENABLE);

  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); 
  I2C_Send7bitAddress(I2C1, RDA5800C_SLAVE_ADDRESS7, I2C_Direction_Transmitter);      //发送地址
  while(!I2C_CheckEvent(I2C1,   I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); 

  while (write_Idx < size)                    //发送数据
  {
    I2C_SendData(I2C1, I2C1_Buffer_Tx[write_Idx++]);
   while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); 
  }

   I2C_GenerateSTOP(I2C1, ENABLE);
   I2C_Cmd(I2C1, DISABLE);
}
这个程序是可以跑通的,但是下面这个就不可以(当前前面我的配置都有的)
void read_data(int readsize,u8 I2C1_buffer_Rx[])
{  
  int read_Idx=0;
  I2C_Cmd(I2C1, ENABLE);                 
  I2C_GenerateSTART(I2C1, ENABLE);

  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); 
  I2C_Send7bitAddress(I2C1, RDA5800C_SLAVE_ADDRESS7, I2C_Direction_Receiver);
  
  delay_ms(waittime);
      
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)); 
  I2C_AcknowledgeConfig(I2C1, ENABLE);

  while(readsize)  
  {
    if(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED))  
    {
      if(readsize == 2)
      {
        I2C_AcknowledgeConfig(I2C1, DISABLE);
      }

      if(readsize == 1)
      {
        I2C_GenerateSTOP(I2C1, ENABLE);
      }
      I2C1_buffer_Rx[read_Idx] = I2C_ReceiveData(I2C1);

      read_Idx++; 
      
      readsize--; 
      delay_ms(waittime);       
    }   
  }
}
读数据的时候有一个问题,就是我发完地址后数据线一直处于低电平状态,地址是正确的,有应答的,但是接下来就有18个脉冲(我猜想是发了一次没有应答又重新发一次)这个时候也有数据,但是完全不对,此后数据线就是一直处于高电平状态,再也没有数据发过来了,各位大侠帮我看看是不是我的程序出了什么问题或是时序什么的不对或是什么地方不对,帮帮忙哦。多谢多谢了。
沙发
xiaohuic|  楼主 | 2008-9-26 10:39 | 只看该作者

各位香主版主帮帮忙看看啊,谢谢啦

各位香主版主帮帮忙看看啊,谢谢啦

使用特权

评论回复
板凳
香水城| | 2008-9-26 12:12 | 只看该作者

STM32的I2C例子

请到ST的网站下载STM32的I2C例子(AN2824):http://www.stmicroelectronics.com.cn/stonline/mcu/STM32_AN.htm

使用特权

评论回复
地板
xiaohuic|  楼主 | 2008-9-26 13:41 | 只看该作者

例子看了

我下载了,这个就是几乎跟例子一样的,但是就是不通

使用特权

评论回复
5
| | 2008-9-26 13:52 | 只看该作者

等待....解答...

使用特权

评论回复
6
香水城| | 2008-9-26 14:13 | 只看该作者

ST的例子正确吗?

你的I2C设备是什么?

使用特权

评论回复
7
xiaohuic|  楼主 | 2008-9-27 11:09 | 只看该作者

例子是正确的,EEPROM的例子

我的主机是STM32芯片,跟一个小芯片的I2C 通信的,要读它的寄存器,地址传送是正确的,但是数据不正确

使用特权

评论回复
8
香水城| | 2008-9-27 18:52 | 只看该作者

对照例子就可以看出来,你的程序根本不对,

使用特权

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

本版积分规则

2

主题

11

帖子

0

粉丝