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

使用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使用软件模拟
dsjsjf 回答时间:2015-1-8 11:37:53
SPI用硬件,IIC硬件没用起来
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模拟好
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版