STM32 SPI如何采用DMA收发不定长数据?像串口DMA一样不占用CPU

2019-12-15 12:15发布

本帖最后由 wowangru 于 2018-11-6 15:12 编辑

用不用CS线有多大区别? 我想像串口一样任意收发不定长数据,且不占CPU, 可以不区分主从机。仅仅大数据量通信使用

另外请问SPI采用DMA接收时如何检测帧结束空闲? 帧长度可能不定!  即使帧长度一定,采用定长DMA完成中断,会不会因掉了一个SPI数据后,以后的帧所有数据错位?

看到SPI 结构图, 只有一个移位寄存器? 收发共用? 那如何做到收发同时呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
go2deathward
1楼-- · 2019-12-16 09:22
主机的话,因为时钟是由你发起的,实际上,接收多少是需要你事先知道的。所以,具体收多长数据,该由协议定,比如,在接收的前几个字节里,包含长度信息,这样你在收前几个字节以后再去判断吧
,感觉上,如果接收前就设置接收DMA,感觉不太可行吧,起码要知道待接收的长度以后,在开启DMA接收。
别的办法暂时我还没想到
wowangru
2楼-- · 2019-12-16 14:54
go2deathward 发表于 2018-11-6 15:01
主机的话,因为时钟是由你发起的,实际上,接收多少是需要你事先知道的。所以,具体收多长数据,该由协议定 ...

usart可以!!! SPI如果开DMA定长接收完成中断,就怕出现干扰掉一个字节,后面的数据都错位, 每次中断的后接收的数据都错位!!!
go2deathward
3楼-- · 2019-12-16 16:16
usart本身带空闲中断
spi跟串口本质是不一样的,串口的接收是被动的
对于spi主机来说,接收是主动的,需要你去产生读的时钟。所以说,这个所谓的空闲,是主机去主动控制的,你不发时钟了,就是空闲了
wowangru
4楼-- · 2019-12-16 20:41
go2deathward 发表于 2018-11-6 17:03
usart本身带空闲中断
spi跟串口本质是不一样的,串口的接收是被动的
对于spi主机来说,接收是主动的,需要 ...

这个读过程可以完全采用DMA吗? 不需用CPU参与,  读的同时   又有可能会发送数据, 读写独立
XA144F
5楼-- · 2019-12-16 22:17
 精彩回答 2  元偷偷看……
go2deathward
6楼-- · 2019-12-17 00:49
XA144F 发表于 2018-11-6 18:05
spi用设置从机,开dma和软件nss方式,并且把nss引脚再开exti中断……你懂的。

他的spi是主机。硬设置成从机,时钟都没有如何传输呢

一周热门 更多>