STM32/STM8技术william hill官网
直播中

李富才

7年用户 168经验值
私信 关注
[问答]

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

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

回帖(10)

何秀珍

2019-1-4 09:15:51
除非你每次都重新配置DMA,否则,第一次配置为65535,第二次当然也要到DMA计数满才中断。
建议将70000平均分为35000配置给DMA
举报

李富才

2019-1-4 09:32:52
引用: ctwewer 发表于 2019-1-4 09:55
除非你每次都重新配置DMA,否则,第一次配置为65535,第二次当然也要到DMA计数满才中断。
建议将70000平均分为35000配置给DMA

第一次配置65535,第一次DMA完成中断服务函数里面重新使用DMA发送剩下的数据(第一次与第二次除了发送个数不一样,其他DMA配置都一样,重新配置是重新调用DMA配置相关函数吗?),谢谢
举报

何秀珍

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

既然配置为65535,当然就一直到65535才中断。
楼主真的应该配置成35000,中断2次较合理。
举报

李富才

2019-1-4 10:06:43
引用: ctwewer 发表于 2019-1-4 10:30
既然配置为65535,当然就一直到65535才中断。
楼主真的应该配置成35000,中断2次较合理。

我可能没有描述清楚,我发70000个PWM肯定需要两次中断,只是第一次中断完成后继续发送下次数据存在问题,配置城35000也存在一样问题。
举报

何秀珍

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

既然配置为65535时:第一次DMA发送正常,第二次DMA实际发送65535个。那就是说如果配置35000时一定是到35000就中断了,刚好也是2次中断,你说的“只是第一次中断完成后继续发送下次数据存在问题”是指什么问题?可以检查一下数据缓冲区的设置是否正确。
举报

李富才

2019-1-4 10:28:33
第二次不管发送多少(小于65535时,包括35000),实际都会发送65535个才会进入发送中断。第二次中断肯定重新配置了。
举报

李富才

2019-1-4 10:45:56
引用: mxvuwyerw 发表于 2019-1-4 11:08
第二次不管发送多少(小于65535时,包括35000),实际都会发送65535个才会进入发送中断。第二次中断肯定重新配置了。

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

lee_st

2019-1-5 00:15:52
pwm的个数是自己定义的
举报

lee_st

2019-1-5 00:16:01
这个都不知道?
举报

lee_st

2019-1-5 00:16:21
还是不要提这些简单问题
举报

更多回帖

发帖
×
20
完善资料,
赚取积分