|
@@ -1,59 +1,60 @@
|
|
|
-#include "stm32f0xx_hal.h"
|
|
|
-#include "pwm_out.h"
|
|
|
-#include <stdio.h>
|
|
|
-
|
|
|
-
|
|
|
-#define PERIOD_VALUE 1000
|
|
|
-#define PULSE1_VALUE 100
|
|
|
-#define PULSE2_VALUE 100
|
|
|
-
|
|
|
-
|
|
|
-static TIM_HandleTypeDef TimHandle;
|
|
|
-static TIM_OC_InitTypeDef sConfig;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-//
|
|
|
-void tim_pwm_out_init(void)
|
|
|
-{
|
|
|
- GPIO_InitTypeDef GPIO_InitStruct;
|
|
|
-
|
|
|
- uint32_t uhPrescalerValue = 0;
|
|
|
- uhPrescalerValue = (uint32_t)(SystemCoreClock / 16000000) - 1;
|
|
|
-
|
|
|
- __HAL_RCC_GPIOA_CLK_ENABLE();
|
|
|
- __HAL_RCC_TIM1_CLK_ENABLE();
|
|
|
-
|
|
|
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
|
- GPIO_InitStruct.Pull = GPIO_PULLUP;
|
|
|
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
|
|
- GPIO_InitStruct.Alternate = GPIO_AF2_TIM1;
|
|
|
- GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10;
|
|
|
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
|
|
-
|
|
|
- TimHandle.Instance = TIM1;
|
|
|
- TimHandle.Init.Prescaler = uhPrescalerValue;
|
|
|
- TimHandle.Init.Period = PERIOD_VALUE;
|
|
|
- TimHandle.Init.ClockDivision = 0;
|
|
|
- TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
|
|
|
- TimHandle.Init.RepetitionCounter = 0;
|
|
|
- TimHandle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
|
|
- HAL_TIM_PWM_Init(&TimHandle);
|
|
|
-
|
|
|
- sConfig.OCMode = TIM_OCMODE_PWM1;
|
|
|
- sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
|
|
|
- sConfig.OCFastMode = TIM_OCFAST_DISABLE;
|
|
|
- sConfig.OCNPolarity = TIM_OCNPOLARITY_HIGH;
|
|
|
- sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
|
|
|
-
|
|
|
- sConfig.OCIdleState = TIM_OCIDLESTATE_RESET;
|
|
|
-
|
|
|
- sConfig.Pulse = PULSE1_VALUE;
|
|
|
- HAL_TIM_PWM_ConfigChannel(&TimHandle, &sConfig, TIM_CHANNEL_2);
|
|
|
-
|
|
|
- sConfig.Pulse = PULSE2_VALUE;
|
|
|
- HAL_TIM_PWM_ConfigChannel(&TimHandle, &sConfig, TIM_CHANNEL_3);
|
|
|
-
|
|
|
- HAL_TIM_PWM_Start(&TimHandle, TIM_CHANNEL_2);
|
|
|
- HAL_TIM_PWM_Start(&TimHandle, TIM_CHANNEL_3);
|
|
|
+#include "stm32f0xx_hal.h"
|
|
|
+#include "pwm_out.h"
|
|
|
+#include <stdio.h>
|
|
|
+
|
|
|
+#define PWM_OUT_TIM_FREQ 1000000
|
|
|
+#define PERIOD_VALUE 20000
|
|
|
+
|
|
|
+#define IDLE_PULSE 1552 // Начальное значение PWM до нажатий
|
|
|
+
|
|
|
+
|
|
|
+static TIM_HandleTypeDef TimHandle;
|
|
|
+static TIM_OC_InitTypeDef sConfig;
|
|
|
+
|
|
|
+static uint16_t prescaler;
|
|
|
+
|
|
|
+
|
|
|
+//
|
|
|
+void tim_pwm_out_init(void)
|
|
|
+{
|
|
|
+ GPIO_InitTypeDef GPIO_InitStruct;
|
|
|
+
|
|
|
+
|
|
|
+ __HAL_RCC_GPIOA_CLK_ENABLE();
|
|
|
+ __HAL_RCC_TIM1_CLK_ENABLE();
|
|
|
+
|
|
|
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
|
+ GPIO_InitStruct.Pull = GPIO_PULLUP;
|
|
|
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
|
|
+ GPIO_InitStruct.Alternate = GPIO_AF2_TIM1;
|
|
|
+ GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10;
|
|
|
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
|
|
+
|
|
|
+ prescaler = HAL_RCC_GetHCLKFreq()/PWM_OUT_TIM_FREQ - 1;
|
|
|
+
|
|
|
+ TimHandle.Instance = TIM1;
|
|
|
+ TimHandle.Init.Prescaler = prescaler;
|
|
|
+ TimHandle.Init.Period = PERIOD_VALUE;
|
|
|
+ TimHandle.Init.ClockDivision = 0;
|
|
|
+ TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
|
|
|
+ TimHandle.Init.RepetitionCounter = 0;
|
|
|
+ TimHandle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
|
|
+ HAL_TIM_PWM_Init(&TimHandle);
|
|
|
+
|
|
|
+ sConfig.OCMode = TIM_OCMODE_PWM1;
|
|
|
+ sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
|
|
|
+ sConfig.OCFastMode = TIM_OCFAST_DISABLE;
|
|
|
+ sConfig.OCNPolarity = TIM_OCNPOLARITY_HIGH;
|
|
|
+ sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
|
|
|
+
|
|
|
+ sConfig.OCIdleState = TIM_OCIDLESTATE_RESET;
|
|
|
+
|
|
|
+ sConfig.Pulse = IDLE_PULSE;
|
|
|
+ HAL_TIM_PWM_ConfigChannel(&TimHandle, &sConfig, TIM_CHANNEL_2);
|
|
|
+
|
|
|
+ sConfig.Pulse = IDLE_PULSE;
|
|
|
+ HAL_TIM_PWM_ConfigChannel(&TimHandle, &sConfig, TIM_CHANNEL_3);
|
|
|
+
|
|
|
+ HAL_TIM_PWM_Start(&TimHandle, TIM_CHANNEL_2);
|
|
|
+ HAL_TIM_PWM_Start(&TimHandle, TIM_CHANNEL_3);
|
|
|
}
|