1、使能定时器及端口时钟,并设置引脚复用映射
RCC_APB1PeriphClock(RCC_APB1Periph_TIM3,ENABLE);
注意定时器输出端口的重映射功能。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
2、初始化定时器参数,包含自动重载值,分频系数,计数方式等。
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
3、初始化PWM输出参数,包含PWM模式,输出极性,使能等。
void TIM_OCxInit(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStructure);
typedef struct
{
uint16_t TIM_OCMode; //输出比较模式
uint16_t TIM_OutputState; //比较输出使能
uint16_t TIM_OutputNState; //比较互补输出使能(高级TIM)
uint16_t TIM_Pulse; //脉冲宽度(高级TIM)
uint16_t TIM_OCPolarity; //输出极性
uint16_t TIM_OCNPolarity; //互补比较输出极性(高级TIM)
uint16_t TIM_OCIdleState; //空闲状态下比较输出状态(高级TIM)
uint16_t TIM_OCNIdleState; //空闲状态下比较输出状态(高级TIM)
} TIM_OCInitStructure
分析PWM配置:配置TIM3的CH1为PWM1模式,输出极性为低电平,使能PWM输出。
TIM_OCInitTypeDef TIM_OCInitStructure;//定义PWM结构体变量
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; //模式PWM1
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low; //有效电平为低电平
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //使能PWM输出
TIM_OC1Init(TIM3,&TIM_OCInitStructure)
4、开启定时器
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);
TIM_Cmd(TIM3,ENABLE); //开启定时器
5、修改TIMx_CCRx的值控制占空比
void TIM_SetCompare1(TIM_TypeDef* TIMx, uint32_t Compare1);
6、使能TIMx在CCRx上的预装载寄存器
void TIM_OCxPreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
参数1选择定时器;参数2用于选择使能还是失能输出比较预装载寄存器
7、使能TIMx在ARR上的预装载寄存器的允许位
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
注意:高级定时器若要输出PWM波形,不许设置一个MOE位(寄存器TIMx_BDTR的第15位)。需配置函数void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState);