1.ST-PWM驱动适配。

This commit is contained in:
MacRsh
2024-01-22 16:59:19 +08:00
parent 6f059f4935
commit 249ad56859
10 changed files with 544 additions and 50 deletions

View File

@@ -171,6 +171,7 @@ static int drv_pwm_configure(struct mr_pwm *pwm, int state)
static int drv_pwm_channel_configure(struct mr_pwm *pwm, int channel, int state, int polarity)
{
struct drv_pwm_data *pwm_data = (struct drv_pwm_data *)pwm->dev.drv->data;
int OCPreload = (state == ENABLE) ? TIM_OCPreload_Enable : TIM_OCPreload_Disable;
TIM_OCInitTypeDef TIM_OCInitStructure = {0};
GPIO_InitTypeDef GPIO_InitStructure = {0};
@@ -192,8 +193,7 @@ static int drv_pwm_channel_configure(struct mr_pwm *pwm, int channel, int state,
GPIO_InitStructure.GPIO_Pin = pwm_data->ch1_pin;
GPIO_Init(pwm_data->ch1_port, &GPIO_InitStructure);
TIM_OC1Init(pwm_data->instance, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(pwm_data->instance, state ? TIM_OCPreload_Enable : TIM_OCPreload_Disable);
TIM_SetCompare1(pwm_data->instance, 0);
TIM_OC1PreloadConfig(pwm_data->instance, OCPreload);
return MR_EOK;
}
case 2:
@@ -201,8 +201,7 @@ static int drv_pwm_channel_configure(struct mr_pwm *pwm, int channel, int state,
GPIO_InitStructure.GPIO_Pin = pwm_data->ch2_pin;
GPIO_Init(pwm_data->ch2_port, &GPIO_InitStructure);
TIM_OC2Init(pwm_data->instance, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(pwm_data->instance, state ? TIM_OCPreload_Enable : TIM_OCPreload_Disable);
TIM_SetCompare2(pwm_data->instance, 0);
TIM_OC2PreloadConfig(pwm_data->instance, OCPreload);
return MR_EOK;
}
case 3:
@@ -210,8 +209,7 @@ static int drv_pwm_channel_configure(struct mr_pwm *pwm, int channel, int state,
GPIO_InitStructure.GPIO_Pin = pwm_data->ch3_pin;
GPIO_Init(pwm_data->ch3_port, &GPIO_InitStructure);
TIM_OC3Init(pwm_data->instance, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(pwm_data->instance, state ? TIM_OCPreload_Enable : TIM_OCPreload_Disable);
TIM_SetCompare3(pwm_data->instance, 0);
TIM_OC3PreloadConfig(pwm_data->instance, OCPreload);
return MR_EOK;
}
case 4:
@@ -219,17 +217,14 @@ static int drv_pwm_channel_configure(struct mr_pwm *pwm, int channel, int state,
GPIO_InitStructure.GPIO_Pin = pwm_data->ch4_pin;
GPIO_Init(pwm_data->ch4_port, &GPIO_InitStructure);
TIM_OC4Init(pwm_data->instance, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(pwm_data->instance, state ? TIM_OCPreload_Enable : TIM_OCPreload_Disable);
TIM_SetCompare4(pwm_data->instance, 0);
TIM_OC4PreloadConfig(pwm_data->instance, OCPreload);
return MR_EOK;
}
default:
{
return MR_EINVAL;
}
}
return MR_EOK;
}
static void drv_pwm_start(struct mr_pwm *pwm, uint32_t prescaler, uint32_t period)

View File

@@ -188,6 +188,7 @@ static int drv_timer_configure(struct mr_timer *timer, int state)
NVIC_Init(&NVIC_InitStructure);
if (state == DISABLE)
{
TIM_ITConfig(timer_data->instance, TIM_IT_Update, DISABLE);
TIM_Cmd(timer_data->instance, DISABLE);
}
return MR_EOK;
@@ -211,8 +212,8 @@ static void drv_timer_stop(struct mr_timer *timer)
struct drv_timer_data *timer_data = (struct drv_timer_data *)timer->dev.drv->data;
/* Disable the timer */
TIM_Cmd(timer_data->instance, DISABLE);
TIM_ITConfig(timer_data->instance, TIM_IT_Update, DISABLE);
TIM_Cmd(timer_data->instance, DISABLE);
}
static uint32_t drv_timer_get_count(struct mr_timer *timer)