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系列的片子,还有一个问题就是写地址的时候到底是七位还是八位啊,就是哪一个输入输出控制位还算进去么?谢谢 展开
 我来答
mcs3000
推荐于2017-11-25 · TA获得超过3255个赞
知道小有建树答主
回答量:1045
采纳率:50%
帮助的人:918万
展开全部
不用搞这个了STM32的IIC通讯有个bug。
因为ack信号时间很短暂,一旦错过了这个短暂的ACK信号,STM32就挂了。
想用IIC的话,就用软件模拟吧。
追问
很短暂?STM32检测ACK的能力不会那么差吧,有成功的例子啊。有人说勘误表上也没有关于这方面的说法啊,有官方说这个STM32的硬件IIC不好用的么?谢谢
追答
我试过。用STM32的IIC功能来读写24c02。前两个周期是可以正常读写的。一般到第三个字节开始,以后全都凌乱了,凌乱了,乱了,了。

因为CPU要处理很多不同的任务,一旦其他任务占用了CPU(空循环都不行),ACK就容易被错过。
官网的解决方案是,用最高优先级的DMA来实现IIC传输。

你google或者百度搜索一下。很多人都遇到这样的问题。虽然官网不承认这是个bug,但是实际上绝大多数情况下,这个IIC就是不好用。
知识哥哥
2013-07-23 · TA获得超过402个赞
知道小有建树答主
回答量:189
采纳率:0%
帮助的人:127万
展开全部
STM32F103的硬件I2C着实不好用,但Cortex-M0内核的F051对硬件I2C做了很大程度修改,比M3的要好用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式