2026-07-22 20:29:57
嵌入式呼吸灯的实现主要分为硬件配置与初始化、PWM模式初始化、动态占空比调整三个步骤,具体如下:
1. 硬件配置与初始化首先需完成时钟、GPIO及定时器的配置。时钟配置需使能定时器(如TIM2/TIM3/TIM4)和对应GPIO的时钟,例如STM32中通过RCC_APB1PeriphClockCmd和RCC_APB2PeriphClockCmd函数开启时钟。GPIO设置需将LED连接的引脚配置为复用推挽输出模式,例如PA6连接TIM3_CH1驱动外接LED,PC13连接TIM4_CH1驱动板载LED。定时器参数设置需确定PWM频率,通过配置自动重装载值(ARR)、预分频器(Prescaler)和计数模式(如向上计数)实现。例如,设置ARR=99、Prescaler=719,在100kHz时钟下可得到1kHz的PWM频率(100kHz/100周期)。
2. PWM模式初始化需选择PWM模式并设置初始参数。PWM模式选择需配置定时器为模式1或模式2,并设置输出极性(高电平有效或低电平有效),例如通过TIM_OCInitTypeDef结构体配置PWM模式1、输出使能、极性为高。初始占空比通过捕获/比较寄存器(CCR)设置,例如CCR=0对应LED熄灭,CCR=500对应50%亮度(假设周期为1000)。最后调用库函数(如HAL_TIM_PWM_Start)启动定时器通道的PWM输出。
3. 动态占空比调整通过定时修改占空比实现亮度渐变。需定义变量(如duty_num)存储占空比,并通过延时函数(如HAL_Delay)定时更新。例如,每隔50ms将占空比增加10,超过周期值(如500)时归零,形成循环渐变。若需多个LED交替呼吸,可分别配置不同定时器(如TIM3和TIM4)的占空比变化方向(一个递增、一个递减),并设置错开的初始值(如一个从0开始,另一个从50%开始)。实时更新占空比时,通过库函数(如__HAL_TIM_SetCompare)将新值写入CCR寄存器,动态调整LED亮度。
关键原理:PWM通过固定频率方波中高电平占比(占空比)调节平均功率,人眼因视觉暂留效应感知为连续亮度变化。频率需高于100Hz以避免闪烁。