打印
[STM32F1]

STM32使用库函数调试硬件I2C问题!

[复制链接]
2903|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hj007|  楼主 | 2018-7-6 09:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
关于大家都在说的STM32硬件I2C有问题我有听说过,但我不是我这个问题:
使用逻辑分析仪查看信号发现总是有一个41.46ns的脉冲,是SCL和SDA同时出现且时间相同。但这不影响通信。如下图:

这是通信期间
这个脉冲无规律出现,在非通信期间也会出现,而且在高电平期间以低脉冲出现。

这是非通信期间

B2ZD7GEZ750[@@_YWYT5KI7.png (250.74 KB )

B2ZD7GEZ750[@@_YWYT5KI7.png
沙发
hj007|  楼主 | 2018-7-6 09:42 | 只看该作者
请问这是什么问题?这是调用库函数的代码:
void AT24C02_WriteByte(uint8_t Addr, uint8_t Data)
{
    I2C_GenerateSTART(I2C1, ENABLE);//起始信号
    /*检测EV5事件,用于起始信号后*/
    while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT) != SUCCESS );
    I2C_Send7bitAddress(I2C1, I2C_WRITE_ADDR, I2C_Direction_Transmitter);
    /*检测EV6事件,用于从机地址后*/
    while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) != SUCCESS );
    I2C_SendData(I2C1, Addr);
    /* 检测 EV8 事件,用于传输数据后 */
    while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED) != SUCCESS );
    I2C_SendData(I2C1, Data);
    /* 检测 EV8 事件,用于传输数据后 */
    while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED) != SUCCESS );
    I2C_GenerateSTOP(I2C1,ENABLE);
}

使用特权

评论回复
板凳
zhuomuniao110| | 2018-7-6 11:55 | 只看该作者
主要是会用的人不多,I2C这个接口难用。

使用特权

评论回复
地板
ayb_ice| | 2018-7-6 13:06 | 只看该作者
我一直用GPIO模拟的,移植方便,也可靠

使用特权

评论回复
5
qiangtech| | 2018-7-6 14:01 | 只看该作者
看起来不是软件的问题吧,会不会是硬件上面互相干扰产生的

使用特权

评论回复
6
huangcunxiake| | 2018-7-6 21:32 | 只看该作者
感觉不是软件问题。

使用特权

评论回复
7
caoenq| | 2018-7-8 08:23 | 只看该作者
使用HAL库就没这个问题

使用特权

评论回复
8
icecut| | 2018-7-8 12:45 | 只看该作者
按住复位, 看看会不会出.
关闭 iic,看看会不会出

使用特权

评论回复
9
eydj2008| | 2018-7-8 18:09 | 只看该作者
这很像是测量问题

使用特权

评论回复
10
linqing171| | 2018-7-8 21:13 | 只看该作者
1 要用示波器测试,不要用逻辑分析仪。
2 图1的位置SDA有个刺可能是正常,因为SCL下降沿之后的tHD:DAT时间后master和slave的输入输出切换时间内可能会SDA被上拉电阻拉高。
3 图1的宽度可能是逻辑分析仪本身的时钟为24MHz引起的,还是要用示波器。
4 图1中SDA有脉冲,SCL也会有。可能是硬件bug,可能是通道间的串扰。
5 图2无法解释,可能是3.3V的信号,用5V的逻辑分析仪测的,还没有接好地。
建议按8楼的老i的说法先定位一下。

使用特权

评论回复
11
877049204| | 2018-7-8 23:16 | 只看该作者
楼主用的逻辑分析仪和我一样,哈哈

使用特权

评论回复
12
877049204| | 2018-7-8 23:17 | 只看该作者
楼主用的逻辑分析仪和我一样,哈哈

使用特权

评论回复
13
877049204| | 2018-7-8 23:17 | 只看该作者
楼主用的逻辑分析仪和我一样,哈哈

使用特权

评论回复
14
雪山飞狐D| | 2018-7-9 00:36 | 只看该作者
会不会是I2C硬件口做IO读取的时候会有一个先写1再回读的操作,这样就会“蹦”出一个高电平脉冲出来

使用特权

评论回复
15
CYJMCU| | 2018-7-9 11:16 | 只看该作者
软件里修改一下,IIC初始化完成后不发送数据。让IIC总线的SDA和SCL一直保持高电平状态,看看是不是还有毛刺。

使用特权

评论回复
16
香水城| | 2018-7-10 11:03 | 只看该作者
你看看用来复用于SCL/SDA的GPIO的输出速率配置,把它们调低点试试。

使用特权

评论回复
17
木木guainv| | 2018-7-17 13:29 | 只看该作者
自己用普通的io口试试

使用特权

评论回复
18
heimaojingzhang| | 2018-7-19 09:16 | 只看该作者
用示波器吧 iic用示波器是利器

使用特权

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

本版积分规则

9

主题

39

帖子

0

粉丝