完善资料让更多小伙伴认识你,还能领取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个回答
|
|
根据您的描述,您在使用STM32G473的TIM8和DMA1_Channel4进行PWM输出时遇到了问题。在第一次外部触发时,寄存器更新正确,但在之后的触发中,寄存器的值更新出现错乱。以下是一些建议和可能的原因:
1. 检查DMA配置:确保DMA的配置正确,包括源地址、目标地址、传输大小、传输方向等。同时,确保DMA的优先级设置合适。 2. 检查中断优先级:确保DMA传输完成中断的优先级高于TIM8的中断优先级,以避免在DMA传输过程中被其他中断打断。 3. 检查定时器配置:确保TIM8的配置正确,包括时钟频率、预分频器、自动重载寄存器(ARR)、捕获/比较模式寄存器(CCR1)等。 4. 检查外部触发源:确保外部触发源的信号质量和时序正确,以避免触发不稳定或误触发。 5. 检查代码逻辑:在DMA传输完成中断中,确保关闭TIM8、重新配置DMA、重新打开TIM8的顺序正确,避免在重新配置过程中出现寄存器更新错误。 6. 检查缓存一致性:在更新寄存器之前,确保缓存中的数据是一致的。可以使用__HAL_DMA_DISABLE()和__HAL_DMA_CLEAR_FLAG()函数来确保DMA传输完成并清除相关标志。 7. 检查寄存器更新时机:在DMA传输完成中断中,确保在重新配置DMA之前,已经正确更新了ARR、RCR、CCR1寄存器的值。 8. 使用调试工具:使用调试工具(如Keil MDK或STM32CubeIDE)逐步跟踪代码执行过程,观察寄存器值的变化,以便找到问题所在。 9. 检查硬件连接:检查STM32G473与外部触发源之间的硬件连接是否正确,确保信号传输稳定。 10. 考虑使用其他方法:如果问题仍然无法解决,可以考虑使用其他方法实现PWM输出,例如使用软件定时器或修改现有的DMA和定时器配置。 希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便进一步分析。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1090 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1107 浏览 1 评论
545 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
412 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
990 浏览 2 评论
1590浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
259浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
271浏览 3评论
242浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
235浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-16 01:33 , Processed in 0.811917 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号