STM32F103ZET6【标准库函数开发】------05.1 通用定时器TIM3输出四路PWM,同频率不同占空比

123
通用定时器有4个,TIM2,TIM3,TIM4,TIM5
TIM1和TIM8挂载APB2下面;TIM2,TIM3,TIM4,TIM5挂载APB1下面。
以TIM3为例
无映射:时钟使能PA PB TIM3
部分重映射:时钟使能PB TIM3
完全重映射:时钟使能PC TIM3

配置时钟
//时钟使能	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);	//TIM3
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);   //GPIOA
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);   //GPIOB
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);   //GPIOC
IO口要配置为推挽输出
//GPIO配置	
   //PA6    TIM3_CH1
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);	
   //PA7   TIM3_CH2 
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;  
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	//PB0  TIM3_CH3
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;   
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
    //PB1   TIM3_CH4
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;  
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
初始化以及配置pwm参数
//初始化TIM3,设置arr和psc
	TIM_TimeBaseStructure.TIM_Period = arr; //自动重装载值
	TIM_TimeBaseStructure.TIM_Prescaler =psc; //预分频系数
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //初始化
//初始化TIM3 Channel2 PWM模式	 
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式1
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性低
定时器的使能、通道初始化和使能
//使能定时器	
	TIM_Cmd(TIM3, ENABLE);  //使能TIM3
//通道1~4 初始化和使能	
	TIM_OC1Init(TIM3, &TIM_OCInitStructure);  //初始化外设TIM3 OC1		
	TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR1上的预装载寄存器
	
 	TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //初始化外设TIM3 OC2		
	TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的预装载寄存器
	
	TIM_OC3Init(TIM3, &TIM_OCInitStructure);  //初始化外设TIM3 OC3		
	TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR3上的预装载寄存器
	
 	TIM_OC4Init(TIM3, &TIM_OCInitStructure);  //初始化外设TIM3 OC4		
	TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR4上的预装载寄存器
设置输出的频率和占空比
 	TIM3_PWM_Init(999,0);	 //不分频,PWM频率=72000000/1000=72Khz   
   	while(1)
	{					
		TIM_SetCompare1(TIM3,200);	  //占空比20%	PA6 	
		TIM_SetCompare2(TIM3,300);	  //占空比30%	PA7
		TIM_SetCompare3(TIM3,400);	  //占空比40%	PB0
		TIM_SetCompare4(TIM3,500);	  //占空比20%	PB1		
	}	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值