pwm.c- #include "pwm.h"
-
- TIM_HandleTypeDef TIM3_PWM_Struct; // TIM_PWM句柄
- TIM_OC_InitTypeDef TIM3_OC_Sturct; // TIM_OC句柄
-
- void TIM3_PWM_Init() // PWM初始化
- {
-
- TIM3_PWM_Struct.Instance = TIM3;
- TIM3_PWM_Struct.Init.Prescaler = 90 - 1; // 预分频系数
- TIM3_PWM_Struct.Init.Period = 500 - 1; // 自动装载值
- TIM3_PWM_Struct.Init.CounterMode = TIM_COUNTERMODE_UP; // 计数模式:向上计数
-
- HAL_TIM_PWM_Init(&TIM3_PWM_Struct); // TIM_PWM初始化
-
- TIM3_OC_Sturct.OCMode = TIM_OCMODE_PWM1; // 选择PWM1,还是PWM2
- TIM3_OC_Sturct.Pulse = 250; // 占空比:为Period(ARR)一半
- TIM3_OC_Sturct.OCPolarity = TIM_OCPOLARITY_LOW; // 因为小灯是低电平有效 选择低电平
-
- HAL_TIM_PWM_ConfigChannel(&TIM3_PWM_Struct, &TIM3_OC_Sturct, TIM_CHANNEL_4); // 初始化PWM通道参数
-
- HAL_TIM_PWM_Start(&TIM3_PWM_Struct, TIM_CHANNEL_4); // 使能定时器PWM
-
- }
-
- void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
- {
-
- if (htim->Instance == TIM3)
- {
-
- GPIO_InitTypeDef GPIO_Struct; // GPIO句柄
-
- GPIO_Struct.Pin = GPIO_PIN_1; // PB1
- GPIO_Struct.Mode = GPIO_MODE_AF_PP; // 推挽输出
- GPIO_Struct.Pull = GPIO_PULLUP; // 上拉
- GPIO_Struct.Speed = GPIO_SPEED_FAST; // 高速
- GPIO_Struct.Alternate = GPIO_AF2_TIM3; // 复用为TIM3
-
- HAL_GPIO_Init(GPIOB, &GPIO_Struct);
-
- __HAL_RCC_TIM3_CLK_ENABLE(); // TIM3时钟使能
- __HAL_RCC_GPIOB_CLK_ENABLE(); // GPIOB时钟使能
-
- }
-
- }
-
- void TIM3_PWM_SetValue(TIM_HandleTypeDef *htim, uint32_t value) // 改变PWM占空比的值
- {
-
- htim->Instance->CCR4 = value; // 占空比大亮度亮,占空比小亮度暗
-
- }
|