你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
使用STM32的SPI和I2C时,用I/O口模拟还是片内外设?
[复制链接]
lkl0305
提问时间:2015-1-7 21:57 /
问答
是否解决:
大家一起来聊一聊在用STM32的SPI和I2C时,用I/O口模拟多些还是片内外设,用查询方式还是中断方式。
单选投票
, 共有 66 人参与投票
投票已经结束
1. 1、I/O口模拟
42.42%
(28)
2. 2、片内外设,查询方式
22.73%
(15)
3. 2、片内外设,中断方式
34.85%
(23)
您所在的用户组没有投票权限
赞
0
收藏
0
评论
19
分享
发布时间:2015-1-7 21:57
举报
请先
登录
后回复
19个回答
拼命三郎
回答时间:2015-1-8 09:24:34
a1024a.1 32b0c
stm32的IIC没试过,SPI用的是硬件,因为做从机嘛,要是模拟的话,CPU就干不了别的活了。
赞
0
评论
回复
大秦正声
回答时间:2015-1-8 10:06:34
a1024a.1 32b0c
i2c模拟
spi用硬件好
赞
0
评论
回复
qianfan
回答时间:2015-1-8 11:04:14
a1024a.1 32b0c
这个问题的选项设置的。。。一般都是SPI使用硬件,IIC使用软件模拟
赞
0
评论
回复
埃斯提爱慕
回答时间:2015-1-8 11:37:53
a1024a.1 32b0c
提示:
作者被禁止或删除 内容自动屏蔽
赞
0
评论
回复
ustcyinghuan
回答时间:2015-1-8 11:50:01
a1024a.1 32b0c
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的设置有一定的不可预料性。
赞
0
评论
回复
hl1980
回答时间:2015-1-8 15:02:51
a1024a.1 32b0c
总感觉I2C硬件调试时很容易出问题,可能是文档还没看透吧!
赞
0
评论
回复
sasmike
回答时间:2015-1-8 15:53:13
a1024a.1 32b0c
初级的,还是感觉模拟的心理踏实些,可能是用惯了51单片机吧。
赞
0
评论
回复
lhb292
回答时间:2015-1-9 19:13:20
a1024a.1 32b0c
IIC还是模拟stm32的标志位上有bug,SPI和USART还是DMA方式比较好。
赞
0
评论
回复
万里-363223
回答时间:2015-1-10 08:49:44
a1024a.1 32b0c
SPI用硬件,I2C模拟好
赞
0
评论
回复
smcdh
回答时间:2015-1-11 07:57:16
a1024a.1 32b0c
之前做一个项目要用到IIC,先是用硬件IIC结果老是有问题,没办法只能换成软件模拟IIC,网上也有很多人说硬件IIC好像有点问题
赞
0
评论
回复
lkl0305
回答时间:2015-1-11 09:21:33
a1024a.1 32b0c
看来I2C硬件还是不好做的
赞
0
评论
回复
hanmcustm
回答时间:2015-1-12 19:15:08
a1024a.1 32b0c
使用内部的IIC调试太麻烦了,花的时间太多。
赞
0
评论
回复
lx09110718
回答时间:2015-1-13 10:43:40
a1024a.1 32b0c
弱弱的问一句,什么是用硬件,什么是用模拟?
赞
0
评论
回复
fhliujie
回答时间:2015-1-13 15:18:27
a1024a.1 32b0c
我的感觉也是IIC用模拟,我现在是用ST提供的库,虽然可以读到IIC的数据,但板子上批量后,发现有些问题,有时读出的数据是错的。准备改成模拟,但还没有动手改。
赞
0
评论
回复
1
2
/ 2 页
下一页
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
spi用硬件好
但是在我看来在一个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的设置有一定的不可预料性。