利用PWM的调节功能可以实现LED的呼吸灯效果,为调整呼吸灯的快慢,可为其配置一个时间很短的延时函数。
该延时函数的内容为:
void Delay(void)
{
volatile uint32_t delay = 0x2ffff;
while(delay--);
}
为进行PWM调节,其初始化函数为:
void TMR_Config(void)
{
RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_TMR5);
tmrBaseConfig.countMode = TMR_COUNTER_MODE_UP;
tmrBaseConfig.clockDivision = TMR_CLOCK_DIV_1;
tmrBaseConfig.period = 999;
tmrBaseConfig.division = 119;
tmrBaseConfig.repetitionCounter = 0;
TMR_ConfigTimeBase(TMR5, &tmrBaseConfig);
tmrOCConfig.mode = TMR_OC_MODE_PWM1;
tmrOCConfig.outputState = TMR_OC_STATE_ENABLE;
tmrOCConfig.outputNState = TMR_OC_NSTATE_DISABLE;
tmrOCConfig.polarity = TMR_OC_POLARITY_HIGH;
tmrOCConfig.nPolarity = TMR_OC_NPOLARITY_HIGH;
tmrOCConfig.idleState = TMR_OC_IDLE_STATE_RESET;
tmrOCConfig.nIdleState = TMR_OC_NIDLE_STATE_RESET;
tmrOCConfig.pulse = 0;
TMR_ConfigOC2(TMR5, &tmrOCConfig);
TMR_EnablePWMOutputs(TMR5);
TMR_Enable(TMR5);
}
对PWM输出引脚的配置函数为:
void TMR_GPIO_Config(void)
{
GPIO_Config_T gpioConfig;
RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOA);
gpioConfig.speed = GPIO_SPEED_50MHz;
gpioConfig.mode = GPIO_MODE_AF_PP;
gpioConfig.pin = GPIO_PIN_1;
GPIO_Config(GPIOA, &gpioConfig);
}
经前面几个函数的配合,实现呼吸灯效果的主程序为:
int main(void)
{
uint8_t f=0;
BOARD_LED_Config(LED2);
TMR_GPIO_Config();
TMR_Config();
while (1)
{
if(f==0)
{
t=t+1;
if(t>100) f=1;
}
else
{
t=t-1;
if(t<1) f=0;
}
tmrOCConfig.pulse = t;
TMR_ConfigOC2(TMR5, &tmrOCConfig);
Delay();
}
}
经程序的编译和下载,则可在PA1引脚所连接的LED模块上见到所呈现的呼吸灯效果。
演示效果:
|