打印
[STM32F1]

血的经历告诉大家,慎用stm32的硬件iic

[复制链接]
67728|84
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
摩天轮1111|  楼主 | 2016-2-19 11:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      大前提,我这里是操作mpu6050,如果是操作eeprom是没有问题的,基本随便怎么干都没问题,操作mpu6050有问题的朋友可以过来看看,      这里在硬件iic上前前后后花费了很多的时间和功夫,中间也遇到各种问题也解决了各种问题,我硬件iic都已经用到了dma去操作了,dma操作,或者是硬件iic操作有点好处就是外设自己的发数过程中,不占cpu的,这时候别的中断进来了,可以去跑cpu运算,总的来看cpu效率很高,模拟的就不是了,
      我从一般的硬件iic到中断,到dma里面的全都做过了,其实单独跑,没有别的中断,没有别的任务去干扰它,那跑几天都没有一点的问题,当有了别的任务,别的高优先级的中断之后,问题就比较多了,各种奇葩奇怪的问题,有时候竟然就是替换一个配置函数的顺序就能解决了,有时候又是打断它的中断函数时间过长了(30us中断来打断硬件iic算中断时间过长了会导致和mpu工作的iic出问题,这里注意是mpu6050)然后我把打断iic的中断我分段了,每个都是20us多,可以跑一下午了,但是如果后面只是因为多加了一些判别句在里面,居然也会导致硬件iic一会之后死掉,如果不加,它也能跑好几天不死,至少我是跑过一下午等等的,
      总结一句就是硬件iic操作的时候,很多你看似逻辑没有问题的操作,可能哪里就影响到它的硬件iic了,
     于是于是今天上午换了模拟iic,模拟iic的速度要自己去调,但是调好了也是挺快的,操作mpu6050可以被中断打断,我这里实验的是被32.5us的10khz的中断打断,工作到现在没出问题,下午继续观察观察,

      这里告诉一些朋友,仅供参考,硬件iic慎用,因为很多时候我遇到问题了,总是能通过一些手段去解决,譬如是打断iic的中断时间过长,我缩减时间,(实际上我iic用的dma,多数据收发时候,其他的中断打不断的,这里我也解释不清楚的,看iic时序和模拟的很不一样,是压根没有打断的部分存在的)但是总是出些问题,总是去擦屁股不好弄,
      我一开始很坚信st的硬件iic没有bug,毕竟也是,很多说有bug的人都是人云亦云,自己没有尝试就去随大流这么说,我这里前前后后在硬件iic琐碎估计也有半年时间了,半年时间了我也写了很多硬件iic的函数,但是切记一点,我目前的经验就是,如果单独的硬件iic,或者中断里面优先级最高,或者没有多任务,多操作的话,st的硬件iic工作的很完美,但是多任务多操作之后,使用dma的iic有时候也是很完美,但是这只是个表象和开始,会有很多意想不到的问题出现,大家慎用
沙发
MOn51| | 2016-2-19 12:05 | 只看该作者
今天才发现这个问题?一直就用模拟I2C。其他的外设倒是用硬件。不光STM32,早期的LPC的片子也有死机的问题。

使用特权

评论回复
板凳
lx911gt| | 2016-2-19 13:03 | 只看该作者
虽然没用过STM32的硬件IIC,但是看了很多人说硬件IIC会频繁出现问题后就一直模拟IIC,自己切身实践虽然是好的,但是做项目的话会白白浪费很多时间,都说有问题那肯定不能好了,如果真想搞懂是什么问题还是在空闲的时候做实验吧,时间不充裕就老老实实模拟吧..............

使用特权

评论回复
地板
拉普拉斯妖| | 2016-2-19 14:54 | 只看该作者
ST的硬件IIC因为要规避专利问题,做得比较奇怪。据说后面更新的F4等等会比较正常。不过一般都用习惯了模拟IIC

使用特权

评论回复
5
294479435| | 2016-2-19 15:19 | 只看该作者
我也正想试试MPU6050,回去试试

使用特权

评论回复
6
海中水| | 2016-2-19 15:22 | 只看该作者
唉!这个IIC我用的时候确实也害怕,各种问题。我这里不是迫不得已一般不用它。现在项目中用的IIC总线,心里也有余悸的。

使用特权

评论回复
7
songchenping| | 2016-2-19 15:22 | 只看该作者
该反映给ST啊

使用特权

评论回复
8
Roderman_z| | 2016-2-19 17:08 | 只看该作者
iic的速度不能快,快了就容易出问题,我现在都改用模拟的了

使用特权

评论回复
9
金融小数| | 2016-2-19 17:17 | 只看该作者
用ST的硬件IIC时,千万不要用中断和DMA。用轮询就OK

使用特权

评论回复
10
huangqi412| | 2016-2-19 17:59 | 只看该作者
姨妈贴老问题了

使用特权

评论回复
11
df_flying| | 2016-2-19 19:29 | 只看该作者
F3的老问题了,基本硬件自带的官方库的例程都会多少有点问题,不过也有解决方案,F4要好的多。

使用特权

评论回复
12
ayl439| | 2016-2-19 19:52 | 只看该作者
MARK!

使用特权

评论回复
13
huaiqiao| | 2016-2-19 20:52 | 只看该作者
是的,所以也没有用硬件的iic

使用特权

评论回复
14
w189708929| | 2016-2-20 08:42 | 只看该作者
硬件的iic不敢用

使用特权

评论回复
15
forgot| | 2016-2-20 10:33 | 只看该作者
呵呵,很早就听说I2C问题了

使用特权

评论回复
16
LguoFu| | 2016-2-20 10:50 | 只看该作者
我现在使用模拟I2C,遇到这样的问题请问怎样解决?由于要存很多记录,每天电压的最大值,最小值,电流最大值,最小值等待。中断也很多,记录中时而有乱的,我估计是I2C被中断了,请问这样的问题怎样解决?I2C操作的时候关闭总中断吗?

使用特权

评论回复
17
摩天轮1111|  楼主 | 2016-2-20 11:45 | 只看该作者
LguoFu 发表于 2016-2-20 10:50
我现在使用模拟I2C,遇到这样的问题请问怎样解决?由于要存很多记录,每天电压的最大值,最小值,电流最大 ...

我现在测试的是模拟iic,这里打断用的是30us长的中断,我没有测试更长的,打断频率是15khz,你要是出问题,将你中断的打断时间缩短,或者你的iic通讯要是没有不能放最高优先级,你就放最高优先级,不让被打断,或者中间优先级,尽量少被打断

使用特权

评论回复
18
lvyunhua| | 2016-2-20 21:31 | 只看该作者
多谢楼主的分享!

使用特权

评论回复
19
nametony| | 2016-2-20 22:01 | 只看该作者
自己遇到问题, 自己解决不了, 就劝人家慎用, 实在好讨厌!
如果你摆出了事实证明STM32硬件I2C有问题, 那是立功, 否则别胡言乱语误导人!
STM32F103 & STM32F104 I2C设计的确啰嗦(STM32F030 I2C 就简单易用), 但也只是多花点时间看资料而已.
我第一个STM32项目恰巧是STM32F103ZET+MPU6050+HMC5883L+GPS+.., 是硬件I2C, 且中断读取, 运行几年了, 不见有什么问题啊

使用特权

评论回复
20
moyanming2013| | 2016-2-20 22:33 | 只看该作者
nametony 发表于 2016-2-20 22:01
自己遇到问题, 自己解决不了, 就劝人家慎用, 实在好讨厌!
如果你摆出了事实证明STM32硬件I2C有问题, 那是立 ...

上些代码看看

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

224

帖子

15

粉丝