初级会员

- 积分
- 92
- 金钱
- 92
- 注册时间
- 2015-1-27
- 在线时间
- 4 小时
|
5金钱
void TIM3_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;//定义一个结构体变量,内含三个成员
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
//------需要修改TIMx
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器3时钟
//------需要修改GPIOx
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能GPIO外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//使能AFIO复用功能模块时钟,不能去掉本条语句
//------根据需要选择是否映射------需要修改TIMx
//GPIO_PinRemapConfig(GPIO_PartialRemap_TIMx, ENABLE); //Timerx部分重映射
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); //Timerx完全重映射
//GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, DISABLE); //Timer3部分重映射禁止
//GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, DISABLE); //Timer3完全重映射禁止
//GPIO_FullRemap_TIMx时表示完全映射
//设置该引脚为复用输出功能,输出TIM3 CH1、CH2、CH3、CH4的PWM脉冲波形
//------需要修改GPIO_Pin_x
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //作为PWM输出时GPIO口必须使用复用推挽输出
//GPIO_Mode_Out_OD 开漏输出
//GPIO_Mode_Out_PP 通用推挽输出
//GPIO_Mode_AF_OD 复用开漏输出
//GPIO_Mode_AF_PP 复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//------需要修改GPIOx
GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIO
//初始化TIM3
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
//------需要修改TIMx
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
//初始化TIM3 Channel2 PWM模式
//------根据需要选择模式1或者模式2,确定TIM_OCMode_PWMx
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式设置
//参数TIM_OCMode设置模式是PWM还是输出比较
//TIM_OCMode_Timing
//TIM_OCMode_Active
//TIM_OCMode_Inactive
//TIM_OCMode_Toggle
//TIM_OCMode_PWM1
//TIM_OCMode_PWM2
//模式1为先高后低,模式2为先低后高
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
//参数TM_OutputState用来设置比较输出使能,也就是使能PWM输出到端口
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
//参数TM_OCPolarity用来设置极性是高还是低
//------需要修改TIMx,设定通道
TIM_OC1Init(TIM3, &TIM_OCInitStructure); //TIM3通道设定
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR1上的预装载寄存器
TIM_OC2Init(TIM3, &TIM_OCInitStructure); //TIM3通道设定
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器
TIM_OC3Init(TIM3, &TIM_OCInitStructure); //TIM3通道设定
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR3上的预装载寄存器
TIM_OC4Init(TIM3, &TIM_OCInitStructure); //TIM3通道设定
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR4上的预装载寄存器
TIM_Cmd(TIM3, ENABLE); //使能TIM3
}
|
|