/* * pwm.c * * Created on: Jan 16, 2018 * Author: wn */ #include "pwm.h" #include "stm32f1xx_hal.h" #include extern TIM_HandleTypeDef htim3; const int32_t PWM_MAX = 10000; const int32_t PWM_STEP = 200; typedef struct { int32_t value; int32_t direction; } tPwmHandle; tPwmHandle pwmHandle = { .value = 0, .direction = 1 }; void pwmExec(void *handle) { tPwmHandle *lPwmHandle = (tPwmHandle*) handle; lPwmHandle->value += (PWM_STEP * lPwmHandle->direction); if (lPwmHandle->value >= PWM_MAX) { lPwmHandle->direction = -1; } if (lPwmHandle->value <= 0) { lPwmHandle->direction = 1; } __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, lPwmHandle->value); } void pwmInit() { schAdd(pwmExec, &pwmHandle, 0, 50); __HAL_TIM_SET_AUTORELOAD(&htim3, PWM_MAX); __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 0); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); }