STM32的dma能不能实现传输中,字节之间有间隔?

2019-12-20 21:30发布

本帖最后由 zxq6 于 2018-4-13 19:41 编辑

如题,谢谢!
因为外设要求,传输的时候,每2个字节之间,需要一定的时间间隔。
请问下,DMA能不能实现这个需求?
如果不能的话,有没有简单的办法,能够实现类似的,cpu占用率低的大量数据传输?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
wshtyr
2019-12-21 22:21
本帖最后由 wshtyr 于 2018-4-14 10:20 编辑
zxq6 发表于 2018-4-13 22:29
外设是spi1,能不能指教一下具体如何使用呢?


假设LZ的MCU就是STM32F2或F4,那么可以使用TIM1或TIM8的DMA。
若要求SPI1每隔N个计数周期发送两次数据,每次数据的发送间隔为T,则按以下步骤配置:

1. SPI1
按原来的参数初始化SPI1。
2. TIM1
TIM1周期设为N,配置比较通道1和2为PWM1或PWM2模式(但不使能任何输出),并使能这两个通道的DMA;
比较通道1和2的比较值分别设为1和T+1;
设置TIM1计数器的初始值为0.
3. DMA2
初始化DMA2的Stream6,通道为Channel 0,内存地址设为需要发送的数组的首地址,外设地址设为SPI1->DR的地址,其余参数沿用原SPI DMA的参数。

开始传输:
复位TIM1计数器;
使能DMA2 Stream6;
使能TIM1计数。

停止传输:
关闭DMA2 Stream6(非循环模式下亦可自行终止);
关闭TIM1

注意:
1. T的取值应保证T个计数周期内SPI能发送完一帧,并留有余地
2. DMA2 Stream6在非循环模式下,停止数据传输时要考虑的数据的完整性


编辑原因:去除“使能SPI1 TX DMA”的描述,因不需要使能SPI的DMA

一周热门 更多>