【STM32F1标准库】PWM生产4路PWM

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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值