void TIM2_PWM_Init(u16 psc,u16 arr)
{
GPIO_InitTypeDef GPIO_InitStructure;
//Êä³ö±È½ÏͨµÀ1 GPIO ³õʼ»¯
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;
GPIO_Init(GPIOB, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_PartialRemap2_TIM2,ENABLE);
// ¿ªÆô¶¨Ê±Æ÷ʱÖÓ,¼´ÄÚ²¿Ê±ÖÓCK_INT=72M
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
/*--------------------ʱ»ù½á¹¹Ìå³õʼ»¯-------------------------*/
// ÅäÖÃÖÜÆÚ£¬ÕâÀïÅäÖÃΪ100K
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// ×Ô¶¯ÖØ×°ÔؼĴæÆ÷µÄÖµ£¬ÀÛ¼ÆTIM_Period+1¸öƵÂʺó²úÉúÒ»¸ö¸üлòÕßÖжÏ
TIM_TimeBaseStructure.TIM_Period= (arr-1);
// Çý¶¯CNT¼ÆÊýÆ÷µÄʱÖÓ = Fck_int/(psc+1)
TIM_TimeBaseStructure.TIM_Prescaler= (psc-1);
// ʱÖÓ·ÖƵÒò×Ó £¬ÅäÖÃËÀÇøʱ¼äʱÐèÒªÓõ½
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
// ¼ÆÊýÆ÷¼ÆÊýģʽ£¬ÉèÖÃΪÏòÉϼÆÊý
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
// Öظ´¼ÆÊýÆ÷µÄÖµ£¬Ã»Óõ½²»ÓùÜ
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
// ³õʼ»¯¶¨Ê±Æ÷
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/*--------------------Êä³ö±È½Ï½á¹¹Ìå³õʼ»¯-------------------*/
TIM_OCInitTypeDef TIM_OCInitStructure;
// ÅäÖÃΪPWMģʽ1
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
// Êä³öʹÄÜ
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
// Êä³öͨµÀµçƽ¼«ÐÔÅäÖÃ
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
/*
//Êä³ö±È½ÏͨµÀ 1
TIM_OCInitStructure.TIM_Pulse = 25;//Âö³åÖµ Õ¼¿Õ±È=TIM_Pulse/TIM_Period ¶¨Ê±Âö³å/¶¨Ê±ÖÜÆÚ
TIM_OC1Init(TIM2, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
// Êä³ö±È½ÏͨµÀ 2
TIM_OCInitStructure.TIM_Pulse = 25;//Âö³åÖµ Õ¼¿Õ±È=TIM_Pulse/TIM_Period ¶¨Ê±Âö³å/¶¨Ê±ÖÜÆÚ
TIM_OC2Init(TIM2, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
*/
// Êä³ö±È½ÏͨµÀ 3
TIM_OCInitStructure.TIM_Pulse = 500;//Âö³åÖµ Õ¼¿Õ±È=TIM_Pulse/TIM_Period ¶¨Ê±Âö³å/¶¨Ê±ÖÜÆÚ
TIM_OC3Init(TIM2, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
// Êä³ö±È½ÏͨµÀ 4
TIM_OCInitStructure.TIM_Pulse = 900;//Âö³åÖµ Õ¼¿Õ±È=TIM_Pulse/TIM_Period ¶¨Ê±Âö³å/¶¨Ê±ÖÜÆÚ
TIM_OC4Init(TIM2, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
// ʹÄܼÆÊýÆ÷
TIM_Cmd(TIM2, ENABLE);
}
【STM32F1标准库】PWM生产4路PWM
最新推荐文章于 2024-04-27 17:42:11 发布