学习笔记————STM32通用定时器TIM实现PWM波配置步骤

STM32通用定时器TIM实现PWM波配置步骤

//1、开启定时器时钟和需要用到的IO口


void Clock_Init(void)
{
     
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,
	ENABLE);//因为准备把PB5口作为输出端口,所以接下来AFIO使能,如果使用默认的PA7		 输
	//出则不用使能AFIO,但需要使能GPIOA	
}

//2、IO口并重映射TIM3
void GPIO_Out_Init(void)
{
     
	GPIO_InitTypeDef    GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//因为启用了AFIO,所以需要配置为复
	//用推挽输出;若不进行重映射,使用推挽输出即可,GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);//TIM3开启部分重映射

}
//3、初始化定时器
void TIM_PWM_Init(u16 arr,u16 psc);
{
     
	TIM_TimeBaseInit   TIM_TimeBaseStructure;
	TIM_TimeBaseStructure.TIM_Period=arr;
	TIM_TimeBaseStructure.TIM_Prescale=psc;
	TIM_TimeBaseStructure.TIM_ClockDivision=0;
	TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
	TIM_Cmd(TIM3,ENABLE);
}
//4、初始化输出通道设置
void OC2_PWM_Init(void);
{
     
	TIM_OCInitTypeDef   TIM_OCInitStructure;
	TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
	TIM_OCInitStructure.TIM_OutputState=TIM_OutoutState_Enable;
	TIM_OCInitStructure.TIM_OCpolarity=TIM_OCpolarity_High;
	TIM_OC2Init(TIM3,&TIM_OCInitStructure);
	TIM_OC2preloadConfig(TIM3,TIM_OCPreload);
}
int main(void)
{
     
	u16 led0pwmval=0;
	u8 dir=1;
	delay_init();
	Clock_Init();
	GPIO_Out_Init();
	TIM_PWM_Init(899,0);
	OC2_PWM_Init();
	while(1)
	{
     
		
		delay_ms(10);
		if(dir)
			led0pwmval++;
		else
			 led0pwmval--;
		if(ledopwmval>100)
		   	dir=0;
		if(led0pwmval==0)
		   	dir=1;
		TIM_SetCompare2(TIM3,ledopwmval);
		  //因为每个定时器都有四个输出输出通道,上面第四步使用通道二作为输出,因此这里比较输出
		  //时也使用通道二
	}
}

PS:请各位指教,因为是初学有许多不太懂,如果哪里有错误请大家帮忙指出。

你可能感兴趣的:(学习笔记————STM32通用定时器TIM实现PWM波配置步骤)