中级会员
- 积分
- 345
- 金钱
- 345
- 注册时间
- 2016-12-5
- 在线时间
- 57 小时
|
50金钱
本帖最后由 dai410257573 于 2024-8-2 15:15 编辑
想使用tim8 的dma 触发 spi,遇到了点问题
现象:
tim8 CH1/3 触发不了spi, 但是CH4 可以触发
看手册,DMA章节里面是这样的,里面DMA2 通道0,数据流2,和通道7数据流7,里面都是分别有写3个
配置如下:CH2N输出PWM,控制SPI的cs, CH1 /3 /4 来利用DMA触发 spi
代码如下:
- LL_SPI_Enable(SPI2); //使能SPI2外设
- //TIM8_CH3
- LL_DMA_SetMemoryAddress(DMA2, LL_DMA_STREAM_2, (uint32_t)(&spi2_txData));
- LL_DMA_SetPeriphAddress(DMA2, LL_DMA_STREAM_2, (uint32_t)(&SPI2->DR));
- LL_DMA_SetDataLength(DMA2, LL_DMA_STREAM_2, 1);
- LL_DMA_EnableStream(DMA2, LL_DMA_STREAM_2);
-
- LL_DMA_SetMemoryAddress(DMA2, LL_DMA_STREAM_7, (uint32_t)(&spi2_txData));
- LL_DMA_SetPeriphAddress(DMA2, LL_DMA_STREAM_7, (uint32_t)(&SPI2->DR));
- LL_DMA_SetDataLength(DMA2, LL_DMA_STREAM_7, 1);
- LL_DMA_EnableStream(DMA2, LL_DMA_STREAM_7);
-
- LL_TIM_CC_EnableChannel(TIM8, LL_TIM_CHANNEL_CH1);
- LL_TIM_CC_EnableChannel(TIM8, LL_TIM_CHANNEL_CH2N);
- LL_TIM_CC_EnableChannel(TIM8, LL_TIM_CHANNEL_CH3);
- LL_TIM_CC_EnableChannel(TIM8, LL_TIM_CHANNEL_CH4);
- LL_TIM_EnableDMAReq_CC1(TIM8);
- LL_TIM_EnableDMAReq_CC3(TIM8);
- LL_TIM_EnableDMAReq_CC4(TIM8);
-
- LL_TIM_EnableDMAReq_UPDATE(TIM8);
- LL_TIM_EnableAllOutputs( TIM8 ); //只有高级定时器需要
-
- LL_TIM_SetCounter(TIM8,0);//清0,重新计数
- LL_TIM_EnableCounter(TIM8);//TIM1计数使能
- LL_TIM_GenerateEvent_UPDATE(TIM8);
复制代码
关于使能DMA请求的是
LL_TIM_EnableDMAReq_CC1(TIM8);
LL_TIM_EnableDMAReq_CC3(TIM8);
LL_TIM_EnableDMAReq_CC4(TIM8);
使能TIM8的DMA CC,最后测量发现,只有CC4能触发SPI, CC1和CC3没有 触发。
这里也注释过CC4 CC3, 也不能触发。
这我就不太理解了,为啥CH1 CH3不能触发呢?求大佬指点一下。
手册里面DMA2 通道0 数据流2 里面,TIM8CH1/2/3这里3个是怎么来触发的?
|
|