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

2019-12-15 12:15发布

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

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

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

看到SPI 结构图, 只有一个移位寄存器? 收发共用? 那如何做到收发同时呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
亽亼
1楼-- · 2019-12-15 12:32
 精彩回答 2  元偷偷看……
go2deathward
2楼-- · 2019-12-15 14:59
本帖最后由 go2deathward 于 2018-11-6 14:15 编辑

是STM32的那个系列芯片呢?

STM32F1XX,是只有通道的概念
STM32F4XX,DMA是有steam和channel都有的
对于F4的片子,应该是一个stream里,只能用一个通道的
wowangru
3楼-- · 2019-12-15 16:06
go2deathward 发表于 2018-11-6 14:11
是STM32的那个系列芯片呢?

STM32F1XX,是只有通道的概念

F4的芯片  !!!!!!!!!
lingdianhao
4楼-- · 2019-12-15 20:22
不能同时用的吧。
go2deathward
5楼-- · 2019-12-16 00:42
第二个问题,总线空闲状态需要自己判断吧?貌似spi中,没有这个空闲的判定
你做主机的时候,总线空闲是你自己可以知道的
做从机的时候,我觉得由CS信号的电平去判断吧

比如,你是从机,接收时用DMA,你将DMA的长度设置的尽可能大(大于可能的最长的帧),当你知道CS拉高的时候,说明传输完成,你可以获知DMA目前接收的长度,把收到的数据从DMA区里取出,再重新初始化DMA起点,这样不就可以了吗
wowangru
6楼-- · 2019-12-16 06:12
 精彩回答 2  元偷偷看……

一周热门 更多>