LED PWM WIP
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user