- #include "stm32f1xx_hal.h"
- TIM_HandleTypeDef htim2;
- void SystemClock_Config(void);
- static void MX_GPIO_Init(void);
- static void MX_TIM2_Init(void);
- int main(void)
- {
- HAL_Init();
- SystemClock_Config();
- MX_GPIO_Init();
- MX_TIM2_Init();
- // 启动PWM
- HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
- while (1)
- {
- for (int i = 0; i <= 100; i++)
- {
- __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, i);
- HAL_Delay(100); // 每100ms调整一次亮度
- }
- }
- }
- static void MX_TIM2_Init(void)
- {
- TIM_OC_InitTypeDef sConfigOC = {0};
- htim2.Instance = TIM2;
- htim2.Init.Prescaler = 71;
- htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim2.Init.Period = 100;
- htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- HAL_TIM_PWM_Init(&htim2);
- sConfigOC.OCMode = TIM_OCMODE_PWM1;
- sConfigOC.Pulse = 0;
- sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
- sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
- HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
- }
- void SystemClock_Config(void) { /* 时钟配置略 */ }
- void MX_GPIO_Init(void) { /* GPIO配置略 */ }
解释:
- 我配置了TIM2的PWM模式,选择了通道1输出PWM信号。
- 通过循环来逐渐改变占空比,LED亮度会逐渐变化,实现“呼吸灯”效果。
总结:通过STM32的定时器和PWM功能,我成功控制了LED的亮度。这个代码非常简洁,可以用在很多项目中,比如调节亮度、控制电机等。如果你也是STM32的爱好者,可以尝试一下这样的方法!