打印
[STM32F1]

请教一下关于stm的spi接受中断问题

[复制链接]
1501|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1044132648|  楼主 | 2017-12-3 15:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
spi, STM, MIT, ce, ck
看到一段话,SPI设备间的数据传输之所以又被称为数据交换,是因为SPI协议规定一个SPI设备不能在数据通信过程中仅仅只充当一个"发送者(Transmitter)"或者"接收者(Receiver)"。在每个Clock周期内,SPI设备都会发送并接收一个bit大小的数据,相当于该设备有一个bit大小的数据被交换了,
那每次我发送一个字节的数据后,是否就会接受到一个字节的数据,那这个没有用的数据会不会触发接收中断呢
沙发
1044132648|  楼主 | 2017-12-3 18:56 | 只看该作者
求助,困惑很久了

使用特权

评论回复
板凳
1044132648|  楼主 | 2017-12-4 08:36 | 只看该作者
没人吗

使用特权

评论回复
地板
fengfeng的恒| | 2017-12-4 13:38 | 只看该作者
有一个接受缓冲非空的中断的,但是如果你需要使用这个的话需要使能。
一般来说,你作为主机,发送一个数据出去的同时会收到一个数据,你只需发送一个字节后,把接受到的数据读取即可。
一般来说接受中断用于单片机作为从机的情况,因为时钟是外部的控制的,单片机不知道什么时候回有数据进来,所以这时最好使用中断接收数据。

使用特权

评论回复
5
kingkits| | 2017-12-4 13:52 | 只看该作者
如果仅仅用于单向发送,建议从机把上次收到数据的发送回来,这样便于主机进行数据校验。

使用特权

评论回复
6
1044132648|  楼主 | 2017-12-5 08:21 | 只看该作者
fengfeng的恒 发表于 2017-12-4 13:38
有一个接受缓冲非空的中断的,但是如果你需要使用这个的话需要使能。
一般来说,你作为主机,发送一个数据 ...

我的从机设置为接受中断,那如果主机想启动发送,是不是要先发送一个启动时钟的信号,我才能去接受

使用特权

评论回复
7
1044132648|  楼主 | 2017-12-5 08:23 | 只看该作者
kingkits 发表于 2017-12-4 13:52
如果仅仅用于单向发送,建议从机把上次收到数据的发送回来,这样便于主机进行数据校验。 ...

是双向传输的,想法是主机发什么从机就接受什么,从机发什么主机也就接受什么,不会有其他的dumy data

使用特权

评论回复
8
一路向北lm| | 2017-12-5 08:49 | 只看该作者
一个主机和从机,同一时刻可以相互发送数据。

使用特权

评论回复
9
kingkits| | 2017-12-5 09:14 | 只看该作者
器件时没有办法判断什么有用或者什么没用,只要收到数据,都会一致处理

使用特权

评论回复
10
fengfeng的恒| | 2017-12-5 09:56 | 只看该作者
1044132648 发表于 2017-12-5 08:21
我的从机设置为接受中断,那如果主机想启动发送,是不是要先发送一个启动时钟的信号,我才能去接受 ...

如果你是从机,那么就等着主机发数据过来吧。主机随时都可以发过来,也没有所谓的启动时钟信号,一般按照规定的时序,比如拉低CS,CLK相应变化而已。如果你用硬件SPI的话,那么在主机发数据过来之前应准备好数据放到缓冲里去。

使用特权

评论回复
11
1044132648|  楼主 | 2017-12-5 11:12 | 只看该作者
fengfeng的恒 发表于 2017-12-5 09:56
如果你是从机,那么就等着主机发数据过来吧。主机随时都可以发过来,也没有所谓的启动时钟信号,一般按照 ...

嗯嗯 那如果我作为从机想发送数据给主机,我需要通知主机接受吗,时钟信号是由主机产生的还是一直都在

使用特权

评论回复
12
fengfeng的恒| | 2017-12-5 14:43 | 只看该作者
1044132648 发表于 2017-12-5 11:12
嗯嗯 那如果我作为从机想发送数据给主机,我需要通知主机接受吗,时钟信号是由主机产生的还是一直都在 ...

从机不能主动发数据给主机的,因为时钟是需要主机想发数据的时候才会有;这个需要就定义好相应的协议以上传下传数据了。

使用特权

评论回复
13
pengchang1994| | 2017-12-5 15:46 | 只看该作者
SPI通讯从机无法主动发起通讯,只能是把数据存着,主机发时钟过来的时候才能返回数据。但是有的从机芯片是这么干的:数据准备好了,作为spi从机还有一个额外的IO与主机相连,从机数据准备好了就拉低这个IO  主机那边设置外部中断,检测到中断就发起SPI通讯,把数据读回来。  具体实现方式可以参考一下TI的ADS1292。

使用特权

评论回复
14
艾呀呀| | 2017-12-6 11:36 | 只看该作者
这帖子还是回复慢,要是有个专门交流的微信群多好

使用特权

评论回复
15
dongliushui| | 2017-12-6 13:17 | 只看该作者
楼主不要疑问,直接用就是了,不放心,跑一个试试。

使用特权

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

本版积分规则

4

主题

17

帖子

0

粉丝