问题点1,
定时器对应DMA的通道没选对,DMA对应定时器的4个通道外,还有一个定时器更新的通道,TIM_DMACmd(TIM2, TIM_DMA_CC2 , ENABLE);使能的时候一定要选对,要使用UP通道就要打开相应的通道才行,之前我就是因为这个出了问题,导致数据没有传输出去。
问题点2
数据能传输出去了,但是传输的数据确实乱码的,导致灯带不规则点亮,找了很久原因,一直以为是pwm配置出了问题,然后用逻辑分析仪抓了一下波形,pwm频率周期设置是没问题,但是数据就是乱的,排除只能是DMA配置出了问题,最后找到原因了, 是DMA的字宽和缓存数组的类型大小不一样,我的数组是char,DMA配置的是两个字节 DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
最后把缓存数组的类型改成16位的就可以了,问题解决了。
SPI+DMA的方式和配置也是大同小异,比pwm配置还简单些,毕竟只是使用发送数据就行了,主要还是配置DMA的时候注意一点。
————————————————
版权声明:本文为CSDN博主「芯芯点灯」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fqm0_0/article/details/131793716
|