diff --git a/Core/Inc/led.h b/Core/Inc/led.h new file mode 100644 index 0000000..31262e4 --- /dev/null +++ b/Core/Inc/led.h @@ -0,0 +1,17 @@ +#ifndef __LED_H +#define __LED_H + +#include "main.h" + +#define LED_R 1 +#define LED_G 2 +#define LED_B 4 +#define LED_ALL 7 + +void LED_Start(uint8_t led); +void LED_Stop(uint8_t led); + +// duty in [0, 100] +void LED_SetDuty(uint8_t r, uint8_t g, uint8_t b); + +#endif diff --git a/Core/Src/led.c b/Core/Src/led.c new file mode 100644 index 0000000..cdf511d --- /dev/null +++ b/Core/Src/led.c @@ -0,0 +1,34 @@ +#include "led.h" +#include "tim.h" + +#define LED_TIM (&htim3) +#define LED_R_CHAN TIM_CHANNEL_4 +#define LED_G_CHAN TIM_CHANNEL_3 +#define LED_B_CHAN TIM_CHANNEL_2 + +void LED_Start(uint8_t led) +{ + if (led & LED_R) + HAL_TIM_PWM_Start(LED_TIM, LED_R_CHAN); + if (led & LED_G) + HAL_TIM_PWM_Start(LED_TIM, LED_G_CHAN); + if (led & LED_B) + HAL_TIM_PWM_Start(LED_TIM, LED_B_CHAN); +} + +void LED_Stop(uint8_t led) +{ + if (led & LED_R) + HAL_TIM_PWM_Stop(LED_TIM, LED_R_CHAN); + if (led & LED_G) + HAL_TIM_PWM_Stop(LED_TIM, LED_G_CHAN); + if (led & LED_B) + HAL_TIM_PWM_Stop(LED_TIM, LED_B_CHAN); +} + +void LED_SetDuty(uint8_t r, uint8_t g, uint8_t b) +{ + __HAL_TIM_SetCompare(LED_TIM, LED_R_CHAN, r); + __HAL_TIM_SetCompare(LED_TIM, LED_G_CHAN, g); + __HAL_TIM_SetCompare(LED_TIM, LED_B_CHAN, b); +}