OpenEdv-开源电子网

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

如果有人能看出我EEPROM的错误,小弟感激不尽

[复制链接]

20

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2018-4-27
在线时间
40 小时
发表于 2018-5-19 19:49:31 | 显示全部楼层 |阅读模式
10金钱
我的读 IIC的函数,读AT24C04一直读的161,用模拟IIC就没问题,
u8 I2C_ReadByte(u8 slave_addr,u8 read_addr,u8 *buff)
{  
u32 tmp = 0;
tmp = I2C_TimeOut;
while(I2C_GetFlagStatus(I2C_Port,I2C_FLAG_BUSY))
{
  if((tmp--) == 0)
  {
   return TimeOut;
  }
}
/* Send START condition */
I2C_GenerateSTART(I2C_Port , ENABLE);
tmp = I2C_TimeOut;
/* Test on EV5 and clear it */
while(!I2C_CheckEvent(I2C_Port,I2C_EVENT_MASTER_MODE_SELECT))
{
  if((tmp--) == 0)
  {
   return TimeOut;
  }
}
/* Send EEPROM address for write */
I2C_Send7bitAddress(I2C_Port,slave_addr,I2C_Direction_Transmitter);
tmp = I2C_TimeOut;
/* Test on EV6 and clear it */
while(!I2C_CheckEvent(I2C_Port,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
{
  if((tmp--) == 0)
  {
   return TimeOut;
  }
}
/* Clear EV6 by setting again the PE bit */
I2C_Cmd(I2C_Port,ENABLE);
/* Send the EEPROM's internal address to write to */
I2C_SendData(I2C_Port,read_addr);  
tmp = I2C_TimeOut;
/* Test on EV8 and clear it */
while(!I2C_CheckEvent(I2C_Port ,I2C_EVENT_MASTER_BYTE_TRANSMITTED))
{
  if((tmp--) == 0)
  {
   return TimeOut;
  }
}
/* Send STRAT condition a second time */  
I2C_GenerateSTART(I2C_Port,ENABLE);
tmp = I2C_TimeOut;
/* Test on EV5 and clear it */
while(!I2C_CheckEvent(I2C_Port ,I2C_EVENT_MASTER_MODE_SELECT))
{
  if((tmp--) == 0)
  {
   return TimeOut;
  }
}
/* Send EEPROM address for read */
I2C_Send7bitAddress(I2C_Port,slave_addr,I2C_Direction_Receiver);
tmp = I2C_TimeOut;
/* Test on EV6 and clear it */
while(!I2C_CheckEvent(I2C_Port,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
{
  if((tmp--) == 0)
  {
   return TimeOut;
  }
}
   /* Disable Acknowledgement */
I2C_AcknowledgeConfig(I2C_Port , DISABLE);
*buff = I2C_ReceiveData(I2C_Port);
   /* Send STOP Condition */
I2C_GenerateSTOP(I2C_Port ,ENABLE);     
/* Enable Acknowledgement to be ready for another reception */
I2C_AcknowledgeConfig(I2C_Port,ENABLE);
return !TimeOut;
}

最佳答案

查看完整内容[请看2#楼]

老老实实用软件模拟IIC吧
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-5-19 19:49:32 | 显示全部楼层
老老实实用软件模拟IIC吧
回复

使用道具 举报

20

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2018-4-27
在线时间
40 小时
 楼主| 发表于 2018-5-21 00:14:05 | 显示全部楼层
正点原子 发表于 2018-5-20 00:58
老老实实用软件模拟IIC吧

…………好的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 05:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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