123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #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);
- }
- //
- void tim_pwm_out_set_pulse(pwm_out_ch channel, uint16_t pulse)
- {
- switch (channel)
- {
- case PWM_OUT_CH_1:
- TIM1->CCR2 = pulse;
- break;
-
- case PWM_OUT_CH_2:
- TIM1->CCR3 = pulse;
- break;
-
- default : break;
- }
- }
- //
- void tim_pwm_pulse_idle(void)
- {
- TIM1->CCR2 = IDLE_PULSE;
- TIM1->CCR3 = IDLE_PULSE;
- }
|