打印

i2c不能产生起始条件

[复制链接]
6971|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stm32f103vb调试i2c接口,不能产生起始条件,START位已经置位,然后死在“while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));”语句出,查看寄存器,SB、MSL没有置位,BUSY位已经置位。这是怎么回事?
沙发
香水城| | 2010-1-27 16:07 | 只看该作者
你是如何判断“不能产生起始条件”?

设置START位之前,SDL和SCK是什么状态?

使用特权

评论回复
板凳
runmo420|  楼主 | 2010-1-27 16:55 | 只看该作者
(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));”处了。

使用特权

评论回复
地板
香水城| | 2010-1-27 17:39 | 只看该作者
对不起,不知道硬件环境是什么,不知道如何初始化的,不知道如何调试的,搞不懂你在做什么。

使用特权

评论回复
5
runmo420|  楼主 | 2010-1-28 10:37 | 只看该作者
跑固件库里的例程,程序没有改动,i2c1通过中断给i2c2传输数据,用的英倍特EMSTM32V100的板子,stm32f103vb,外接了上拉电阻,程序到I2C_GenerateSTART(I2C1, ENABLE);后面就停了,START位置位,SB、MSL都没有置位,SCL、SDA一直都是高电平

使用特权

评论回复
6
lut1lut| | 2010-1-28 13:36 | 只看该作者
之前有没有过I2C通信?是否是板子上电后,第一次发送start,就发不出去(波形都看不到)?

使用特权

评论回复
7
runmo420|  楼主 | 2010-1-28 13:55 | 只看该作者
之前没有通信,是第一次发送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));

使用特权

评论回复
8
lut1lut| | 2010-1-28 14:16 | 只看该作者
你这块板子的原理图看好了伐?
板子上的I2C1有没有经过remap之类的?

使用特权

评论回复
9
runmo420|  楼主 | 2010-1-28 15:06 | 只看该作者
原理图检查过了,应该没问题,也没有经过remap。I2C1的状态寄存器1的ARLO(仲裁丢失位)置位,I2C2的状态寄存器1的BERR(总线出错,起始条件错误标志)置位。

使用特权

评论回复
10
lut1lut| | 2010-1-28 15:48 | 只看该作者
OMG, 仲裁丢失竟然。

你这个I2C上还有挂哪些器件啊?

使用特权

评论回复
11
runmo420|  楼主 | 2010-1-28 16:04 | 只看该作者
英倍特那个板子上I2C1还挂着型号为STLM75M2E的温度传感器,也是i2c接口的,5V的,所以还加了两只MOS管,一边3.3V上拉,一边5V上拉。

使用特权

评论回复
12
香水城| | 2010-1-28 16:22 | 只看该作者
楼主最好给出个电路图。

使用特权

评论回复
13
runmo420|  楼主 | 2010-1-28 17:06 | 只看该作者
如图,图中只是把跟I2C相关的画出。

使用特权

评论回复
14
香水城| | 2010-1-28 18:15 | 只看该作者
请测试一下PB6和PB7是否损坏。

使用特权

评论回复
15
runmo420|  楼主 | 2010-1-28 20:46 | 只看该作者
PB6(SCL)真是坏的!!我是用FPGA做了个I2C接口的计数器,想测试一下i2c行不行的。PB6、PB7做I2C用时,都是配置成AF_OD(复用开漏)形式的,那FPGA的这两只脚(SCL、SDA)也要设计成开漏形式吧

使用特权

评论回复
16
qizihui7| | 2010-12-16 16:49 | 只看该作者
我碰到了和你一样的问题,不知你解决 了吗

使用特权

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

本版积分规则

48

主题

142

帖子

0

粉丝