之前就在疑问,为什么原子提供的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上没有任何信号
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
建议还是用模拟的吧,时间耗不起的,有些bug不那么好弄,也可以尝试官方的CPAL库
楼主可以试下这个方法http://blog.csdn.net/mcu_hong/article/details/8149311
我还是没看懂为什么不能用while,他说要读出来,那怎么用查询???
一周热门 更多>