哆啦A不做梦 2024-01-05 16:02 采纳率: 0%
浏览 19
已结题

STM32使用DMA搬运PWM占空比指的问题

功能:STM32F103 点亮1000个ws2812b,灯色一样就可以
目前两种解决方式:
1、循环里面:GPIO+延时翻转,这样比较消耗资源,且不能被打断,目前没有采用
2、使用PWM+DMA,这里面也有两种方式,同样也存在两个问题

若采用PWM+DMA的DMA_Mode_Normal(正常模式),那么意味着一次性设置完pwm占空比的设定值,一个灯需要24个占空比的设置值,使用半字类型,那么内存需要:1000242,使用内存较大,裸机的话也可以接受,使用系统就会有问题

若采用PWM+DMA的DMA_Mode_Circular(循环模式),在所有灯设置一个颜色的情况下,只需要重复搬运一个灯24个占空比的设置值就可以了,内存占用少,效率高,但是实际中发现,DMA一次搬运完,第二次搬运这之间会有比较大的延迟,导致时序乱了,后面的灯亮不起来,或者颜色不对。

所以问下有什么办法可以消除,循环模式下重复搬运之间的延时?也就是自动加载初始值所需的时间。

  • 写回答

17条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-01-05 16:10
    关注

    由讯飞星火提供,您可以参考如下:

    为了消除循环模式下重复搬运之间的延时,可以尝试以下方法:

    1. 优化DMA的配置,确保DMA的传输速度足够快,以减少延迟。可以通过增加DMA的优先级、调整DMA的缓冲区大小等方法来实现。

    2. 在DMA传输完成后,立即开始下一次DMA传输。可以使用DMA的半传输模式(Half Transfer Mode)或者手动触发DMA传输来完成这个操作。

    3. 使用定时器来控制PWM的占空比更新,而不是完全依赖DMA。这样可以避免DMA传输过程中的延迟对PWM占空比的影响。

    4. 如果可能的话,可以考虑使用更高级的外设,如SPI或I2C,来控制WS2812B灯珠。这些外设通常具有更好的时序控制能力,可以减少延时问题。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月9日
  • 创建了问题 1月5日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度