SPI工作在主模式接收数据可以用DMA吗?如果可以的话该怎么用呢?

[复制链接]
5763|28
 楼主| 767598314 发表于 2013-8-16 14:32 | 显示全部楼层
兄弟姐妹们,spi工作在主模式下,用同时打开发送和接收DMA的方式接收数据成功了。感谢大家!!!
feilusia 发表于 2013-8-16 14:46 | 显示全部楼层
767598314 发表于 2013-8-16 10:18
谢谢你的分享,还有一点我不太明白:我的硬件是stm32+cc1101无线模块,cc1101向stm32发送数据是通过外部 ...

你要先看清楚你用的SPI是SPI1还是SPI2,如果SPI1的话是要用DMA1的通道2和DMA1的通道3。
那个DMA通道貌似没必要关闭吧,计数到0的话就停了。建议LZ写一个可以控制发送数量的开启DMA函数。
举个例子:
void DMA_SEND( u16 num )               
{
     DMA1_Channel3->CCR &= ~(1<<0);                 //关闭DMA通道3
     DMA1_Channel3->CNDTR = num ;                //重设传输长度
   DMA1_Channel3->CCR |= 1<<0 ;                         //开启DMA通道3       
}
 楼主| 767598314 发表于 2013-8-17 10:17 | 显示全部楼层
song19881218 发表于 2013-8-15 17:37

还有一个小问题要请教一下你:现在用你说的那种方式能收到数据了,但是总是收到的不是一整包,而是前面丢掉了一部分数。可是发送和接收的DMA我是同时开的啊,理论上是应该收到完整的数据包。你当时有没有遇到过这样的问题,你是怎么解决的呢?
 楼主| 767598314 发表于 2013-8-20 15:13 | 显示全部楼层
不好意思,结贴时老是提示分数分配存在错误,
zeluo 发表于 2013-8-20 21:00 | 显示全部楼层
学习帖子   谢谢了  楼上的诸位   比较给力  
sinc_mark 发表于 2014-7-7 14:14 | 显示全部楼层
767598314 发表于 2013-8-17 10:17
还有一个小问题要请教一下你:现在用你说的那种方式能收到数据了,但是总是收到的不是一整包,而是前面丢 ...

楼主,我现在也遇到了接收数据包时丢掉前面几个字节的情况,请问你是怎么解决的?谢谢!
雨思小米粥 发表于 2018-6-11 18:07 | 显示全部楼层
楼主,我现在也在用主模式做DMA接收。啥都收不到~DR寄存器都是没有数据,不用DMA就没问题。有没有代码段参考一下啊??谢谢了
雨思小米粥 发表于 2018-6-13 11:15 | 显示全部楼层
本帖最后由 雨思小米粥 于 2018-6-13 11:17 编辑

主机模式下的SPI使用DMA接收调通了,现在还有一个问题,就是每次接收的第一个字节都是0XFF。还在查找原因!!楼主的这个帖子给了我很大的帮助~~~谢谢~~谢谢楼上各位大侠。
wjlhhhhhh 发表于 2020-1-2 18:11 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部