12345 / 5 页下一页
返回列表
发新帖
[STM32F1]
血的经历告诉大家,慎用stm32的硬件iic
[复制链接]
74507|84
电梯直达
楼主
楼主|
摩天轮1111
发表于 2016-2-19 11:44
|
只看该作者
|倒序浏览
|阅读模式
硬件iic, STM32, DM, DMA, MPU
大前提,我这里是操作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有时候也是很完美,但是这只是个表象和开始,会有很多意想不到的问题出现,大家慎用
回复
收藏12
举报
相关帖子
• ADC读取电压偶尔突跳,像瞬间飘高几百毫伏
• SPI从设备响应延迟,主机读取前几个字节总是错
• ATFs 文件系统与 MDMA 结合使用 SD 卡时异常
• 2S 从模式下 I2S_DMAResume 无法同步
• 使用DMA采集ADC数据时通道切换出现奇怪漂移
• TIM触发ADC采样后DMA传输不连续
• STM32 IDE 存在 “表达式求值失败” 的异常问题
• STM32 IDE 中如何调出函数 / 变量的提示列表
• 深圳&上海 | STM32三相永磁同步电动机无位置传感器控制方案线下实训
• 看懂.map输出文件里面的小秘密 #申请原创#
沙发
MOn51
发表于 2016-2-19 12:05
|
只看该作者
今天才发现这个问题?一直就用模拟I2C。其他的外设倒是用硬件。不光STM32,早期的LPC的片子也有死机的问题。
回复
收藏12
举报
板凳
lx911gt
发表于 2016-2-19 13:03
|
只看该作者
虽然没用过STM32的硬件IIC,但是看了很多人说硬件IIC会频繁出现问题后就一直模拟IIC,自己切身实践虽然是好的,但是做项目的话会白白浪费很多时间,都说有问题那肯定不能好了,如果真想搞懂是什么问题还是在空闲的时候做实验吧,时间不充裕就老老实实模拟吧..............
回复
收藏12
举报
地板
拉普拉斯妖
发表于 2016-2-19 14:54
|
只看该作者
ST的硬件IIC因为要规避专利问题,做得比较奇怪。据说后面更新的F4等等会比较正常。不过一般都用习惯了模拟IIC
回复
收藏12
举报
5楼
294479435
发表于 2016-2-19 15:19
|
只看该作者
我也正想试试MPU6050,回去试试
回复
收藏12
举报
6楼
海中水
发表于 2016-2-19 15:22
|
只看该作者
唉!这个IIC我用的时候确实也害怕,各种问题。我这里不是迫不得已一般不用它。现在项目中用的IIC总线,心里也有余悸的。
回复
收藏12
举报
7楼
songchenping
发表于 2016-2-19 15:22
|
只看该作者
该反映给ST啊
回复
收藏12
举报
8楼
Roderman_z
发表于 2016-2-19 17:08
|
只看该作者
iic的速度不能快,快了就容易出问题,我现在都改用模拟的了
回复
收藏12
举报
9楼
金融小数
发表于 2016-2-19 17:17
|
只看该作者
用ST的硬件IIC时,千万不要用中断和DMA。用轮询就OK
回复
收藏12
举报
10楼
huangqi412
发表于 2016-2-19 17:59
|
只看该作者
姨妈贴老问题了
回复
收藏12
举报
11楼
df_flying
发表于 2016-2-19 19:29
|
只看该作者
F3的老问题了,基本硬件自带的官方库的例程都会多少有点问题,不过也有解决方案,F4要好的多。
回复
收藏12
举报
12楼
ayl439
发表于 2016-2-19 19:52
|
只看该作者
MARK!
回复
收藏12
举报
13楼
huaiqiao
发表于 2016-2-19 20:52
|
只看该作者
是的,所以也没有用硬件的iic
回复
收藏12
举报
14楼
w189708929
发表于 2016-2-20 08:42
|
只看该作者
硬件的iic不敢用
回复
收藏12
举报
15楼
forgot
发表于 2016-2-20 10:33
|
只看该作者
呵呵,很早就听说I2C问题了
回复
收藏12
举报
16楼
LguoFu
发表于 2016-2-20 10:50
|
只看该作者
我现在使用模拟I2C,遇到这样的问题请问怎样解决?由于要存很多记录,每天电压的最大值,最小值,电流最大值,最小值等待。中断也很多,记录中时而有乱的,我估计是I2C被中断了,请问这样的问题怎样解决?I2C操作的时候关闭总中断吗?
回复
收藏12
举报
17楼
楼主|
摩天轮1111
发表于 2016-2-20 11:45
|
只看该作者
LguoFu 发表于 2016-2-20 10:50
我现在使用模拟I2C,遇到这样的问题请问怎样解决?由于要存很多记录,每天电压的最大值,最小值,电流最大 ...
我现在测试的是模拟iic,这里打断用的是30us长的中断,我没有测试更长的,打断频率是15khz,你要是出问题,将你中断的打断时间缩短,或者你的iic通讯要是没有不能放最高优先级,你就放最高优先级,不让被打断,或者中间优先级,尽量少被打断
回复
收藏12
举报
18楼
lvyunhua
发表于 2016-2-20 21:31
|
只看该作者
多谢楼主的分享!
回复
收藏12
举报
19楼
nametony
发表于 2016-2-20 22:01
|
只看该作者
自己遇到问题, 自己解决不了, 就劝人家慎用, 实在好讨厌!
如果你摆出了事实证明STM32硬件I2C有问题, 那是立功, 否则别胡言乱语误导人!
STM32F103 & STM32F104 I2C设计的确啰嗦(STM32F030 I2C 就简单易用), 但也只是多花点时间看资料而已.
我第一个STM32项目恰巧是STM32F103ZET+MPU6050+HMC5883L+GPS+.., 是硬件I2C, 且中断读取, 运行几年了, 不见有什么问题啊
回复
收藏12
举报
20楼
moyanming2013
发表于 2016-2-20 22:33
|
只看该作者
nametony 发表于 2016-2-20 22:01
自己遇到问题, 自己解决不了, 就劝人家慎用, 实在好讨厌!
如果你摆出了事实证明STM32硬件I2C有问题, 那是立 ...
上些代码看看
回复
收藏12
举报
下一页 »
12345 / 5 页下一页返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖 登录 | 注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
技术新星奖章
人才类勋章
欢快之小溪
发帖类勋章
技术奇才奖章
人才类勋章
伴坛终老
时间类勋章
社区建设奖章
等级类勋章
经常做客
时间类勋章
技术导师奖章
人才类勋章
十世金身
时间类勋章
奔腾之江水
发帖类勋章
无冕之王奖章
等级类勋章
技术高手奖章
人才类勋章
缘定三生
时间类勋章
湍急之河流
发帖类勋章
精华达人奖章
等级类勋章
终身成就奖章
等级类勋章
坚毅之洋流
发帖类勋章
技术领袖奖章
人才类勋章
七世轮回
时间类勋章
沉静之湖泊
发帖类勋章
突出贡献奖章
等级类勋章
核心会员奖章
等级类勋章
偶尔光临
时间类勋章