STM32 硬件I2C 到底是不是个坑?
来源:互联网 发布:linux快速入门教程 编辑:程序博客网 时间:2024/04/29 18:30
/********************************************************************************* @author Maoxiao Hu* @version V1.0.0* @date May-2015******************************************************************************* < COPYRIGHT 2015 ISE of SHANDONG UNIVERSITY >********************************************************************************/
调试STM32的硬件I2C已经有很长一段时间了,几乎搜遍了所有资料,对于其到底能不能正常工作,今天做一个彻底的研究。
下面是我在测试中得到的几个结论:
1、硬件I2C的CLK在50kHz及以下的情况下工作,不会出现任何情况下的卡住。(本人测试时间为20h)
2、硬件I2C的CLK在常用的100kHz和400KHz下工作,99%的概率下会在1小时之内卡住,甚至只有几十秒。
3、硬件I2C的CLK在任何频率下工作,在读取或者发送数据时,都绝对不允许其它中断事件打断它的工作,否则一定会卡住,只是时间问题。
综上,硬件I2C的稳定工作情况是:工作在50kHz及以下,并且保证无其它任何中断打断它的工作。这样只适用于某些对速率要求不高的场所,比如EEPROM的读取等,而对于高速器件例如某些型号的AD芯片,就不能用了。
如果你一定需要高速率(400KHz),那么推荐大家使用STM32的替代方案GD32(兆易创新),它与STM32完全兼容但是解决了STM32的硬件I2C bug,经过本人实际测试,在400KHz的情况下工作,48小时无任何错误发生。但是仍需注意的是不能有外部中断打断I2C的工作。
对于ST公司推荐的将I2C工作在DMA和最高优先级的中断,我只能说大家可以根据自己的情况使用,因为如果你使用了ucos ii或者其它实时操作系统,那么这种设置最高优先级的方式是绝对不推荐的。如果你是裸机程序,并且任务数量不多,可以考虑这种DMA+中断的方式,否则一定会出现问题,只是测试时间长短问题。
最后需要说明的是:
(1)以上只是考虑了最纯粹的硬件I2C代码,对于某些使用了软件弥补的方法,例如在经常卡住的部分设置超时退出,不在本文的讨论范围内,因为这样已经破坏了正常的I2C协议。
(2)由于使用STM32的较高境界是使用中断调度任务而不是死等循环,而硬件I2C对于中断打断十分忌讳,所以随着你的编程和对操作系统理解水平的提高,你会越来越感觉STM32硬件I2C是个坑。
所以,STM32的硬件I2C确实是个坑,可以正常工作的环境要求十分苛刻,所以本人现在已转而使用GD32芯片。
来源于http://www.cnblogs.com/humaoxiao,转载请注明出处。
- STM32 硬件I2C 到底是不是个坑?
- STM32的硬件I2C到底坑不坑?
- STM32--硬件I2C-2402
- STM32--硬件I2C-2402
- STM32 I2C硬件
- 关于STM32的I2C硬件DMA实现
- STM8/STM32硬件I2C读取APDS9930程序代码
- STM32 硬件I2C EEPROM命令解析
- STM32的硬件I2C与AT24C16
- STM32中FSMC与硬件I2C冲突
- STM32’s I2C 硬件BUG引发的血案(qzm)
- STM32’s I2C 硬件BUG引发的血案(qzm)
- STM32 I2C 硬件中断方式实现方法,带流程图
- STM32硬件i2c调试24C16记录(挣扎一天)
- STM32’s I2C 硬件BUG引发的血案
- 关于STM32的HAL库硬件I2C简单调试
- STM32’s I2C 硬件BUG引发的血案
- 基于 STM32 的硬件 I2C 读取 MPU6050 数据
- hdu3264 Balanced Lineup (RMQ查询最大值和最小值的差)
- Python新手学习基础之运算符——成员运算与身份运算
- 选用灰度线性拉伸进行图像增强,应用八方向的sobel算子得到边缘检测图像。
- CFont用法 CFont 使用详解
- 九余数法
- STM32 硬件I2C 到底是不是个坑?
- 【海伦公式_利用三角形三边长求面积】
- 来,做一个问卷调查(有抽奖!)
- Pro JPA2读书笔记系列(二)-第二章(入门)
- 编译错误收集
- windows 上使用virtualenv进行python多版本转换
- 颜色HSL(色调,饱和度,亮度)
- 浅谈web应用的负载均衡、集群、高可用(HA)解决方案
- URL和URI的区别