你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G473 TIM8 DMA burst模式问题求助

[复制链接]
hyycm0813 提问时间:2024-7-9 15:20 / 未解决

我在配置外部触发源定时触发TIM8_CH1输出PWM时,打算使用DMA1_Channel4在每次TIM8 UP时触发DMA传输来更新ARR、RCR、CCR1寄存器,在DMA传输完成中断中关闭TIM8、重新配置DMA,最后再重新打开TIM8,等待下次外部触发源到来,如此往复。

初始化配置完成后实测发现,只有第一次外部触发时,在DMA传输完成中断中调试发现ARR、RCR、CCR1更新正确,但之后的每次进DMA中断发现三个寄存器的值更新是错乱的。

初始化配置的DMA传输数据数目为6,也就是第二个更新DMA请求结束后会进入DMA传输完成中断;

TIM8时钟频率为120Mhz;

dma更新缓存内容 uint32_t tim8dmabuf[6] = {30-1, 344-1, 15-1, 48-1, 1-1, 33-1};

我想实现的效果就是TIM8连续输出344个PWM脉冲后,再输出1个脉冲结束,但实测结果从第二次触发开始就不对了。

收藏 评论1 发布时间:2024-7-9 15:20

举报

1个回答
xmshao 回答时间:2024-7-9 16:54:47
对你的情况和需求大致了解,也不能说很清楚,简单聊聊供参考:


现在内存缓存数组有6个数据,分别对应两组配置。两组数据使用完毕对应DMA传输完成中断。


ARR、RCR、CCR三个寄存器都带有预装功能。你如果希望即时生效,按理需要关闭预装功能。


你说在DMA传输完成中断里停止TIMER输出,这点似乎不太合理。DMA传输完成不等于对应的PWM输出完成了。


因为此时后面的那1个脉冲可能还没有完成输出。


是否可以基于第1组配置产生更新事件后来准备新的数据呢?同时加载第2组配置。


基于第2组配置产生的更新事件 加载下一批的第1组配置数据。


整个过程就无须对TIM8做停止操作了。当然,如果你的确需要暂停一会儿就另当别论。


这里有两篇基于STM32 TIMER DMA burst传输的文章及示例,可以看看:


STM32定时器BURST传输介绍及示例
为何实现不了定时器DMA Burst传输?
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版