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

2019-12-12 18:09发布

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

望对这个问题有经验的朋友们不吝赐教!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
93条回答
szszjdb
1楼-- · 2019-12-12 20:10
有朋友了解这个问题吗?
mll2015
2楼-- · 2019-12-12 22:19
我用STM32F103按照手册编写了IIC通信,未使用DMA,通信OK呀。
szszjdb
3楼-- · 2019-12-13 04:08
 精彩回答 2  元偷偷看……
ycping
4楼-- · 2019-12-13 06:37
如果你的系统只有个iic功能,那模拟可能不影响。
如果进程多了绝对是大影响。别人都在纠结哪个中断先响应,你却让系统暂停ms级别去读个iic。那相当于你坐个火车,每个站都停2小时,你愿意不?
硬件IIC很好用。用心调式一下就行了。
s1j2h3
5楼-- · 2019-12-13 08:14
其硬件应该是没问题的,网上很多人说有问题只不过是使用不当或对其理解不够
szszjdb
6楼-- · 2019-12-13 09:51
ycping 发表于 2017-3-3 08:37
如果你的系统只有个iic功能,那模拟可能不影响。
如果进程多了绝对是大影响。别人都在纠结哪个中断先响应, ...

其实没有停顿呀。这里I2C等待的时间是无法省掉的。比如大多数情况下,读、写I2C一个参数,再根据此参数进行下一步行动,不管用硬件查询、中断、DMA或是模拟I2C,都要等到从器件返回结果后再进行。另外在模拟I2C收发数据时,其他关键中断仍然执行,不影响系统实时性。且在有操作系统时,将模拟I2C中延时函数用系统延时代替,甚至不影响关键任务切换。
不知我这样分析是否可行?

一周热门 更多>