再问STM32的硬件I2C与软件模拟

2019-12-12 18:09发布

坛里的帖子看了很多,大致了解了STM32的硬件I2C的确有一些BUG,或者说使用时有很多不方便满足的要求,比如DMA加最高中断。所以思考是否使用模拟方式替代。但有种观点是模拟I2C太耗资源。我认真分析了下,其实大部分I2C读写操作在程序中都是顺序类型的,及当读、写I2C从机时,必须读、写到想要的数据才能继续往下执行,如果其中出错,还必须重新来过。所以不管是用硬件查询,中断,DMA等方式还是模拟方式,都必须等待从机完成,所花时间决定与I2C速度和从机响应速度。如果可以这么理解,是否可以说其实模拟方式没有任何风险,速度差不多,故而是最好的选择?

望对这个问题有经验的朋友们不吝赐教!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
93条回答
lzly0302
1楼-- · 2019-12-22 22:12
liaoze22 发表于 2017-3-7 07:49
硬件IC2的确很头疼,我也为此调了很久,也纠结了很长一段时间,到底是软件模拟好呢,还是硬件I2C好呢,最后 ...

硬件I2C加DMA读写的话有用上中断了么,还有串口频繁读写也试了不影响硬件I2C?
fengyunyu
2楼-- · 2019-12-23 03:26
软件模拟更可靠些
liaoze22
3楼-- · 2019-12-23 06:30
lzly0302 发表于 2017-5-25 15:53
硬件I2C加DMA读写的话有用上中断了么,还有串口频繁读写也试了不影响硬件I2C? ...

是需要中断的,优先级要设高一些,否则会死掉,串口读写基本不会影响,用不用DMA需要看使用场合
gpfrank
4楼-- · 2019-12-23 06:35
 精彩回答 2  元偷偷看……
gpfrank
5楼-- · 2019-12-23 08:28
F1,F2,F4虽然开DMA加最高中断可以解决所有问题。 这个场景已经局限了很多应用了。 如果用F1,F2,F4系列,个人建议还是使用IO口模拟。另外加个小的OS或者自己做个软定时器一起协作,其实IIC并没有比硬件的差。至少我的系统DMA没有空给IIC,最高优先级也不允许,我没5分钟就要读写一次IIC, 如果用ST硬件的IIC,跑不了多久就挂掉了。改用模拟,加简单OS。完全OK。
mmswza
6楼-- · 2019-12-23 09:14
只遇到 F1 有问题,容易挂,挂了只能下电再上电。

F2 没用过。

F0/F3/F4 虽然也不够好,但目前确实没有遇到容易卡住的情况。

一周热门 更多>