发新帖我要提问
12
返回列表
打印

如何将stm32的1个SPI接口4个设备呢?

[复制链接]
楼主: worldsing
手机看帖
扫描二维码
随时随地手机跟帖
21
worldsing|  楼主 | 2010-8-19 14:02 | 只看该作者 回帖奖励 |倒序浏览
不是我以为一定要专用的CS信号才能实现我要的功能,我只是想SPI自己的CS和普通IO与SPI的CLK同步的问题
,它两会不会有区别

使用特权

评论回复
22
worldsing|  楼主 | 2010-8-19 14:04 | 只看该作者
请看我在4楼说的:
我在NXP的2131上试过,不用SPI总线的CS信号,用管脚单独模拟这个管脚,发现时序有误
不知道,按照我说的方式在stm32上行不行?

使用特权

评论回复
23
worldsing|  楼主 | 2010-8-19 14:09 | 只看该作者
我的问题是:在发送数据之前可以配置4个CS中的任意一个,这样不麻烦吗?与在发送数据之前配置4个I/O中的任意一个有什么区别?

为什么一定要专门的CS?专门的CS有什么功能是普通I/O不能实现的? ...
香水城 发表于 2010-8-19 12:37


麻烦的好处是SPI专用的CS能保证同步,且没有延时,普通IO能做到吗?不是一定要用专用的CS,只是考滤准确性和效率而以。

使用特权

评论回复
24
香水城| | 2010-8-19 14:15 | 只看该作者
1)你说“在NXP的2131上试过,发现时序有误”,是怎么样的误差?

2)你说“麻烦的好处是SPI专用的CS能保证同步,且没有延时”,你能画一个时序图吗? 我不懂你说的保证同步是什么意思。

3)7楼说“这样且不是麻烦嘛”,请解释一下怎么麻烦,与专用的CS相比,麻烦在哪里?

使用特权

评论回复
25
worldsing|  楼主 | 2010-8-19 14:28 | 只看该作者
1),2)误差就是普通IO方式的CS信号没有和SPI总线同步,即CS信号有延迟。
                 __      __     __      __     __      __     __      __
CLK_____|   |__|   |__|   |__|   |__|   |__|   |__|   |__|   |_____
          _______                                                                          ______
IO_CS              |____________________________________|


3)他说的是外扩模拟开关,这不算麻烦吗?

使用特权

评论回复
26
香水城| | 2010-8-19 14:49 | 只看该作者
使用普通IO方式的CS信号,操作肯定是这样的:
IO_CS = 0;  <--- 这里已经把IO_CS拉低了,此时SPI发送还没有启动,当然也没有时钟信号。
SPI_Send();  <-- 这里才会有时钟,怎么会有你画的这种时序呢? STM32可没有这么慢
IO_CS = 1;

至于说外扩模拟开关,这是绝对地没有必要,:$

使用特权

评论回复
27
worldsing|  楼主 | 2010-8-19 15:05 | 只看该作者
呵呵,25楼的波形是我在LPC2131样做出来的,
IO_CS = 0;  
delay_ms(1);
SPI_Send();  
delay_ms(1);
IO_CS = 1;

中间还加了延时了,得改成delay_ms(3);基本可以 , 这样效率就低了
但是用它自己的CS很好

使用特权

评论回复
28
香水城| | 2010-8-19 15:17 | 只看该作者
呵呵,STM32不会这么慢,直接这样写即可:

IO_CS = 0;  
// delay_ms(1);  <-- 多余
SPI_Send();  
// delay_ms(1);  <-- 多余
IO_CS = 1;

你可以自己试一下。

使用特权

评论回复
29
ybing| | 2010-8-19 19:25 | 只看该作者
不明白为什么运行27楼的程序会得出25楼的波形。
正有项目需要用SPI连接4个SPI从设备,也打算使用香主的方法,用4个I/O口分别连SPI从设备的CS引脚。但愿不会出现楼主这样的情况,呵呵!

使用特权

评论回复
30
lxyppc| | 2010-8-19 20:44 | 只看该作者
楼主25的波形是想象的还是实际工作的情况
如果STM32的实际工作情况是这样估计我老板马上就要来找我麻烦了

使用特权

评论回复
31
AD9851| | 2010-8-19 21:21 | 只看该作者
香主理解是对的
楼主理解是有误的
27楼程序可以用,28楼也是可以的
:D

使用特权

评论回复
32
worldsing|  楼主 | 2010-8-19 22:44 | 只看该作者
楼主25的波形是想象的还是实际工作的情况
如果STM32的实际工作情况是这样估计我老板马上就要来找我麻烦了
lxyppc 发表于 2010-8-19 20:44


我画的那个波形是有在LPC2131上用逻辑分析仪测出来的,在这画的可能有点夸张了,但是实测的就是延迟了55%c以上的时钟周期

在stm32上没有实测过,只是考滤换成它,所以来这问香主

使用特权

评论回复
33
worldsing|  楼主 | 2010-8-19 22:45 | 只看该作者
香主理解是对的
楼主理解是有误的
27楼程序可以用,28楼也是可以的
:D
AD9851 发表于 2010-8-19 21:21


哪有误呢?请指教,谢谢

使用特权

评论回复
34
worldsing|  楼主 | 2010-8-19 22:51 | 只看该作者
不明白为什么运行27楼的程序会得出25楼的波形。
正有项目需要用SPI连接4个SPI从设备,也打算使用香主的方法,用4个I/O口分别连SPI从设备的CS引脚。但愿不会出现楼主这样的情况,呵呵! ...
ybing 发表于 2010-8-19 19:25


这样理论上是可行的,看IO的速率和总线,在stm32下我还没条件试这个呢,ybing如果调出来了,分享一下心得,谢谢,呵呵

使用特权

评论回复
35
香水城| | 2010-8-20 08:32 | 只看该作者
我画的那个波形是有在LPC2131上用逻辑分析仪测出来的,在这画的可能有点夸张了,但是实测的就是延迟了55%c以上的时钟周期

在stm32上没有实测过,只是考滤换成它,所以来这问香主 ...
worldsing 发表于 2010-8-19 22:44



哈哈,看来楼主曾经被蛇咬过,:lol

STM32的SPI模块,作为主设备时就没有CS信号输出,只能使用普通I/O引脚做CS信号,如果有你说的那种时序的问题,ST的工程师不是也太傻了吗?:shutup:

使用特权

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

本版积分规则