2019-08-13 22:05发布
K.O.Carnivist 发表于 2017-6-23 04:30 定时器DMA写USART_DR来启动USART传输这个我知道是可以的,那么SPI应该也是可以的吧。 但接收数据需要同时 ...
最多设置5个标签!
可以利用两路DMA实现,我已经用几年了。
一路是:
定时器触发DMA,向 SPI-DR 寄存器写数据,目的是启动该SPI 的接收功能(因为SPI的收发是同时、同步的);
同时定时器输出PWM波形,触发外部芯片的动作,比如启动AD采集新数据。
另一路是:
该 SPI 的 RX 事件触发 DMA,目的是把 SPI 接收到的数据搬移到其他地方。
我也尝试过用一路DMA完成上面两个动作,但没有成功,好像做不到的,
关键是SPI,只能用“向DR送数据”的方法启动其接收功能,而不能直接启动接收。
但接收数据需要同时打开RXNE的DMA请求;而且会有一个问题是SPI的片选/ADC采样起始信号怎么出,以及它和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的,看手册好像不行,有点小遗憾。
一周热门 更多>