stm32F407的硬件I2C稳定吗~

2019-07-20 18:40发布

之前就在疑问,为什么原子提供的I2C例子为什么只有模拟的,而不使用硬件的I2C,之后看了一个帖子说是硬件的I2C不稳定且不好用。不过该帖子是STM32F103的,而且两年时间过去了,不知道后来有没有改善。现在正在调试这个硬件I2C,配置好后不起作用,测量I2C1的时钟线,并没有看到时钟信号。配置如下所示:
    I2C_InitTypeDef I2C_InitStructure;
    I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
    I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
    I2C_InitStructure.I2C_OwnAddress1 = 0x30;
    I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
    I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
    I2C_InitStructure.I2C_ClockSpeed = 10000;
    I2C_Init(I2C1,&I2C_InitStructure);
   
    I2C_ITConfig(I2C1,I2C_IT_EVT | I2C_IT_BUF,ENABLE);
    I2C_Cmd(I2C1,ENABLE);
    I2C_AcknowledgeConfig(I2C1,ENABLE);

发送数据如下所示:
    I2C_GenerateSTART(I2C1,ENABLE);
    I2C_SendData(I2C1,0x77);
    ZY_Delay(5000);
    GPIO_ToggleBits(GPIOG,GPIO_Pin_12);
    GPIO_ToggleBits(GPIOE,GPIO_Pin_2);
    I2C_GenerateSTOP(I2C1,ENABLE);

现象为:GPIOG12和GPIOE2可正常闪烁,但是在PB6和PB7上没有任何信号

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
操作系统
1楼-- · 2019-07-20 19:19
I2C功能,一般很少用硬件的。用硬件的代码复杂度并没有减少。用模拟的I2C程序写得好的话,速度还更快。你可能不相信,试试就知道了。
八度空间
2楼-- · 2019-07-20 20:08
本帖最后由 八度空间 于 2016-11-9 12:42 编辑

建议还是用模拟的吧,时间耗不起的,有些bug不那么好弄,也可以尝试官方的CPAL库
楼主可以试下这个方法http://blog.csdn.net/mcu_hong/article/details/8149311
ldskendy
3楼-- · 2019-07-21 01:10
 精彩回答 2  元偷偷看……
queqiongtao
4楼-- · 2019-07-21 07:01
使用DMA方式试过,挺好用的  中断的话就算了
小陀螺爱炒蛋
5楼-- · 2019-07-21 11:57
稳定不稳定不知道,总之是比较繁琐~原因听说是,由于IIC是NXP的专利,为了避免NXP的知识产权问题,所以这样设计的~
慕名兰
6楼-- · 2019-07-21 15:07
八度空间 发表于 2016-11-9 12:40
建议还是用模拟的吧,时间耗不起的,有些bug不那么好弄,也可以尝试官方的CPAL库
楼主可以试下这个方法htt ...

我还是没看懂为什么不能用while,他说要读出来,那怎么用查询???

一周热门 更多>