STM32中硬件IIC运行时候,老是停在下面这里,是主模式选择失败,我选择的是 I2C_Mode_I2C ,有关系么
while(!I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_MODE_SELECT)){retry++;if(retry>=1000){I2C...
while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT)) { retry++; if(retry>=1000){ I2C_GenerateSTOP(I2Cx, ENABLE); return MASTER_MODE_SELECT_FAILED; } }这可能是哪些原因造成的呀,测试程序是网上经常用的BH1750光强传感器STM32测试程序 - STM32/8 纬图虚拟仪器论坛我用的是IIC1,L152系列的片子,还有一个问题就是写地址的时候到底是七位还是八位啊,就是哪一个输入输出控制位还算进去么?谢谢
展开
2个回答
展开全部
不用搞这个了STM32的IIC通讯有个bug。
因为ack信号时间很短暂,一旦错过了这个短暂的ACK信号,STM32就挂了。
想用IIC的话,就用软件模拟吧。
因为ack信号时间很短暂,一旦错过了这个短暂的ACK信号,STM32就挂了。
想用IIC的话,就用软件模拟吧。
追问
很短暂?STM32检测ACK的能力不会那么差吧,有成功的例子啊。有人说勘误表上也没有关于这方面的说法啊,有官方说这个STM32的硬件IIC不好用的么?谢谢
追答
我试过。用STM32的IIC功能来读写24c02。前两个周期是可以正常读写的。一般到第三个字节开始,以后全都凌乱了,凌乱了,乱了,了。
因为CPU要处理很多不同的任务,一旦其他任务占用了CPU(空循环都不行),ACK就容易被错过。
官网的解决方案是,用最高优先级的DMA来实现IIC传输。
你google或者百度搜索一下。很多人都遇到这样的问题。虽然官网不承认这是个bug,但是实际上绝大多数情况下,这个IIC就是不好用。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询