diff --git a/boards/cuav/x7pro/src/board_config.h b/boards/cuav/x7pro/src/board_config.h index e131c9e8e6..89dbf40796 100644 --- a/boards/cuav/x7pro/src/board_config.h +++ b/boards/cuav/x7pro/src/board_config.h @@ -49,9 +49,7 @@ #define GPIO_nLED_GREEN /* PI6 */ (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTI|GPIO_PIN6) #define GPIO_nLED_BLUE /* PI7 */ (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTI|GPIO_PIN7) -#define BOARD_HAS_CONTROL_STATUS_LEDS 1 -#define BOARD_OVERLOAD_LED LED_RED -#define BOARD_ARMED_STATE_LED LED_BLUE +#define BOARD_HAS_LED_PWM 1 /* ADC channels */ #define PX4_ADC_GPIO \ diff --git a/boards/cuav/x7pro/src/led.c b/boards/cuav/x7pro/src/led.c index 6a3a208d47..96c03241c9 100644 --- a/boards/cuav/x7pro/src/led.c +++ b/boards/cuav/x7pro/src/led.c @@ -64,17 +64,12 @@ __END_DECLS # define xlat(p) (p) static uint32_t g_ledmap[] = { - GPIO_nLED_BLUE, // Indexed by LED_BLUE - GPIO_nLED_RED, // Indexed by LED_RED, LED_AMBER GPIO_nSAFETY_SWITCH_LED_OUT, // Indexed by LED_SAFETY (defaulted to an input) - GPIO_nLED_GREEN, // Indexed by LED_GREEN }; __EXPORT void led_init(void) { /* Configure LED GPIOs for output */ - g_ledmap[2] = GPIO_nSAFETY_SWITCH_LED_OUT; - for (size_t l = 0; l < (sizeof(g_ledmap) / sizeof(g_ledmap[0])); l++) { if (g_ledmap[l] != 0) { stm32_configgpio(g_ledmap[l]); diff --git a/boards/cuav/x7pro/src/timer_config.cpp b/boards/cuav/x7pro/src/timer_config.cpp index c69efc5249..47d5c11a34 100644 --- a/boards/cuav/x7pro/src/timer_config.cpp +++ b/boards/cuav/x7pro/src/timer_config.cpp @@ -62,3 +62,27 @@ constexpr timer_io_channels_t timer_io_channels[MAX_TIMER_IO_CHANNELS] = { constexpr io_timers_channel_mapping_t io_timers_channel_mapping = initIOTimerChannelMapping(io_timers, timer_io_channels); + +constexpr io_timers_t led_pwm_timers[MAX_LED_TIMERS] = { + initIOTimer(Timer::Timer8), +}; + +#define CCER_C1_NUM_BITS 4 +#define POLARITY(c) (GTIM_CCER_CC1P << (((c)-1) * CCER_C1_NUM_BITS)) +#define DRIVE_TYPE(p) ((p)|GPIO_OPENDRAIN|GPIO_PULLUP) + +static inline constexpr timer_io_channels_t initIOTimerChannelLED(const io_timers_t io_timers_conf[MAX_LED_TIMERS], + Timer::TimerChannel timer, GPIO::GPIOPin pin, int ui_polarity) +{ + timer_io_channels_t ret = initIOTimerChannel(io_timers_conf, timer, pin); + ret.gpio_out = DRIVE_TYPE(ret.gpio_out); + ret.masks = POLARITY(ui_polarity); + return ret; +} + +constexpr timer_io_channels_t led_pwm_channels[MAX_TIMER_LED_CHANNELS] = { + + initIOTimerChannelLED(led_pwm_timers, {Timer::Timer8, Timer::Channel1}, {GPIO::PortI, GPIO::Pin5}, 1), + initIOTimerChannelLED(led_pwm_timers, {Timer::Timer8, Timer::Channel2}, {GPIO::PortI, GPIO::Pin6}, 2), + initIOTimerChannelLED(led_pwm_timers, {Timer::Timer8, Timer::Channel3}, {GPIO::PortI, GPIO::Pin7}, 3), +};