[STM8] IIC模块真是摆设吗

[复制链接]
 楼主| 明月小厨 发表于 2013-12-20 12:36 | 显示全部楼层 |阅读模式
本帖最后由 明月小厨 于 2013-12-20 16:22 编辑

分数有限,只贡献10分出来讨论;
1)用库函数操作;兼用寄存器直接搞;
IIC比较烦的是ACK信号和状态标志间的关系;如果没有收到ACK,则相关的后续操作,如果依据标志状态进行,就会失败。(死机,当然你会预处理,以防死机。)
2)相关的前期设置。
A)引脚的功能使能。上电后默认的功能不是IIC功能;这个容易处理,用工具在OPTOIN字节中改;
B)上电后有部分模块没有时钟,主要是节能,所以外设的时钟要设置为有。(这个上电后默认值就符合要求
3)处理好A和B;然后就是常规的初始化,然后一收一发开始测试;
结果:不太灵;
时间不太多,有可能要到下周一才可以继续测试。

有没有哪位大侠调过STM8S相关的IIC部分,说说看有没有什么要注意的地方?
如果只是用IO模拟,或不能使用中断来完成,就很悲剧了,其它事还要不要做啊;
系统的工作效率一下就归零了。

 楼主| 明月小厨 发表于 2013-12-20 12:39 | 显示全部楼层
印象中STM32F,IIC模块的使用,对应的IO端口设置;这二者间好象是有要求的;
 楼主| 明月小厨 发表于 2013-12-20 12:48 | 显示全部楼层
本帖最后由 明月小厨 于 2013-12-20 17:39 编辑

:funk:原子的二本书中IIC部分,都说ST的IIC模块太复杂而且不稳定;相关的部分都是用IO模拟实现的。如果——!真的是这样,就非常失败了。
boyie 发表于 2013-12-20 13:23 | 显示全部楼层
反正我是用模拟的, 用硬件的小批量测试 出现过卡死IIC。。
 楼主| 明月小厨 发表于 2013-12-20 13:26 | 显示全部楼层
我是用二个STM8S间通讯,这下真的太惨了。
 楼主| 明月小厨 发表于 2013-12-20 13:34 | 显示全部楼层
看来只能模了;
 楼主| 明月小厨 发表于 2013-12-20 16:21 | 显示全部楼层
本帖最后由 明月小厨 于 2013-12-20 16:39 编辑

I2C的频率竟然只有100K和400K二种设置;为什么不能是100HZ或400HZ?
清SR1中地址匹配的标志,是读一下SR3;神经病!
误会了,我实测波形,约一个时钟周期约1mS;这样的话,我再想办法处理。不然真的要IO模拟了;
但I2C的状态标志,是个大大的麻烦。而且有可能不太稳定。

一方发启始信号,另一方收到;
一主发地址信号,另一方收到并立即应答;
测试进行到此,还行!
下一步的任务是发完地址,发送5个数据;然后发停止信号结束!
 楼主| 明月小厨 发表于 2013-12-20 16:40 | 显示全部楼层
如果是这样,先不模了,直接用I2C,但库函数操作不太正常,还是寄存器直接捣鼓可信些。
 楼主| 明月小厨 发表于 2013-12-20 17:01 | 显示全部楼层
ST的I2C的确不好用,关键是对ACK的处理;直接关系到标志位。
如果主控一方,只依自己的程序一步步操作完成,事情就会简单的多;
ACK的检测标志应该独立。甚至可以忽略。

而ST的处理方式则 是绑的太紧了;
不出事的时候,一切很正常,很简洁明了(理想化状态);
一旦出事(ACK丢失),你一时间真的不知道发生了什么。只能傻傻地等,死在这里不值啊;——容错性怎么考虑?
我考虑是用一个定时器,每次操作的时候启动定时器计时;
如果操作I2C的过程中很顺利,就不断复位定时器;一旦卡死了,定时器将超时中断,在定时器中断里想想有没有什么办法让程序回归正常,允许本次通讯失败。
 楼主| 明月小厨 发表于 2013-12-20 17:39 | 显示全部楼层
ST的IIC处理有些特别的地方。
有的地方处理的很好,但对ACK的处理太过于理想化了;
胡火龙 发表于 2013-12-25 18:10 | 显示全部楼层
控制好时序,直接模
renqinglei 发表于 2013-12-25 19:27 | 显示全部楼层
感觉模拟的好用,一次就成功了,硬件的搞了好久还是搞不懂
lcmbeyond 发表于 2013-12-25 19:57 | 显示全部楼层
模拟也有现成的代码,和调用库感觉都差不多了
feilusia 发表于 2013-12-25 20:21 | 显示全部楼层
之前做STM8的硬件IIC做了两天没做出来,直接把51写过的模拟IIC的拿过来修修改改就能用了。
顺便问下双机通信为嘛不用串口呢?是不是串口已经用了。
ABHK 发表于 2013-12-25 20:36 | 显示全部楼层
应该都是相通的吧   这一块   感觉应该都是类似的
cgm88888 发表于 2013-12-26 09:48 | 显示全部楼层
用模拟的保险
ailing1314 发表于 2013-12-26 10:15 | 显示全部楼层
zet6的I2c调试成功,读写没问题,速度可达400k
ailing1314 发表于 2013-12-26 10:17 | 显示全部楼层
新人,问个问题,发个帖子,出不来验证什么问题
静止的黑暗 发表于 2013-12-26 12:48 | 显示全部楼层
IIC确实很**肋啊
xi_liang 发表于 2013-12-26 15:34 | 显示全部楼层
I2C根本没问题,是很多人不会用。至少我们跑的例程完全没问题。

评分

参与人数 1威望 +1 收起 理由
logokfu + 1 是的

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:爱你一万年

35

主题

1072

帖子

2

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