[技术问答] M451 I2C

[复制链接]
1701|5
 楼主| anobodykey 发表于 2016-7-6 15:30 | 显示全部楼层 |阅读模式
M451 的I2C中有一个超时计数器,由I2C_TOCTL来控制,但在使用中发现,只要使能了该计数器,定时溢出标志TOIF会一直置位,大家有没遇到过的?还有该计数器的时钟源是哪里来的呢?是跟通信速率有关吗?
Rooney30 发表于 2016-7-6 16:22 | 显示全部楼层
是不是得和其他的一起搭配使用才行呢?
 楼主| anobodykey 发表于 2016-7-6 17:11 | 显示全部楼层
Rooney30 发表于 2016-7-6 16:22
是不是得和其他的一起搭配使用才行呢?

看手册的话,是单独使用的, I2C_TOCTL.bmp

这里面显示超时模块的时钟源是PCLK但这个计数应该很快吧,我这里PCLK时钟为72MHz,I2C通信速率为100K,这个很容易就超时吧,之前我在检测到超时时添加了打印信息的输出,如下:
void I2C1_IRQHandler(void)
{
    uint32_t u32Status;

    u32Status = I2C_GET_STATUS(I2C_EEPROM);

    if(I2C_GET_TIMEOUT_FLAG(I2C_EEPROM))
    {
        /* Clear I2C0 Timeout Flag */
                printf("time out.\n");
        I2C_ClearTimeoutFlag(I2C_EEPROM);
    }
    else
    {
        if(s_I2CHandlerFn != NULL)
            s_I2CHandlerFn(u32Status);
    }
}

会一直输出time out,但是去掉打印信息I2C的读写流程是不受影响的(虽然使能了超时计数器)。但是如果在检测到超时那里增加I2C_STOP()函数,读写就会失败(因为进入了I2C_STOP)。所以搞不清这个超时计数器到底起没起作用。。。
ofsummer 发表于 2016-7-6 21:45 | 显示全部楼层
i2c还有超时定时器,是不是这个芯片的i2c也有bug?
xuhanquan 发表于 2016-9-19 10:23 | 显示全部楼层
你好,官方提供的BSP包里的I2C源程序还得修改才能用吗
huangcunxiake 发表于 2016-9-19 14:58 | 显示全部楼层
不会有BUG吧,这个问题也太明显了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

240

帖子

0

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