
本帖最后由 reynoldxu 于 2016-4-13 13:01 编辑 Hi all: 最近在使用Cube 的Timer中碰到一些问题,请大家一起看看是什么问题 目的: 输出固定个数的占空比可变方波,比如800kHZ,20%,20%,40%,60%,80%,100%,驱动WS2812S LED灯 硬件: STM32-Nucleo-F303RE 实现: 参考CubeF3中的例程(STM32Cube_FW_F3_V1.4.0\Projects\STM32F303RE-Nucleo\Examples\TIM\TIM_DMA)能够输出占空比可变的PWM,但是历程中似乎没有写完整,实际测到pwm波形并不是有限个数而是无限个,大于DMA目标个数后的PWM占空比为DMA最后一次传送给Timer_CCR的值. 思考可能是因为Start_DMA之后没有关闭而产生的问题,在HAL_TIM_PWM_PulseFinishedCallback回调中加入HAL_TIM_PWM_Stop_DMA. 观测波形,发现可以停止PWM不停产生,但是仍然会多出几个脉冲,将DMA优先级与NVIC优先级调成最高情况一样 参考"STM32L053可控PWM脉冲方法之DMA,[原文链接,提及在使用Cube库中可能需要增加预分频系数来提高响应?增加预分频系数到15之后问题依旧 综上所述: 1.STM32Cube_FW_F3_V1.4.0总关于TIM_DMA的例程是否有Bug不全或者是需要修改? 2.当在HAL_TIM_PWM_PulseFinishedCallback回调中加入HAL_TIM_PWM_Stop_DMA后任然无法及时响应,可能的改善方法? 3.在实际的测试中发现,每次启动HAL_TIM_PWM_Start_DMA后,第一个脉冲数据总是有些问题,如图所示,该如何解决? 核心代码如下:
相关代码与波形文件截图在如下地址: http://coding.net/u/reynoldxu/p/testPWM_DMA/git 错误的波形图如下: http://coding.net/u/reynoldxu/p ... blob/master/pic.png ![]() |
方法二,是因为用了库的原因,处理不够定时器快输出了几个PWM才执行到关闭定时器的函数。
{
HAL_TIM_PWM_Start_DMA(&htim1, TIM_CHANNEL_1, (uint32_t *)&pwm_duty[0], 6);
HAL_Delay(10);
}
这里判断执行完后再开始。