@ -24,6 +24,22 @@
# define WS2812_DMA_CHANNEL 2 // DMA Channel for TIMx_UP
# endif
// Push Pull or Open Drain Configuration
// Default Push Pull
# ifndef WS2812_EXTERNAL_PULLUP
# if defined(USE_GPIOV1)
# define WS2812_OUTPUT_MODE PAL_MODE_STM32_ALTERNATE_PUSHPULL
# else
# define WS2812_OUTPUT_MODE PAL_MODE_ALTERNATE(WS2812_PWM_PAL_MODE) | PAL_STM32_OTYPE_PUSHPULL | PAL_STM32_OSPEED_HIGHEST | PAL_STM32_PUPDR_FLOATING
# endif
# else
# if defined(USE_GPIOV1)
# define WS2812_OUTPUT_MODE PAL_MODE_STM32_ALTERNATE_OPENDRAIN
# else
# define WS2812_OUTPUT_MODE PAL_MODE_ALTERNATE(WS2812_PWM_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN | PAL_STM32_OSPEED_HIGHEST | PAL_STM32_PUPDR_FLOATING
# endif
# endif
# ifndef WS2812_PWM_TARGET_PERIOD
//# define WS2812_PWM_TARGET_PERIOD 800000 // Original code is 800k...?
# define WS2812_PWM_TARGET_PERIOD 80000 // TODO: work out why 10x less on f303/f4x1
@ -142,11 +158,7 @@ void ws2812_init(void) {
for ( i = 0 ; i < WS2812_COLOR_BIT_N ; i + + ) ws2812_frame_buffer [ i ] = WS2812_DUTYCYCLE_0 ; // All color bits are zero duty cycle
for ( i = 0 ; i < WS2812_RESET_BIT_N ; i + + ) ws2812_frame_buffer [ i + WS2812_COLOR_BIT_N ] = 0 ; // All reset bits are zero
# if defined(USE_GPIOV1)
palSetLineMode ( RGB_DI_PIN , PAL_MODE_STM32_ALTERNATE_PUSHPULL ) ;
# else
palSetLineMode ( RGB_DI_PIN , PAL_MODE_ALTERNATE ( WS2812_PWM_PAL_MODE ) | PAL_STM32_OSPEED_HIGHEST | PAL_STM32_PUPDR_FLOATING ) ;
# endif
palSetLineMode ( RGB_DI_PIN , WS2812_OUTPUT_MODE ) ;
// PWM Configuration
//#pragma GCC diagnostic ignored "-Woverride-init" // Turn off override-init warning for this struct. We use the overriding ability to set a "default" channel config