STM32 能做到吗?高手请进,STM32 的 TIM 定时请求DMA SPI 传输?

2019-08-13 22:05发布

STM32  的 TIM  定时启动  SPI  传输?  哪位仁兄能给点建议吗?通过DMA,该如何配置呢? 我的应用是要  与 外面 高速(1us)AD芯片相连,通过SPI DMA驱动,定时1us启动一次,即1us发生一个SPI DMA请求,而不是SPI的TXE RXNE自动发生DMA请求?  STM32 TIM 的DMA   不能将目标地址或源地址   绑到SPI的DR寄存器地址?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
44条回答
xuande
1楼-- · 2019-08-13 22:53
本帖最后由 xuande 于 2017-6-26 14:42 编辑

可以利用两路DMA实现,我已经用几年了。

一路是:
定时器触发DMA,向 SPI-DR 寄存器写数据,目的是启动该SPI 的接收功能(因为SPI的收发是同时、同步的);
同时定时器输出PWM波形,触发外部芯片的动作,比如启动AD采集新数据。

另一路是:
该 SPI 的 RX 事件触发 DMA,目的是把 SPI 接收到的数据搬移到其他地方。

我也尝试过用一路DMA完成上面两个动作,但没有成功,好像做不到的,
关键是SPI,只能用“向DR送数据”的方法启动其接收功能,而不能直接启动接收。


jxc2017jxc
2楼-- · 2019-08-14 00:28
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-08-14 05:38
这种方式可能不支持哦。
K.O.Carnivist
4楼-- · 2019-08-14 06:01
定时器DMA写USART_DR来启动USART传输这个我知道是可以的,那么SPI应该也是可以的吧。
但接收数据需要同时打开RXNE的DMA请求;而且会有一个问题是SPI的片选/ADC采样起始信号怎么出,以及它和SPI的时序能否配合好。
楼主的数据是几位?
jxc2017jxc
5楼-- · 2019-08-14 07:59
K.O.Carnivist 发表于 2017-6-23 04:30
定时器DMA写USART_DR来启动USART传输这个我知道是可以的,那么SPI应该也是可以的吧。
但接收数据需要同时 ...

定时器DMA写USART_DR来启动USART传输:这个你确认?但SPI好像不行。我外部芯片是AD7671,工作在SPI_TI主模式,16位,STM32F407工作在SPI_TI  16位从模式,NSS(SYNC),SCK,SDOUT都是外部芯片产生的。现在是我只用SPI_DMA,TIM定时启动转换 是可以的。由此我想到,若把他们主从调换一下,(目的是控制一下SPI传输的起始时刻,和速率),这样就要定时主动启动SPI 发送,即受控SPI_DMA工作,因有时时序和速率需要这样。其实只要SPI_DMA的请求信号有一个定时触发选择即可,但好像没有,定时器输出 有其他级联或启动ADC,DAC等,但没有触发SPI_DMA的,看手册好像不行,有点小遗憾。
jxc2017jxc
6楼-- · 2019-08-14 12:30
STM32F4或者有一个TIM的DMA通道能够为通用的外设和存储器之间传输就好了,这样能够扩大很多应用。ST公司应该考虑

一周热门 更多>