STM32配置定时器1输出PWM控制电机(标准库)

       学习单片机配置一个所需要的功能,切记,切记,流程很重要,一定要多注意去总结,然后记录下来。

       今天我们现讲一下配置,定时器PWM功能的流程。

配置流程:

1、开启定时器时钟和PWM输出GPIO端口时钟;

RCC_APB2PeriphClockCmd()或者RCC_APB1PeriphClockCmd()函数

根据外设找时钟函数

RCC_APB1PeriphClockCmd():上挂接的外设;

RCC_APB2PeriphClockCmd():上挂接的外设;

 2、GPIO初始化               利用GPIO_Init()函数(复用推挽输出)

这个结构体的配置我就不粘出来了吧,就是点灯操作(哈哈哈)


3、定时器参数初始化;  利用TIM_Init()函数

利用TIM_TimeBaseInitTypeDef结构体进行配置,这是结构体里面的参数以及配置成什么样


4、输出比较初始化         利用TIM_OCxInit()函数   x:通道号

利用TIM_OCInitTypeDef结构体进行配置,这是结构体里面的参数以及配置成什么样

里面没有参数的都是高级定时器的参数配置,我就没有配置


5、使能定时器                利用 TIM_Cmd()函数

注:配置PWM输出时,一定先要看准定时器的输出通道,然后进行配置GPIO为复用推挽输出,先初始化定时器的基本内容,然后配置配置输出比较初始化函数(PWM是输出比较的一种模式),切记,一定看准这个初始化函数,是带数字的(数字表示通道数);

输出比较初始化函数原型,一共有四个,表示四个通道

还有两个库函数一定要记住

函数原型以及解析:

1、void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct)
这个函数是配置输出比较初始化结构体参数的,TIM_OCInitTypeDef:这个结构体参数有很多,有一半都是高级定时器(TIM1、TIM8)的参数,如果你用的通用定时器(TIM2~TIM5),那么一般的参数都不需要配置,但是,有参数不配置,在下次换成高级定时器时,会直接不好使,所以利用这个函数来,设置一下所有参数的值(这个值影响不到任何功能变化)。

2、void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1)

这个函数是改变占空比的,第一个参数选择定时器,第二个参数是数字,来改变占空比,也就是会直接改变输出比较初始化结构体里面的参数TIM_Pulse的数字;        

我感觉应该啥东西了,原理的话,自己找视频看吧。

定时器配置的源码:你们可以参考一下

void My_PWM_Init()
{
	GPIO_InitTypeDef GPIO_InitStruct;//GPIO结构体
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;//定时器结构体
	TIM_OCInitTypeDef TIM_OCInitStruct;//输出比较结构体
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,ENABLE);//开启GPIO时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//开启定时器时钟
	
	//2、初始化GPIO
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStruct.GPIO_Speed =GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//3、初始化定时器
	TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;//时钟分频
	TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上计数模式
	TIM_TimeBaseInitStruct.TIM_Period=100-1;//重装载值,控制PWM周期
	TIM_TimeBaseInitStruct.TIM_Prescaler=720-1;//预分频器
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;
	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
	
	//4、初始化输出比较模式、配置输出比较模式的结构体参数
	TIM_OCStructInit(&TIM_OCInitStruct);//配置输出比较结构体的参数
	
	TIM_OCInitStruct.TIM_Pulse=50; //配置CCR寄存器,控制占空比
	TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1; //配置输出比较模式
	TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;//控制输出的极性
	TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//输出使能
	TIM_OC1Init(TIM2,&TIM_OCInitStruct);
	
	//5、使能定时器
	TIM_Cmd(TIM2,ENABLE);
}


//TIM_SetCompare(x)()函数可以改变占空比

猜你喜欢

转载自blog.csdn.net/m0_58832575/article/details/125343426