SPI DMA的一点小疑问

2019-07-20 06:22发布

SPI全双工同步,通信时读取数据一般是发送空串然后返回所要读取的数据,那么我使能DMA  SPI接收的话,源地址是&SPI->DR,DMA目的地址是定义的缓冲区,那么不往SPI写入数据到SPI->DR发送的话,DMA就获取不到数据,请问这个怎么解决?望各位给予点指示,十分感谢!!(串口的话发送与接受是分开的,串口用DMA发送就明白)

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
edmund1234
1楼-- · 2019-07-20 06:59
 精彩回答 2  元偷偷看……
yfBong
2楼-- · 2019-07-20 11:06
 精彩回答 2  元偷偷看……
yfBong
3楼-- · 2019-07-20 15:17
edmund1234 发表于 2018-9-3 23:19
触发DMA_SPI_RX的不是SPI_DR, 所以你写是不会影响DMA接收数据的,而且在user的角度SPI_DR发送接收是同一个 ...

您最后一句我的理解是:SPI在使能后,得等主机发送完全部内容后、从机才开始返回相应的内容给从机,这样SPI_DR寄存器就互不干扰,而不是主机发完一个字节从机就返回一个字节,这样理解对吗?

但这不是跟正常的SPI收发发完一个字节返回一个字节相驳吗?
十分感谢您的指导!!!
edmund1234
4楼-- · 2019-07-20 15:51
yfBong 发表于 2018-9-4 08:21
如果SPI DMA接收的话,DMA源的设置地址不是SPI_DR的话,能确切一点说明是什么吗?还有您的最后一句“在use ...

SPI_I2S_DMACmd(SPI1, SPI_I2S_DMAReq_Rx,ENABLE);
这是让SPI接收一个字节后触发DMA的函数, 触发DMA是一回事, DMA从哪儿读数据到Buffer又是另一回事, 理论上DMA源地址你不设为SPI_DR也没问题, 只是DMA读回来没意思的数据而已
edmund1234
5楼-- · 2019-07-20 19:28
 精彩回答 2  元偷偷看……

一周热门 更多>