打印
[STM32F1]

关于SPI的疑问

[复制链接]
1744|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nalaismo1|  楼主 | 2015-6-19 23:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  初学STM32的SPI部分,有2个疑问自己实在无法解决,因此麻烦各位大神不吝帮助!
  1、若STM32用做SPI主机,工作在全双工模式,那如果此时主机没有数据要发送,也就是没有往发送寄存器中写数,那么从机会收到什么?会收到从机之前发给主机的数据吗?
  2、SPI总线空闲产生的条件是什么?是主机将SPI禁能吗?

沙发
wowow| | 2015-6-19 23:18 | 只看该作者
1.SPI读数据时,必须发个数据出去,随便发个啥,一般0x00。
2.主机不输出数据就行了。
也就是一切是主机控制的。找个spi设备,例如spi flash,看一下时序,就比较容易理解。
一般来说,就是主机先告诉从机,我要读是写,从哪读写,读写多少。从机转到准备接收或准备发送。
如果是读,主机就发些空数据,提供时钟给从机,从机输出数据。
如果是写,主机发送数据,从机接收。
写spi的主机程序,就得查作为从机的设备的数据手机,按上面写的时序来就是了。
从机程序一般在双机通信时用,有现成的就用现成的,没现成的就按上面的思路定义一个。

使用特权

评论回复
板凳
nalaismo1|  楼主 | 2015-6-20 13:04 | 只看该作者
嗯,明白了,非常感谢wowow!

另外,假如STM32做SPI主机,同时使能了DMA发送和DMA接收,而且设置DMA发送接收的字节数相同(设为N),使能DMA发送完成中断,禁用DMA接收中断,那么当DMA发送完成中断到来时,此时DMA接收是否一定也完成了(DMA收到从机的N个数据,并已储存在指定的接收buffer)?

使用特权

评论回复
地板
wangdezhi| | 2015-6-20 21:21 | 只看该作者
不启动spi,应该没问题吧?

使用特权

评论回复
5
wowow| | 2015-6-21 00:23 | 只看该作者
接收中断会来得晚一些, 自己分析一下. 手机上网懒得敲那么多字了

使用特权

评论回复
6
wowow| | 2015-6-21 09:04 | 只看该作者
数据流向发送时:DMA->数据寄存器->SPI移位寄存器->端口,接收时是反过来的。
当DMA发送完成时,最后一个数据刚到数据寄存器,还没发送出去呢。
按你说的情况,用DMA接收中断才行。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
nalaismo1 + 1 赞一个!
7
nalaismo1|  楼主 | 2015-6-21 11:38 | 只看该作者
哦,理解了,wowow讲的很透彻,再次表示感谢!

使用特权

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

本版积分规则

6

主题

12

帖子

0

粉丝