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

[复制链接]
3406|17
 楼主| hj007 发表于 2018-7-6 09:38 | 显示全部楼层 |阅读模式
关于大家都在说的STM32硬件I2C有问题我有听说过,但我不是我这个问题:
使用逻辑分析仪查看信号发现总是有一个41.46ns的脉冲,是SCL和SDA同时出现且时间相同。但这不影响通信。如下图:
386025b3ec6e26c5f4.png
这是通信期间
这个脉冲无规律出现,在非通信期间也会出现,而且在高电平期间以低脉冲出现。
915585b3ec7e81384e.png
这是非通信期间
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模拟的,移植方便,也可靠
qiangtech 发表于 2018-7-6 14:01 | 显示全部楼层
看起来不是软件的问题吧,会不会是硬件上面互相干扰产生的
huangcunxiake 发表于 2018-7-6 21:32 | 显示全部楼层
感觉不是软件问题。
caoenq 发表于 2018-7-8 08:23 来自手机 | 显示全部楼层
使用HAL库就没这个问题
icecut 发表于 2018-7-8 12:45 | 显示全部楼层
按住复位, 看看会不会出.
关闭 iic,看看会不会出
eydj2008 发表于 2018-7-8 18:09 | 显示全部楼层
这很像是测量问题
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的说法先定位一下。
877049204 发表于 2018-7-8 23:16 | 显示全部楼层
楼主用的逻辑分析仪和我一样,哈哈
877049204 发表于 2018-7-8 23:17 | 显示全部楼层
楼主用的逻辑分析仪和我一样,哈哈
877049204 发表于 2018-7-8 23:17 | 显示全部楼层
楼主用的逻辑分析仪和我一样,哈哈
雪山飞狐D 发表于 2018-7-9 00:36 | 显示全部楼层
会不会是I2C硬件口做IO读取的时候会有一个先写1再回读的操作,这样就会“蹦”出一个高电平脉冲出来
CYJMCU 发表于 2018-7-9 11:16 | 显示全部楼层
软件里修改一下,IIC初始化完成后不发送数据。让IIC总线的SDA和SCL一直保持高电平状态,看看是不是还有毛刺。
香水城 发表于 2018-7-10 11:03 | 显示全部楼层
你看看用来复用于SCL/SDA的GPIO的输出速率配置,把它们调低点试试。
木木guainv 发表于 2018-7-17 13:29 | 显示全部楼层
自己用普通的io口试试
heimaojingzhang 发表于 2018-7-19 09:16 | 显示全部楼层
用示波器吧 iic用示波器是利器
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

39

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部