1,DMA设置为循环模式,发送70000个PWM脉冲,第一次DMA发送65535(DMA一次不超过65535),第二次DMA发送4465(第一次DMA发送完成中断服务函数中调用第二次DMA发送)。 问题:第一次DMA发送正常,第二次DMA实际发送65535个,并非是4465个。 2,DMA设置为单次模式,发送70000个PWM脉冲,第一次DMA发送65535(DMA一次不超过65535),第二次DMA发送4465(第一次DMA发送完成中断服务函数中调用第二次DMA发送)。 问题:第二次DMA发送后一直没有进入DMA发送中断函数。 参考DMA发送函数:HAL_TIM_PWM_Start_DMA |
建议将70000平均分为35000配置给DMA
评分
查看全部评分
第一次配置65535,第一次DMA完成中断服务函数里面重新使用DMA发送剩下的数据(第一次与第二次除了发送个数不一样,其他DMA配置都一样,重新配置是重新调用DMA配置相关函数吗?),谢谢
既然配置为65535,当然就一直到65535才中断。
楼主真的应该配置成35000,中断2次较合理。
我可能没有描述清楚,我发70000个PWM肯定需要两次中断,只是第一次中断完成后继续发送下次数据存在问题,配置城35000也存在一样问题。
既然配置为65535时:第一次DMA发送正常,第二次DMA实际发送65535个。那就是说如果配置35000时一定是到35000就中断了,刚好也是2次中断,你说的“只是第一次中断完成后继续发送下次数据存在问题”是指什么问题?可以检查一下数据缓冲区的设置是否正确。
第二次不管发送多少(小于65535时,包括35000),实际都会发送65535个才会进入发送中断。第二次中断肯定重新配置了。
感谢,已解决,使用普通TIM + DMA + HAL精确脉冲个数输出时,在DMA中断服务函数中如果继续使用DMA方式发送,需要先调用HAL提供相关中断服务函数处理,然后进行DMA发送。
评分
查看全部评分