野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12285|回复: 12

自己写的硬件IIC程序

[复制链接]
发表于 2016-9-13 15:17:21 | 显示全部楼层 |阅读模式
程序会一直死在while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

  1. u8 IIC_ReadOneByte(u8 ReadAddr)
  2. {
  3.         u8 temp;
  4.         while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));//等待总线空闲
  5.         I2C_GenerateSTART(I2C1,ENABLE);//开始信号
  6.         while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));//检测EV5事件并清除标志
  7.         I2C_Send7bitAddress(I2C1,IIC_RomAddr,I2C_Direction_Transmitter); //发送设备地址+写信号
  8.         while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//检测EV6事件并清除标志
  9.         I2C_SendData(I2C1,ReadAddr);//发送数据地址
  10.         while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));//检测EV8事件并清除标志
  11.         I2C_GenerateSTART(I2C1,ENABLE);//开始信号       
  12.         while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));//检测EV5事件并清除标志
  13.         I2C_Send7bitAddress(I2C1,IIC_RomAddr,I2C_Direction_Receiver); //发送设备地址+读信号
  14.         while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));//检测EV6事件并清除标志
  15.        
  16.         I2C_AcknowledgeConfig(I2C1,DISABLE);//发送非应答信号
  17.         I2C_GenerateSTOP(I2C1,ENABLE);//停止信号
  18.        

  19.         if(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED))//检测EV8事件并清除标志
  20.         {
  21.                 temp=I2C_ReceiveData(I2C1);//接收数据
  22.         }

  23.         I2C_AcknowledgeConfig(I2C1,ENABLE);//使能应答
  24.         return temp;
  25. }


复制代码

回复

使用道具 举报

 楼主| 发表于 2016-9-13 15:22:56 | 显示全部楼层
:):):):)
回复

使用道具 举报

发表于 2016-9-13 16:12:07 | 显示全部楼层
检查下iic的初始化是否正常
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 19:03:25 | 显示全部楼层
flyleaf 发表于 2016-9-13 16:12
检查下iic的初始化是否正常

我发现我的代码少了这个

  1. void I2C_DeInit(I2C_TypeDef* I2Cx)
复制代码

但是还不知道是不是这个问题
回复 支持 反对

使用道具 举报

发表于 2016-9-13 19:05:05 | 显示全部楼层
不哭的大熊 发表于 2016-9-13 19:03
我发现我的代码少了这个

但是还不知道是不是这个问题

这个不影响的,如果你的初始化函数正常的话,那可能就是设备地址不对了,你可以用我们的例程里的函数来替换一下查找问题另外,用硬件iic不要使用液晶屏,会影响,用软件iic的话就没问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-14 13:39:57 | 显示全部楼层
flyleaf 发表于 2016-9-13 19:05
这个不影响的,如果你的初始化函数正常的话,那可能就是设备地址不对了,你可以用我们的例程里的函数来替 ...

谢谢啊,我也是早上发现的,不能使用液晶屏,然后就好了,
回复 支持 反对

使用道具 举报

发表于 2016-9-16 08:42:53 | 显示全部楼层
你好,你的问题解决了吗?我的硬件IIC程序也是死在CheckEven事件里,不知道咋弄?
回复 支持 反对

使用道具 举报

发表于 2016-9-16 08:51:45 来自手机 | 显示全部楼层
我是老罗 发表于 2016-9-16 08:42
你好,你的问题解决了吗?我的硬件IIC程序也是死在CheckEven事件里,不知道咋弄?

用软件iic
回复 支持 反对

使用道具 举报

发表于 2016-9-16 08:55:41 | 显示全部楼层

用模拟IIC就可以,但是不清楚为什么硬件IIc就不行,这是啥原因呀?
回复 支持 反对

使用道具 举报

发表于 2016-9-18 08:48:44 | 显示全部楼层
我是老罗 发表于 2016-9-16 08:55
用模拟IIC就可以,但是不清楚为什么硬件IIc就不行,这是啥原因呀?

stm32硬件iic有问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-22 15:13:07 | 显示全部楼层
flyleaf 发表于 2016-9-18 08:48
stm32硬件iic有问题

不是STM32的硬件IIC有问题,注意使用硬件IIC的时候不能使用液晶屏,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-22 15:14:19 | 显示全部楼层
我是老罗 发表于 2016-9-16 08:42
你好,你的问题解决了吗?我的硬件IIC程序也是死在CheckEven事件里,不知道咋弄?

你可以先试下,关掉液晶屏,看硬件IIC能正常工作不
回复 支持 反对

使用道具 举报

发表于 2016-9-23 08:10:49 | 显示全部楼层
不哭的大熊 发表于 2016-9-22 15:14
你可以先试下,关掉液晶屏,看硬件IIC能正常工作不

嗯嗯,已经调试好了
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 18:45 , Processed in 0.033896 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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