LED PWM WIP

This commit is contained in:
Your Name
2021-11-11 19:59:53 +01:00
parent 4536d4003f
commit 464dbc78e4
5 changed files with 42 additions and 23 deletions

View File

@@ -18,6 +18,9 @@
#define RGBLED_OK 0
#define RGBLED_ERROR -1 // generic error
#define RGBLED_PRESCALER 0
#define RGBLED_PERIOD 255
/*
* Type definitions
*/
@@ -26,6 +29,7 @@ typedef struct {
// tim2 ch1 B
// tim22 ch1 G
// tim22 ch2 R
// TODO union, aby se dalo nastavovat LED v cyklu (set_color)
TIM_TypeDef *timer_R;
TIM_TypeDef *timer_G;
TIM_TypeDef *timer_B;

View File

@@ -220,11 +220,12 @@ int main(void)
rgbled_context.timer_R = TIM22;
rgbled_context.timer_G = TIM22;
rgbled_context.timer_B = TIM2;
rgbled_context.channel_R = 2;
rgbled_context.channel_G = 1;
rgbled_context.channel_B = 1;
rgbled_init(&rgbled_context);
LL_TIM_OC_SetCompareCH1(TIM2, 0); // B
LL_TIM_OC_SetCompareCH1(TIM22, 65535); // G
LL_TIM_OC_SetCompareCH2(TIM22, 65535); // R
rgbled_set_color(255, 0, 0);
while (1) {
// rgbled_set_color(30000, 0, 0);
@@ -513,9 +514,9 @@ static void MX_TIM2_Init(void)
/* USER CODE BEGIN TIM2_Init 1 */
/* USER CODE END TIM2_Init 1 */
TIM_InitStruct.Prescaler = 0;
TIM_InitStruct.Prescaler = RGBLED_PRESCALER;
TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
TIM_InitStruct.Autoreload = 65535;
TIM_InitStruct.Autoreload = RGBLED_PERIOD;
TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
LL_TIM_Init(TIM2, &TIM_InitStruct);
LL_TIM_DisableARRPreload(TIM2);
@@ -607,21 +608,20 @@ static void MX_TIM22_Init(void)
/* USER CODE BEGIN TIM22_Init 1 */
/* USER CODE END TIM22_Init 1 */
TIM_InitStruct.Prescaler = 0;
TIM_InitStruct.Prescaler = RGBLED_PRESCALER;
TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
TIM_InitStruct.Autoreload = 65535;
TIM_InitStruct.Autoreload = RGBLED_PERIOD;
TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
LL_TIM_Init(TIM22, &TIM_InitStruct);
LL_TIM_DisableARRPreload(TIM22);
LL_TIM_OC_EnablePreload(TIM22, LL_TIM_CHANNEL_CH1);
TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_PWM1;
TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE;
TIM_OC_InitStruct.CompareValue = 32768;
TIM_OC_InitStruct.CompareValue = 0;
TIM_OC_InitStruct.OCPolarity = LL_TIM_OCPOLARITY_HIGH;
LL_TIM_OC_Init(TIM22, LL_TIM_CHANNEL_CH1, &TIM_OC_InitStruct);
LL_TIM_OC_DisableFast(TIM22, LL_TIM_CHANNEL_CH1);
LL_TIM_OC_EnablePreload(TIM22, LL_TIM_CHANNEL_CH2);
TIM_OC_InitStruct.CompareValue = 0;
LL_TIM_OC_Init(TIM22, LL_TIM_CHANNEL_CH2, &TIM_OC_InitStruct);
LL_TIM_OC_DisableFast(TIM22, LL_TIM_CHANNEL_CH2);
LL_TIM_SetTriggerOutput(TIM22, LL_TIM_TRGO_RESET);

View File

@@ -25,9 +25,18 @@ int8_t rgbled_set_color(uint16_t R, uint16_t G, uint16_t B)
// tim2 ch1 B
// tim22 ch1 G
// tim22 ch2 R
LL_TIM_OC_SetCompareCH1(TIM2, (uint32_t)B); // B
LL_TIM_OC_SetCompareCH1(TIM22, (uint32_t)G); // G
LL_TIM_OC_SetCompareCH2(TIM22, (uint32_t)R); // R
if (
R > RGBLED_PERIOD || \
G > RGBLED_PERIOD || \
B > RGBLED_PERIOD)
{
return RGBLED_ERROR;
}
LL_TIM_OC_SetCompareCH1(rgbled_context->timer_B, (uint32_t)(RGBLED_PERIOD - B)); // B
LL_TIM_OC_SetCompareCH1(rgbled_context->timer_G, (uint32_t)(RGBLED_PERIOD - G)); // G
LL_TIM_OC_SetCompareCH2(rgbled_context->timer_R, (uint32_t)(RGBLED_PERIOD - R)); // R
return RGBLED_OK;
}
int8_t rgbled_off(void)