STM32 G431RB 實現燈帶WS2812的跑馬燈,流水燈,呼吸燈特效


在前面的文章中實現了使用Circular模式控制WS2812燈帶,利用Freertos的Task的管理實現了跑馬燈,流水燈和呼吸燈的燈效。

代碼提交到Github上了。 https://github.com/magicduan/demo_pwm_dma_circular

在實現中碰到一個較大的麻煩,燈帶上有168顆燈,利用Circular模式后內存是降下來了,但是由於頻繁的產生DMA中斷,導致其他Task被Block了。

最后的解決方法是調低DMA中斷的優先級從5降到6,同時增加DMA Buffer的大小減少DMA中斷的發生。

代碼中通過四個函數可以控制燈效的切換。

  • int pwm_led_effect_set(uint32_t dma_id,uint8_t effection, uint32_t eff_interval,uint8_t grp_leds, uint32_t led_color );

    這函數用來設置特效的類型。

  • void pwm_led_effect_start(uint32_t dma_id);

    這個函數用來啟動特效

  • int pwm_led_effect_stop(uint32_t dma_id,uint8_t b_block,uint32_t timeout);

    這個函數用來停止特效

  • void pwm_led_run();

    這個函數應該放到Task中的循環中執行,這個函數的目的就是掃描特效數組,檢查間隔時間,執行每次DMA的發送


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM