stm32f103 HAL+TIM%PWM+DMA精确输出PWM脉冲个数求助

2019-07-14 14:48发布

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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
mxvuwyerw
1楼-- · 2019-07-14 21:59
ctwewer 发表于 2019-1-4 09:55
除非你每次都重新配置DMA,否则,第一次配置为65535,第二次当然也要到DMA计数满才中断。
建议将70000平均分为35000配置给DMA

第一次配置65535,第一次DMA完成中断服务函数里面重新使用DMA发送剩下的数据(第一次与第二次除了发送个数不一样,其他DMA配置都一样,重新配置是重新调用DMA配置相关函数吗?),谢谢
ctwewer
2楼-- · 2019-07-14 23:37
mxvuwyerw 发表于 2019-1-4 10:12
第一次配置65535,第一次DMA完成中断服务函数里面重新使用DMA发送剩下的数据(第一次与第二次除了发送个数不一样,其他DMA配置都一样,重新配置是重新调用DMA配置相关函数吗?),谢谢

既然配置为65535,当然就一直到65535才中断。
楼主真的应该配置成35000,中断2次较合理。
mxvuwyerw
3楼-- · 2019-07-15 04:26
ctwewer 发表于 2019-1-4 10:30
既然配置为65535,当然就一直到65535才中断。
楼主真的应该配置成35000,中断2次较合理。

我可能没有描述清楚,我发70000个PWM肯定需要两次中断,只是第一次中断完成后继续发送下次数据存在问题,配置城35000也存在一样问题。
ctwewer
4楼-- · 2019-07-15 08:41
mxvuwyerw 发表于 2019-1-4 10:46
我可能没有描述清楚,我发70000个PWM肯定需要两次中断,只是第一次中断完成后继续发送下次数据存在问题,配置城35000也存在一样问题。

既然配置为65535时:第一次DMA发送正常,第二次DMA实际发送65535个。那就是说如果配置35000时一定是到35000就中断了,刚好也是2次中断,你说的“只是第一次中断完成后继续发送下次数据存在问题”是指什么问题?可以检查一下数据缓冲区的设置是否正确。
mxvuwyerw
5楼-- · 2019-07-15 08:41
 精彩回答 2  元偷偷看……
mxvuwyerw
6楼-- · 2019-07-15 13:12
mxvuwyerw 发表于 2019-1-4 11:08
第二次不管发送多少(小于65535时,包括35000),实际都会发送65535个才会进入发送中断。第二次中断肯定重新配置了。

感谢,已解决,使用普通TIM + DMA + HAL精确脉冲个数输出时,在DMA中断服务函数中如果继续使用DMA方式发送,需要先调用HAL提供相关中断服务函数处理,然后进行DMA发送。

一周热门 更多>