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

2019-12-12 18:09发布

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

望对这个问题有经验的朋友们不吝赐教!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
93条回答
int
1楼-- · 2019-12-19 05:20
godsend 发表于 2017-3-11 15:38
我没有使用DMA中断,发送之前使用I2C_BUSY来检查总线

那调用I2C1_ReceiveData时,怎么判断什么时候接受完成了呢?
XA144F
2楼-- · 2019-12-19 07:31
stm32的iic不好使,atmel和nxp的倒是做的很好,所以stm32我都用模拟方式或者查询法,有什么错误直接忽略。
godsend
3楼-- · 2019-12-19 11:02
int 发表于 2017-3-11 21:50
那调用I2C1_ReceiveData时,怎么判断什么时候接受完成了呢?

这函数在这里并不是接收I2C数据的作用,而是读取一次清空RX_BUFF的内容,防止接收数据不更新。
int
4楼-- · 2019-12-19 12:16
 精彩回答 2  元偷偷看……
security
5楼-- · 2019-12-19 17:39
本帖最后由 security 于 2017-3-13 09:57 编辑
szszjdb 发表于 2017-3-11 16:45
看了您推荐的链接,讲的非常清楚,多谢!  我这里提出的观点是用模拟方式相比硬件方式,对系统效率的影响 ...


这要分场合:
  - 对于你的应用场景,整个软件逻辑流程,需要多次的 Master 和 Slave 的交互,一般这个软件逻辑流程都设计为同步阻塞模型,所以从这个角度来看, CPU 的利用率,没太大差异。恰恰这也是 I2C 总线使用最频繁的应用场景。
  - 如果对于批量数据传输的话,那么 DMA 的优势就体现出来了,这其中的道理,我想你应该知道。
我没用过 STM32,但从理论上讲,具备硬件模块的,我会优先选择硬件。
fuu
6楼-- · 2019-12-19 23:12
很有参考价值的帖子,有时间也试试硬件I2C

一周热门 更多>