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

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个脉冲结束,但实测结果从第二次触发开始就不对了。

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

举报

3个回答
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传输?
Dayfly 回答时间:3 天前

xmshao 发表于 2024-7-9 16:54
对你的情况和需求大致了解,也不能说很清楚,简单聊聊供参考:</p>
<p>

我验证了参考文章1,按那个配置出来,实际上DMA搬运的数据也是错位的

xmshao 回答时间:3 天前

Dayfly 发表于 2025-3-7 16:50
我验证了参考文章1,按那个配置出来,实际上DMA搬运的数据也是错位的
...

另外,你还要注意CCR ARR预装方面的细节问题。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版