[mw_shl_code=c,true] GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
//?????±??
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); //TIM1?±??????
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); //????PORTA?±??
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1,ENABLE);
//io????????
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_7|GPIO_Pin_8; //GPIOA9,GPIOA9
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //????????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //????50MHz
GPIO_Init(GPIOA,&GPIO_InitStructure); //??????PA9,PA7
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //GPIOA9,GPIOA9
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //????????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //????50MHz
GPIO_Init(GPIOB,&GPIO_InitStructure); //??????PA9,PA7
//?¨?±?÷?ù±?????
TIM_TimeBaseStructure.TIM_Period=arr; //×?????×°????
TIM_TimeBaseStructure.TIM_Prescaler=psc; //?¨?±?÷·???
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //???ù·???
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //?ò??????????
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);//???????¨?±?÷1
//??????TIM1 PWM???? ?????·?????¨
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //?????¨?±?÷????:TIM?????í???÷??????2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±???????????
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //????????:TIM????±?????????
TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset; //?????ó????×???
TIM_OC1Init(TIM1, &TIM_OCInitStructure); //?ù??T???¨???????????????èTIM1 4OC1
TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High; //?è????????????????
TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable; //??????????????
TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset; //?????ó??????????×???
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //????TIM14??CCR1?????¤×°???????÷
//?????·?????¨
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //?????¨?±?÷????:TIM?????í???÷??????2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±???????????
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //????????:TIM????±?????????
TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset; //?????ó????×???
TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High; //?è????????????????
TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable; //??????????????
TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset; //?????ó??????????×???
TIM_OC2Init(TIM1, &TIM_OCInitStructure); //?ù??T???¨???????????????èTIM1 4OC1
TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable); //????TIM14??CCR1?????¤×°???????÷
//??????????????????
TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable; //??????????????????
TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable; //??????????????????
TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF; //???¨?è??
TIM_BDTRInitStructure.TIM_DeadTime = 0x60; //?????±???è??
TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable; //????????????
TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High; //????????????
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Disable;//×???????????
TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);
TIM_ARRPreloadConfig(TIM1,ENABLE);//ARPE????
TIM_Cmd(TIM1, ENABLE); //????TIM14
TIM_CtrlPWMOutputs(TIM1, ENABLE); [/mw_shl_code]
[mw_shl_code=c,true][/mw_shl_code]
[mw_shl_code=c,true]现在我需要两种模式一种是输出带死区互补的pwm波,另外一种就是TIM1的CH1正常输出pwm,CH1N输出低电平,这两种模式来回转换,第二种模式我现在用 TIM_CCxCmd(TIM1,TIM_Channel_1,TIM_CCxN_Disable); TIM_SetCompare1(TIM1,20); 函数控制,但是输出并不是低电平,而是pwm波,感觉莫名其妙,求大神解答[/mw_shl_code]
|