OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13416|回复: 7

请教SPI 1条时钟线和1条双向数据线(BIDIMODE=1)

[复制链接]

35

主题

152

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
312
金钱
312
注册时间
2013-6-26
在线时间
0 小时
发表于 2013-8-22 11:16:24 | 显示全部楼层 |阅读模式
从STM的官方例子来看,就和一主一从,单向通讯没什么分别。这个“1条时钟线和1条双向数据线(BIDIMODE=1)”功能,怎么看都是两个模块互为主从才显得有意义的吧,难道我又歪歪过头了?如果要互为主从,那么该如何配置呢,使用库函数,不知有没有朋友做过,希望给点指引。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-22 11:24:24 | 显示全部楼层
没遇到要这么用的情况,遇到了再说。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

26

主题

280

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2013-8-2
在线时间
279 小时
发表于 2013-8-22 12:00:39 | 显示全部楼层
我的理解是这样的:就好比单向车道和双向车道。单向车道是定死一个方向。如果你想从A到B,这时你上A到B的车道跟上AB双向车道是一样的,但是如果你想从B到A,那只能双向车道。
博客:http://blog.csdn.net/feilusia
CC2541群(127442605);CC2640群(557278427);
Android群(541462902);STM8/STM32群(164311667);
Linux群(512598061);职场交流群(450154342);
回复 支持 反对

使用道具 举报

35

主题

152

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
312
金钱
312
注册时间
2013-6-26
在线时间
0 小时
 楼主| 发表于 2013-8-22 13:30:57 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,没遇到这么用的情况没关系的,我们来纸上谈兵也可以嘛。我稍稍做了个实验,更加不明白这种模式的用意了。我用高级模式上个图。
回复 支持 反对

使用道具 举报

35

主题

152

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
312
金钱
312
注册时间
2013-6-26
在线时间
0 小时
 楼主| 发表于 2013-8-22 13:41:44 | 显示全部楼层


我是这么想的,如果考虑STM32作为主机工作在这种双向单线模式的话,发送肯定没有问题,因为从主机的MOSI出去,时钟也能主动的发送出去,问题是既然是双向,那就是可以在某些时刻从MOSI上得到数据。但是SPI中时钟只有主机发送,SPI中任何时刻也只有一个主机,如果STM32要收,也必须输出时钟才行。那么说来,不是收发都得主动输出时钟了吗,这个在全双工中很正常,STM32作为主机可以通过发送一些东西引发时钟的产生,从而接收;但在单工时应该就不能这么干了吧,因为主机发送用的就是MOSI,一条线不可能同时发送接收,那么该如何引发时钟就是问题的核心了。
回复 支持 反对

使用道具 举报

35

主题

152

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
312
金钱
312
注册时间
2013-6-26
在线时间
0 小时
 楼主| 发表于 2013-8-22 13:53:00 | 显示全部楼层
自己回复,又做了一试验,回答上面的问题,主机作为单线双向接收时,持续发出时钟,与全双工不同,不需要任何引发,大概是这样吧。感觉也与自己的推测一致。
SPI_InitTypeDef SPI_InitStructure;
 SPI_InitStructure.SPI_Direction =SPI_Direction_1Line_Rx;
 SPI_InitStructure.SPI_Mode =SPI_Mode_Master; 
 SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; 
 SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
 SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
 SPI_InitStructure.SPI_NSS =SPI_NSS_Soft;
 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
 SPI_InitStructure.SPI_CRCPolynomial = 7;
 SPI_Init(SPI1, &SPI_InitStructure);
回复 支持 反对

使用道具 举报

26

主题

280

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2013-8-2
在线时间
279 小时
发表于 2013-8-22 14:27:43 | 显示全部楼层
LZ理解的不对。单线双向是为了方便你双机通信时的设置!A有数据时,A配置为主机,B配置为从机,A发给B。B有数据时,A配置为从机,B配置为主机,B发给A。之所以配置为双向,是给你省去配置主从机时还要配置“只发”或“只收”的麻烦!
博客:http://blog.csdn.net/feilusia
CC2541群(127442605);CC2640群(557278427);
Android群(541462902);STM8/STM32群(164311667);
Linux群(512598061);职场交流群(450154342);
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2013-11-26
在线时间
0 小时
发表于 2013-12-13 11:30:28 | 显示全部楼层
LZ,你试过配置为从,接收模式用来收数据么?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 00:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表