PWM输出实验:STM32+HAL+CubeMX
1 步骤:
1.1 初始化PWM
TIM_HandleTypeDef htim3; //定时器3PWM句柄 TIM_OC_InitTypeDef TIM3_CH3Handler; //定时器3通道3句柄 void TIM3_PWM_Init(void) { htim3.Instance = TIM3; //定时器3 htim3.Init.Prescaler = 16-1; //分频PSC htim3.Init.CounterMode = TIM_COUNTERMODE_UP; //向上计数模式 htim3.Init.Period = 1000-1; //自动重装载值 htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; HAL_TIM_PWM_Init(&htim3); //初始化PWM sConfigOC.OCMode = TIM_OCMODE_PWM1; //模式选择PWM1 sConfigOC.Pulse = 0; //此值用来设置占空比,若占空比变化次处可先不设置 sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW; //输出比较极性为低 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3) ; //配置TIM3通道3 }
1.2 使能TIM时钟、配置复用功能引脚
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOB_CLK_ENABLE(); //使能GPIOB时钟 __HAL_RCC_TIM3_CLK_DISABLE(); //使能定时器3时钟 GPIO_InitStruct.Pin = GPIO_PIN_0; //PB0 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; //复用推挽输出 GPIO_InitStruct.Pull = GPIO_PULLUP; //上拉 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; //高速 GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; //PB0复用TIM3_CH3,根据芯片选择,此处需要改 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); }
1.3 设置TIM的占空比
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3); //在main函数中,开启PWM通道3 if(dir) dutycycle++; else dutycycle--; if(dutycycle>499) dir=0; if(dutycycle==0) dir=1; TIM3->CCR3=dutycycle; //用来设置占空比 //__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,dutycycle); //用来设置占空比,同上
2 使用CubeMX配置