有关时基单元公式:
•
计数器计数频率:
CK_CNT
= CK_PSC
/ (PSC
+ 1)
•计数器溢出频率:CK_CNT_OV = CK_CNT / (ARR + 1)
= CK_PSC / (PSC + 1) / (ARR + 1)
•
PWM
频率:
Freq = CK_PSC / (PSC
+ 1) / (ARR
+ 1)
•
PWM
占空比:
Duty = CCR / (ARR
+ 1)
•
PWM
分辨率:
Reso = 1 / (ARR
+ 1)
先看看需要配置的模块
首先配置时基单元:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//选择定时器,开启时钟
TIM_InternalClockConfig(TIM2);//选择内部时钟模式
//配置时基单元初始化
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_TimeBaseInitStruct.TIM_ClockDivision=;
TIM_TimeBaseInitStruct.TIM_CounterMode=;
TIM_TimeBaseInitStruct.TIM_Period=;
TIM_TimeBaseInitStruct.TIM_Prescaler=;
TIM_TimeBaseInitStruct.TIM_RepetitionCounter=;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
TIM_Cmd(TIM2,ENABLE);//指定开启外设,计数器开始计数
//配置输出比较单元初始化
TIM_OCInitTypeDef TIM_OCInitStruct;
TIM_OCStructInit(&TIM_OCInitStruct);
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_Pulse=;//CCR
TIM_OC1Init(TIM2,TIM_OCInitStruct);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启时钟
//配置GPIO口初始化
GPIO_InitTypeDef GPIO_InitStruct;
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);
再配置输出比较单元。
接着想突出PWM的功能,就需要不断更改CCR的值,也就是不断更改占空比。。。↓↓↓↓↓↓↓↓↓↓↓↓↓↓
void PWM_SetCompare1(uint16_t Compare)
{
TIM_SetCompare1(TIM2,Compare);
}