中级会员
 
- 积分
- 244
- 金钱
- 244
- 注册时间
- 2012-7-20
- 在线时间
- 65 小时
|
发表于 2019-6-22 17:50:17
|
显示全部楼层
void TIM1_PWM_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
TIM_OCInitTypeDef TIM_OCInitStruct;
TIM_BDTRInitTypeDef TIM_BDTRInitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //时钟使能
TIM_DeInit(TIM1);
//定时器TIM3初始化
TIM_TimeBaseStructure.TIM_Period = arr;//设置在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler = psc;//设置用来作为TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);//根据指定的参数初始化TIMx的时间基数单位
TIM_ClearITPendingBit(TIM1, TIM_IT_Update);//清除TIMx更新中断标志
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);//使能指定的TIM3中断,允许更新中断
//中断优先级NVIC设置
NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn; //TIM3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;//PWM模式1
TIM_OCInitStruct.TIM_OCNPolarity = TIM_OCNPolarity_High;//反向极性低
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_Low;//同向极性高
TIM_OCInitStruct.TIM_OutputNState=TIM_OutputNState_Enable;//反向使能
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//同向使能
TIM_OCInitStruct.TIM_Pulse=1;//占空比
TIM_OC1Init(TIM1,&TIM_OCInitStruct);//初始化通道3
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);//CH3预装载使能
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;//PWM模式1
TIM_OCInitStruct.TIM_OCNPolarity = TIM_OCNPolarity_High;//反向极性低
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_Low;//同向极性高
TIM_OCInitStruct.TIM_OutputNState=TIM_OutputNState_Enable;//反向使能
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//同向使能
TIM_OCInitStruct.TIM_Pulse=10;//占空比
TIM_OC3Init(TIM1,&TIM_OCInitStruct);//初始化通道3
TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);//CH3预装载使能
/*死区时间的尝试,经验证是成功的*/
TIM_BDTRInitStruct.TIM_AutomaticOutput=TIM_AutomaticOutput_Enable;//自动输出使能
TIM_BDTRInitStruct.TIM_Break=TIM_Break_Disable;//刹车使能
TIM_BDTRInitStruct.TIM_BreakPolarity=TIM_BreakPolarity_Low;//刹车后的PWM管口输出极性
TIM_BDTRInitStruct.TIM_DeadTime=0;//死区时间
TIM_BDTRInitStruct.TIM_LOCKLevel=TIM_LOCKLevel_OFF;//锁定设置,锁定级别1
TIM_BDTRInitStruct.TIM_OSSIState=TIM_OSSIState_Enable;//空闲模式下输出选择
TIM_BDTRInitStruct.TIM_OSSRState=TIM_OSSRState_Enable;//运行模式下输出
TIM_BDTRConfig(TIM1,&TIM_BDTRInitStruct);
TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIM1在ARR上的预装载寄存器
TIM_CtrlPWMOutputs(TIM1,ENABLE); //MOE 主输出使能,高级定时器必须开启这个
TIM_Cmd(TIM1, ENABLE); //使能TIMx
}
参照这个
除了楼上说的 还需要加个这个TIM_CtrlPWMOutputs(TIM1,ENABLE); //MOE 主输出使能,高级定时器必须开启这个 |
|