打印
[STM8]

IIC模块真是摆设吗

[复制链接]
6764|34
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
明月小厨|  楼主 | 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。。

使用特权

评论回复
5
明月小厨|  楼主 | 2013-12-20 13:26 | 只看该作者
我是用二个STM8S间通讯,这下真的太惨了。

使用特权

评论回复
6
明月小厨|  楼主 | 2013-12-20 13:34 | 只看该作者
看来只能模了;

使用特权

评论回复
7
明月小厨|  楼主 | 2013-12-20 16:21 | 只看该作者
本帖最后由 明月小厨 于 2013-12-20 16:39 编辑

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

一方发启始信号,另一方收到;
一主发地址信号,另一方收到并立即应答;
测试进行到此,还行!
下一步的任务是发完地址,发送5个数据;然后发停止信号结束!

使用特权

评论回复
8
明月小厨|  楼主 | 2013-12-20 16:40 | 只看该作者
如果是这样,先不模了,直接用I2C,但库函数操作不太正常,还是寄存器直接捣鼓可信些。

使用特权

评论回复
9
明月小厨|  楼主 | 2013-12-20 17:01 | 只看该作者
ST的I2C的确不好用,关键是对ACK的处理;直接关系到标志位。
如果主控一方,只依自己的程序一步步操作完成,事情就会简单的多;
ACK的检测标志应该独立。甚至可以忽略。

而ST的处理方式则 是绑的太紧了;
不出事的时候,一切很正常,很简洁明了(理想化状态);
一旦出事(ACK丢失),你一时间真的不知道发生了什么。只能傻傻地等,死在这里不值啊;——容错性怎么考虑?
我考虑是用一个定时器,每次操作的时候启动定时器计时;
如果操作I2C的过程中很顺利,就不断复位定时器;一旦卡死了,定时器将超时中断,在定时器中断里想想有没有什么办法让程序回归正常,允许本次通讯失败。

使用特权

评论回复
10
明月小厨|  楼主 | 2013-12-20 17:39 | 只看该作者
ST的IIC处理有些特别的地方。
有的地方处理的很好,但对ACK的处理太过于理想化了;

使用特权

评论回复
11
胡火龙| | 2013-12-25 18:10 | 只看该作者
控制好时序,直接模

使用特权

评论回复
12
renqinglei| | 2013-12-25 19:27 | 只看该作者
感觉模拟的好用,一次就成功了,硬件的搞了好久还是搞不懂

使用特权

评论回复
13
lcmbeyond| | 2013-12-25 19:57 | 只看该作者
模拟也有现成的代码,和调用库感觉都差不多了

使用特权

评论回复
14
feilusia| | 2013-12-25 20:21 | 只看该作者
之前做STM8的硬件IIC做了两天没做出来,直接把51写过的模拟IIC的拿过来修修改改就能用了。
顺便问下双机通信为嘛不用串口呢?是不是串口已经用了。

使用特权

评论回复
15
ABHK| | 2013-12-25 20:36 | 只看该作者
应该都是相通的吧   这一块   感觉应该都是类似的

使用特权

评论回复
16
cgm88888| | 2013-12-26 09:48 | 只看该作者
用模拟的保险

使用特权

评论回复
17
ailing1314| | 2013-12-26 10:15 | 只看该作者
zet6的I2c调试成功,读写没问题,速度可达400k

使用特权

评论回复
18
ailing1314| | 2013-12-26 10:17 | 只看该作者
新人,问个问题,发个帖子,出不来验证什么问题

使用特权

评论回复
19
静止的黑暗| | 2013-12-26 12:48 | 只看该作者
IIC确实很**肋啊

使用特权

评论回复
20
xi_liang| | 2013-12-26 15:34 | 只看该作者
I2C根本没问题,是很多人不会用。至少我们跑的例程完全没问题。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
logokfu + 1 是的
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:爱你一万年

35

主题

1072

帖子

2

粉丝