pwn呼吸灯stm32f103c8t6
时间: 2025-05-11 20:29:38 浏览: 17
### 实现 STM32F103C8T6 单片机上通过 PWM 的呼吸灯效果
#### 1. PWM 简介
PWM(Pulse Width Modulation,脉宽调制)是一种利用微处理器的数字输出来对模拟电路进行控制的技术。其核心思想是通过对信号占空比的调节,在一定频率下改变输出电压的有效值[^1]。
#### 2. 呼吸灯的工作原理
呼吸灯的效果是通过逐渐调整 LED 的亮度实现的。LED 的亮度与其驱动电流成正比关系,而驱动电流可以通过 PWM 输出的平均电压来间接调控。具体来说,通过不断变化 PWM 的占空比,使 LED 的亮度呈现缓慢上升再下降的过程,从而达到“呼吸”的视觉效果[^2]。
#### 3. 使用 HAL 库配置 STM32F103C8T6 的 PWM 功能
以下是基于 HAL 库实现呼吸灯的具体方法:
##### (1)硬件连接
将 STM32F103C8T6 的某个定时器通道引脚(如 PA8 或 PB6)连接至 LED 的阳极,阴极接地,并串联一个限流电阻以保护 LED 和 MCU[^3]。
##### (2)软件配置 CubeMX
在 STM32CubeMX 中完成如下设置:
- **启用 TIMx 定时器**:选择通用定时器(如 TIM1 或 TIM2),并将其模式设为 PWM。
- **配置 GPIO 引脚功能**:将对应的 PWM 输出引脚分配给所选定时器的通道。
- **设定参数**:
- 波形频率:通常设置为几百赫兹以上,以便人眼无法察觉闪烁现象。
- 初始占空比:可以先固定为某一百分比值,后续动态修改该比例以实现渐变效果。
##### (3)编写主程序逻辑
以下为主程序的关键部分代码示例:
```c
#include "main.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_TIM2_Init(void);
TIM_HandleTypeDef htim2;
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM2_Init();
while (1)
{
for(int i=0;i<=100;i++) // 调节占空比从0%到100%
{
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, i); // 设置比较值
HAL_Delay(10); // 控制速度
}
for(int i=100;i>=0;i--) // 调节占空比从100%回到0%
{
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, i);
HAL_Delay(10);
}
}
}
// 初始化 TIM2 配置函数省略...
```
上述代码实现了通过循环逐步增加和减少 PWM 的占空比,形成平滑过渡的亮暗变化过程。
#### 4. 总结
通过合理设计 PWM 的波形特性以及精确控制其占空比的变化规律,可以在 STM32 平台上轻松达成自然流畅的呼吸灯光效表现。此方案不仅适用于单一 LED 的演示项目,还可扩展应用于多路独立可控照明场景之中。
阅读全文
相关推荐


















