2019-12-20 21:30发布
wshtyr 发表于 2018-4-13 21:41 具体是什么外设? 按LZ的要求可以用一个定时器,比如TIM1,使能2路比较输出通道的DMA,计数周期为要求的 ...
zxq6 发表于 2018-4-13 22:29 外设是spi1,能不能指教一下具体如何使用呢?
wshtyr 发表于 2018-4-14 10:23 LZ最好把所用的STM32的型号也说一下。。不同型号的细节可能不一样
最多设置5个标签!
外设是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
哦,不好意思,我用的是stm32f103,要是用的4系列就好了,cpu比较快,这个问题就不是很明显。
一周热门 更多>