你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用STM32的SPI和I2C时,用I/O口模拟还是片内外设?

[复制链接]
lkl0305 提问时间:2015-1-7 21:57 /
大家一起来聊一聊在用STM32的SPI和I2C时,用I/O口模拟多些还是片内外设,用查询方式还是中断方式。
单选投票, 共有 66 人参与投票

投票已经结束

42.42% (28)
22.73% (15)
34.85% (23)
您所在的用户组没有投票权限
收藏 评论19 发布时间:2015-1-7 21:57

举报

19个回答
拼命三郎 回答时间:2015-1-8 09:24:34
stm32的IIC没试过,SPI用的是硬件,因为做从机嘛,要是模拟的话,CPU就干不了别的活了。
大秦正声 回答时间:2015-1-8 10:06:34
i2c模拟
spi用硬件好
qianfan 回答时间:2015-1-8 11:04:14
这个问题的选项设置的。。。一般都是SPI使用硬件,IIC使用软件模拟
埃斯提爱慕 回答时间:2015-1-8 11:37:53
提示: 作者被禁止或删除 内容自动屏蔽
ustcyinghuan 回答时间:2015-1-8 11:50:01
STM32的硬件I2C很多人都对它望而却步,大部分就按上面介绍的那样,最后都使用GPIO模拟I2C。当然模拟I2C肯定还是好用的。
但是在我看来在一个72M的Cortex-M3的MCU上这样做非常不妥。一般来说I2C是一种慢速总线,就算工作在400kHz的快速模式上,I2C传送每个字节仍需要至少23us左右(不包括地址、起始信号和结束信号的发送)。
如果使用GPIO模拟的I2C,这23us的CPU时间都在空转。
系统中的这23us还是可以做很多事的。
那么,在STM32上I2C还是使用硬件是否就不能实现呢,尽管缺点还是有的(BUG、不稳定、死机等等)。

STM32的硬件I2C有两个和数据有关的寄存器“数据寄存器(Data register)”(DR)和“数据移位寄存器(Data shift register)”(DSR),我们的软件写入的是DR, DSR用于I2C数据的移位发送和接收,DR和DSR的数据交换由硬件控制——发送时DSR为空,DR不为空时,硬件自动把DR的数据写进DSR;接收时DR为空,DSR不为空,硬件自动把DSR数据写进DR。连续数据传输时,这样两个寄存器的数据交换使得软件读出和写入DR不会影响I2C总线中的数据接收和发送,使I2C的效率更高。(这段话,在手册中可以看到!!!)


那么,

1、硬件上,DR和DSR的交换机制存在缺陷。

2、软件上,因为DR和DSR一共能容纳两个字节的数据,导致接收时候NACK的设置有一定的不可预料性。
hl1980 回答时间:2015-1-8 15:02:51
总感觉I2C硬件调试时很容易出问题,可能是文档还没看透吧!
sasmike 回答时间:2015-1-8 15:53:13
初级的,还是感觉模拟的心理踏实些,可能是用惯了51单片机吧。
lhb292 回答时间:2015-1-9 19:13:20
IIC还是模拟stm32的标志位上有bug,SPI和USART还是DMA方式比较好。
万里-363223 回答时间:2015-1-10 08:49:44
SPI用硬件,I2C模拟好
smcdh 回答时间:2015-1-11 07:57:16
之前做一个项目要用到IIC,先是用硬件IIC结果老是有问题,没办法只能换成软件模拟IIC,网上也有很多人说硬件IIC好像有点问题
lkl0305 回答时间:2015-1-11 09:21:33
看来I2C硬件还是不好做的
hanmcustm 回答时间:2015-1-12 19:15:08
使用内部的IIC调试太麻烦了,花的时间太多。
lx09110718 回答时间:2015-1-13 10:43:40
弱弱的问一句,什么是用硬件,什么是用模拟?
fhliujie 回答时间:2015-1-13 15:18:27
我的感觉也是IIC用模拟,我现在是用ST提供的库,虽然可以读到IIC的数据,但板子上批量后,发现有些问题,有时读出的数据是错的。准备改成模拟,但还没有动手改。
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版