PWM在高频情况下,一个很好的用途便是经过操控占空比来操控输出的功率,比方操控电扇转速、LED灯的亮度等。这次就运用PWM的中止功用,动态改动脉冲的占空比,来完成呼吸灯的作用。
一、完成思路
PWM能够挑选让计数器在周期完毕发生中止(在周期中心对齐时,或许挑选在周期中心也发生中止),而且能够在运转的时分动态地调整占空比、周期、极性等特点。所以能够在中止处理函数中动态地改动占空比以改动LED灯的亮度。
这次也将运用通道0和引脚PA0。
二、PWM设置
这儿需求用到较高频率的时钟,所以挑选运用主时钟经32分频后的时钟(12.5 kHz)。计数器周期为400,即输出脉冲频率为125000/400 = 312.5 Hz。一起需求使能相应的中止。
PWM的首要装备代码如下:
#define PERIOD_VALUE 400
/* 时钟挑选 */
PWM->PWM_CH_NUM[0].PWM_CMR = PWM_CMR_CPRE_MCK_DIV_32;
/* 启用中止 */
PWM->PWM_IER1 = PWM_IER1_CHID0;
/* 周期及占空比 */
PWM->PWM_CH_NUM[0].PWM_CPRD= PWM_CPRD_CPRD(PERIOD_VALUE);
PWM->PWM_CH_NUM[0].PWM_CDTY = PWM_CDTY_CDTY(0);
/* 使能中止 */
NVIC_ClearPendingIRQ(PWM_IRQn);
NVIC_SetPriority(PWM_IRQn, 0);
NVIC_EnableIRQ(PWM_IRQn);
三、PWM中止处理
在每个周期完毕后,会发生一个中止。然后在中止处理函数中,改动占空比。需求留意的是,在PWM使能时,需求经过写入PWM占空比修正寄存器(PWM_CDTYUPD)来改动占空比。默许情况下,该修正鄙人一个周期收效。
为得到更好的作用,能够在两次呼吸之间设置一断距离。
留意,需求经过读取PWM_ISR1来拉低发生的中止。中止处理函数在后面的完好代码中贴出。