主函数
void main(void)
{
LED_Init(LED3);
CLOCK_Hse(CPUDIV1);//设置系统时钟为 HSE 的一分频,即 16M
tiMER2_PWMInit(1000,0);//初始化 TIM2 参数
uint16_t i=0, PWM=0;
while (1)
{
if(i == 0)
{
PWM+=10;
if(PWM == 1000)
{
i=1;
}
}
else
{
PWM-=10;
if(PWM == 0)
{
i=0;
}
}
TIM2_SetCompare3(PWM);
}
}
pwm.c
void TIMER2_PWMInit(unsigned short timebase,unsigned short t)
{
TIM2_DeInit();
/*
* TIM2 Frequency = TIM2 counter clock/(ARR + 1)
* 这里设置TIM2的计数频率为 16M/8/(timebase+1)=1K
*/
TIM2_TimeBaseInit(TIM2_PRESCALER_16, timebase);//分频和ARRL、ARRH初始化TIME2时基单元
/*
* PWM1 Mode configuration: Channel1
* TIM2 Channel1 duty cycle = [TIM2_CCR1/(TIM2_ARR + 1)] * 100 = 50%
* TIM2 Channel2 duty cycle = [TIM2_CCR2/(TIM2_ARR + 1)] * 100 = 50%
*/
/* 测试通道1 */
TIM2_OC3Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, t, TIM2_OCPOLARITY_HIGH);//CCER的控制
TIM2_OC3PreloadConfig(ENABLE);//开启预装载
TIM2_Cmd(ENABLE);
}
附上原理图
-
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>