打印
[STM32F1]

各位大神,我的SPI主从通信,为什么收不到从设备的数据

[复制链接]
楼主: 感知新生
手机看帖
扫描二维码
随时随地手机跟帖
21
lzllhr| | 2015-5-22 12:34 | 只看该作者 回帖奖励 |倒序浏览
双工双线的话只有在主机发了个数据,从机才发数据的

使用特权

评论回复
22
hang150| | 2015-5-22 15:09 | 只看该作者
确定硬件连接及电源没问题后,查阅从器件规格书软件上全部采用典型SPI通信规格。调试下。

使用特权

评论回复
23
s_f_tan| | 2015-5-22 15:47 | 只看该作者
@runningwzf 说对了,MISO 要设置成IPU才能接收到输入的数据,现在你这情况是配置成PP输出了,并且跟从机是在信号短路状态了,因为两个都是输出的。

使用特权

评论回复
24
尤彼卡| | 2015-5-22 19:04 | 只看该作者
不知道楼主检查出来没,前来学习

使用特权

评论回复
25
感知新生|  楼主 | 2015-5-24 16:34 | 只看该作者
runningwzf 发表于 2015-5-22 08:23
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
   GPIO_InitStructure.GPIO ...

现在发现个问题就是 GPIO_Pin_14 这个引脚我给它设置成OUT_PP模式,在置高后,为什么输出的电压只有2V左右,不是应该3V的吗?其他引脚都是3V啊

使用特权

评论回复
26
感知新生|  楼主 | 2015-5-24 16:38 | 只看该作者
runningwzf 发表于 2015-5-22 08:24
STM32的端口设备,外射输出端口一般都是用AF_PP,外射输入端口一般都用IPU

这是在用STM32的IO口的复用功能SPI 不是应该用AF_PP吗?

使用特权

评论回复
27
jameswangchip| | 2015-5-24 16:49 | 只看该作者

使用特权

评论回复
28
NE5532| | 2015-5-24 17:47 | 只看该作者
检查MISO的IO特性,有的MCU启用SPI以后将接手端口IO特性管理,有的不会,最保险的是设置成输入状态(一般不需要上拉),你用示波器看MOSI线都没有看到波形,说明从机真的没有输出(如果有很小幅度的信号,可能就是两个输出端口连在一起了。还有你的CS线控制时序量过了没有?因为你注释都写错了,所以我猜你也不是个仔细的人,低级错误的可能性很大。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
感知新生 + 1 很给力!
29
感知新生|  楼主 | 2015-5-24 19:12 | 只看该作者
NE5532 发表于 2015-5-24 17:47
检查MISO的IO特性,有的MCU启用SPI以后将接手端口IO特性管理,有的不会,最保险的是设置成输入状态(一般不 ...

一看就是行家啊。确实,我的那个注释都是直接复制粘贴的语句,也没仔细看过,有很多错误的地方。你说的CS控制时序是正常的,现在我是直接把MOSI和MISO两个端口直接短接了,经过示波器测试,MISO有信号了(至少说明SPI的各项配置应该没有问题吧?),但是主机还是收不到数据会是什么情况呢?

使用特权

评论回复
30
感知新生|  楼主 | 2015-5-24 19:41 | 只看该作者
NE5532 发表于 2015-5-24 17:47
检查MISO的IO特性,有的MCU启用SPI以后将接手端口IO特性管理,有的不会,最保险的是设置成输入状态(一般不 ...

多谢大神指点啊,刚才经过调试,在MOSI和MISO短接后可以正常收发数据了。但是在与芯片连接后,还是原配置,对该芯片进行读操作,仍然一直返回数据0x00。根据您的经验,您觉得会是哪几种原因导致这种不能正常读芯片寄存器的现象呢?

使用特权

评论回复
31
NE5532| | 2015-5-24 21:51 | 只看该作者
感知新生 发表于 2015-5-24 19:41
多谢大神指点啊,刚才经过调试,在MOSI和MISO短接后可以正常收发数据了。但是在与芯片连接后,还是原配置 ...

命令发错,或者CS配合错误。你所谓正常收发不能只是收发0x00和0xFF哦,要是任意数据。

使用特权

评论回复
32
NE5532| | 2015-5-24 21:54 | 只看该作者
短接收发正常与CS时序无关,不说明CS时序正确了。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
感知新生 + 1 很给力!
33
感知新生|  楼主 | 2015-5-25 13:45 | 只看该作者
NE5532 发表于 2015-5-24 21:54
短接收发正常与CS时序无关,不说明CS时序正确了。

请教一下 您说的CS时序是指CPOL与CPHA的配置吧?这个配置是不是应该与从机的相同,例如:主机和从机都配置成CPOL=1,CPHA=1?

使用特权

评论回复
34
周董| | 2015-5-25 20:55 | 只看该作者
会不会是mos的问题呢

使用特权

评论回复
35
感知新生|  楼主 | 2015-5-26 17:28 | 只看该作者
周董 发表于 2015-5-25 20:55
会不会是mos的问题呢

已经解决了,还是时序没有搞好

使用特权

评论回复
36
感知新生|  楼主 | 2015-5-26 17:31 | 只看该作者
NE5532 发表于 2015-5-24 21:51
命令发错,或者CS配合错误。你所谓正常收发不能只是收发0x00和0xFF哦,要是任意数据。 ...

太棒了,终于搞定了,还是您说的CS配合错误了,得出一大经验就是 使用手册太重要了!

使用特权

评论回复
37
感知新生|  楼主 | 2015-5-26 17:42 | 只看该作者
终于解决这个问题,更深的了解了下SPI,也更理解了怎么去调试这些问题!

使用特权

评论回复
38
970253146| | 2015-6-12 14:56 | 只看该作者
楼主您好。我也在调spi主从,但是我从机收到主机时钟之后。MISO引脚上的数据跟从机DR里面赋的值不一样,有一位错位了。主从机的时序都是一样的,模式也没有设置错,您有遇到过这样的问题吗?

使用特权

评论回复
39
970253146| | 2015-6-12 15:00 | 只看该作者
NE5532 发表于 2015-5-24 21:54
短接收发正常与CS时序无关,不说明CS时序正确了。

大神您好。我做双stm32主从spi通信的时候遇到了个问题。我配置好从机之后,写了一个数据在从机的DR寄存器,但主机来时钟之后发现miso出来的数据跟从机DR里的数据相比多左移了一位。主从机的时序都是一样的,模式也没设置错,请问这可能是什么原因,有没有什么解决的办法呢?

使用特权

评论回复
40
周董| | 2015-6-13 18:48 | 只看该作者
感知新生 发表于 2015-5-26 17:28
已经解决了,还是时序没有搞好

:handshake

使用特权

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

本版积分规则