| 代码实现 c
 复制代码
 #include "stm32f0xx_hal.h"
 
 /* 定时器句柄 */
 TIM_HandleTypeDef htim2;
 
 /* 初始化定时器 */
 void TIM2_PWM_Init(void)
 {
 __HAL_RCC_TIM2_CLK_ENABLE();  // 启用定时器 2 的时钟
 
 /* 配置定时器 */
 htim2.Instance = TIM2;
 htim2.Init.Prescaler = 48 - 1;     // 预分频器,定时器时钟频率为 1 MHz(系统时钟 48 MHz)
 htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
 htim2.Init.Period = 1000 - 1;      // 设置 PWM 周期为 1 ms
 htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
 HAL_TIM_PWM_Init(&htim2);          // 初始化定时器 2 为 PWM 模式
 
 /* 配置 PWM 输出通道 */
 TIM_OC_InitTypeDef sConfigOC;
 sConfigOC.OCMode = TIM_OCMODE_PWM1;
 sConfigOC.Pulse = 500;  // 设置占空比为 50%
 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
 HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1); // 配置 TIM2 的通道 1
 
 /* 启动 PWM 输出 */
 HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
 }
 
 int main(void)
 {
 HAL_Init();
 __HAL_RCC_GPIOA_CLK_ENABLE();  // 启用 GPIOA 时钟
 
 /* 配置 PA5 为定时器输出 */
 GPIO_InitTypeDef GPIO_InitStruct = {0};
 GPIO_InitStruct.Pin = GPIO_PIN_5;
 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
 /* 初始化 PWM */
 TIM2_PWM_Init();
 
 while (1)
 {
 // 在这里你可以修改 CCR 的值来调节 PWM 的占空比
 // 例如,增加占空比:
 __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 750);  // 将占空比调整为 75%
 HAL_Delay(1000);
 
 // 还可以动态调整 PWM 波形
 __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 250);  // 将占空比调整为 25%
 HAL_Delay(1000);
 }
 }
 |