stm32hal库pwm控制led
时间: 2025-02-08 13:32:46 浏览: 48
### 使用 STM32 HAL 库实现 PWM 控制 LED
#### 初始化定时器和 GPIO 配置
要使用 STM32 HAL 库通过 PWM 控制 LED,首先需要配置定时器和相应的 GPIO 引脚。以下是具体操作:
```c
// 定义 TIM_HandleTypeDef 结构体用于初始化定时器
TIM_HandleTypeDef htim2;
void MX_TIM2_Init(void)
{
__HAL_RCC_TIM2_CLK_ENABLE(); // 启用 TIM2 时钟
TIM_OC_InitTypeDef sConfigOC;
htim2.Instance = TIM2; // 设定使用的定时器实例为 TIM2
// 设置自动重装载预分频值
htim2.Init.Prescaler = 7199;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 999;
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
}
```
这段代码完成了定时器 TIM2 的初始化工作并设置了 PWM 输出模式[^1]。
#### 修改占空比以调整亮度
接下来,在 `main` 函数中修改 PWM 占空比从而改变 LED 明暗程度:
```c
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and Systick. */
HAL_Init();
SystemClock_Config(); // 系统时钟配置
MX_GPIO_Init(); // GPIO 初始化
MX_TIM2_Init(); // 定时器初始化
uint16_t dutyCycle = 0;
while (1)
{
for(dutyCycle = 0 ; dutyCycle <= 1000 ; dutyCycle += 10){
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,dutyCycle);
HAL_Delay(5);
}
for(;dutyCycle >= 0;dutyCycle -= 10){
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,dutyCycle);
HAL_Delay(5);
}
}
}
```
上述程序实现了从最暗逐渐变亮再慢慢熄灭的效果,即呼吸灯效果[^3]。
#### 关键点说明
- **系统时钟源的选择**: 对于 STM32F103C8T6 芯片来说,为了获得更高的性能,默认情况下会采用 PLL 来提升主频至 72 MHz[^4]。
- **PWM 功能的应用场景**: 不仅限于控制单个 LED 的亮度变化,还可以应用于驱动电机调速、音频信号生成等多个方面[^2].
阅读全文
相关推荐

















