/* Includes ----------------------------------------------------------------- */ #include "bsp\led.h" #include /* Private define ----------------------------------------------------------- */ /* Private macro ------------------------------------------------------------ */ /* Private typedef ---------------------------------------------------------- */ /* Private variables -------------------------------------------------------- */ static uint32_t led_stats; /* Private function -------------------------------------------------------- */ /* Exported functions ------------------------------------------------------- */ int8_t BSP_LED_Set(BSP_LED_Channel_t ch, BSP_LED_Status_t s, float duty_cycle) { if (duty_cycle > 1.0f) return BSP_ERR; uint32_t tim_ch; uint16_t pulse = (uint16_t)(duty_cycle * (float)UINT16_MAX); switch (ch) { case BSP_LED_RED: __HAL_TIM_SET_COMPARE(&htim5, TIM_CHANNEL_3, pulse); tim_ch = TIM_CHANNEL_3; break; case BSP_LED_GRN: __HAL_TIM_SET_COMPARE(&htim5, TIM_CHANNEL_2, pulse); tim_ch = TIM_CHANNEL_2; break; case BSP_LED_BLU: __HAL_TIM_SET_COMPARE(&htim5, TIM_CHANNEL_1, pulse); tim_ch = TIM_CHANNEL_1; break; } switch (s) { case BSP_LED_ON: HAL_TIM_PWM_Start(&htim5, tim_ch); led_stats |= tim_ch; break; case BSP_LED_OFF: HAL_TIM_PWM_Stop(&htim5, tim_ch); led_stats &= ~tim_ch; break; case BSP_LED_TAGGLE: if (led_stats & tim_ch) { HAL_TIM_PWM_Stop(&htim5, tim_ch); led_stats &= ~tim_ch; } else { HAL_TIM_PWM_Start(&htim5, tim_ch); led_stats |= tim_ch; } break; } return BSP_OK; }