12944|16

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

i2c不能产生起始条件 [复制链接]

                                 stm32f103vb调试i2c接口,不能产生起始条件,START位已经置位,然后死在“while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));”语句出,查看寄存器,SB、MSL没有置位,BUSY位已经置位。这是怎么回事?
此帖出自stm32/stm8论坛

最新回复

挖个坟,遇到同样的问题,我这更奇怪,吧示波器或者逻辑分析仪夹在scl或者sda上有一定概率可以输出start波形,不然置了start位,scl和sda一直保持高,死活不出start的波形。 事实证明确实是这两个IO坏了,stm8的I2C脚是 真开漏 结构,内部没有ESD管,接反电源或者被静电打到瞬间完蛋 换了片新片子OK 了 stm8就是一份价钱一分货,st这坑的  详情 回复 发表于 2017-6-13 16:38
点赞 关注
 

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你是如何判断“不能产生起始条件”?

设置START位之前,SDL和SCK是什么状态?
此帖出自stm32/stm8论坛
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
(1)I2C_GenerateSTART(I2C1, ENABLE);
(2)while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
用I2C1,上拉,执行到(2)语句就停住了,SCL、SDA一直是高电平状态,SB、MSL、BUSY都没有置位;改用I2C2,没有上拉电阻,断点执行到(2)语句时,虽然没有上拉,但是SCL会从高电平跳到低电平,而SDA一直是低电平,SB、MSL、BUSY置位正常,可能是没有上拉的缘故,所以接下来发送从机地址语句执行完后,就停在
“while(!I2C_CheckEvent(I2C2,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));”处了。
此帖出自stm32/stm8论坛
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 对不起,不知道硬件环境是什么,不知道如何初始化的,不知道如何调试的,搞不懂你在做什么。
此帖出自stm32/stm8论坛
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 跑固件库里的例程,程序没有改动,i2c1通过中断给i2c2传输数据,用的英倍特EMSTM32V100的板子,stm32f103vb,外接了上拉电阻,程序到I2C_GenerateSTART(I2C1, ENABLE);后面就停了,START位置位,SB、MSL都没有置位,SCL、SDA一直都是高电平
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 之前有没有过I2C通信?是否是板子上电后,第一次发送start,就发不出去(波形都看不到)?
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 
之前没有通信,是第一次发送START,就发不出去(示波器看一直是高电平),完全是例程,停在“while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));”了。不知道是什么原因?
I2C_GenerateSTART(I2C1, ENABLE);
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
  I2C_Send7bitAddress(I2C1, I2C2_SLAVE_ADDRESS7, I2C_Direction_Transmitter);
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
  I2C_SendData(I2C1, I2C1_Buffer_Tx[0]);
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
你这块板子的原理图看好了伐?
板子上的I2C1有没有经过remap之类的?
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 原理图检查过了,应该没问题,也没有经过remap。I2C1的状态寄存器1的ARLO(仲裁丢失位)置位,I2C2的状态寄存器1的BERR(总线出错,起始条件错误标志)置位。
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

10
 
OMG, 仲裁丢失竟然。

你这个I2C上还有挂哪些器件啊?
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

11
 
                                 英倍特那个板子上I2C1还挂着型号为STLM75M2E的温度传感器,也是i2c接口的,5V的,所以还加了两只MOS管,一边3.3V上拉,一边5V上拉。
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

12
 
                                 楼主最好给出个电路图。
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

13
 
如图,图中只是把跟I2C相关的画出。
I2C.jpg
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

14
 
                                 请测试一下PB6和PB7是否损坏。
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

15
 
                                 PB6(SCL)真是坏的!!我是用FPGA做了个I2C接口的计数器,想测试一下i2c行不行的。PB6、PB7做I2C用时,都是配置成AF_OD(复用开漏)形式的,那FPGA的这两只脚(SCL、SDA)也要设计成开漏形式吧
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

16
 
                                 我碰到了和你一样的问题,不知你解决 了吗
此帖出自stm32/stm8论坛
 
 
 

回复

379

帖子

0

TA的资源

一粒金砂(高级)

17
 
挖个坟,遇到同样的问题,我这更奇怪,吧示波器或者逻辑分析仪夹在scl或者sda上有一定概率可以输出start波形,不然置了start位,scl和sda一直保持高,死活不出start的波形。
事实证明确实是这两个IO坏了,stm8的I2C脚是 真开漏 结构,内部没有ESD管,接反电源或者被静电打到瞬间完蛋
换了片新片子OK 了
stm8就是一份价钱一分货,st这坑的
此帖出自stm32/stm8论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表