定时器细讲 ----输出比较

1.输出比较

输出比较模式允许定时器在特定条件下改变输出引脚状态。这些条件通常是定时器计数器达到某个预设的比较值(Compare Value)。 

可以从下图看到,输出比较和输入捕获公用一个通道。同时也是操作CCR寄存器。

 

定时器输出比较的8种模式,一般用的都是PWM1 

 输出比较模式

一般我们都是采用PWM1模式进行PWM输出配置,那么根据PWM1就需要先配置CCR寄存器

PWM1:

1.CNT<OCXREF时,OCXREF为有效电平,

2.CNT>OCXREF时,OCXREF为无效电平,

OCXREF是用户设置的值,这样就可以调节PWM波。

配置步骤 

步骤1

第一步:配置CCR寄存器值;

第二步:选择模式,前面讲到输出比较一共有八种模式,常规选择PWM1模式;

第三步:选择极性,是正极性,还是取反;

第四步:打开开关; 

 

步骤2

第一步:打开MOE总开关

第二步:手动动态设置CCR1的值,回顾之前讲的预加载机制,CCR1修改时,先写入影子寄存器,后中断发生后才能加载到CCR寄存器,所以这里需要打开预加载开关,否则容易出错。

 

3.重点强调

 我们在使能影子寄存器时,不单单只使能ARR(自动重装载寄存器)的还需要使能CCR。

反正一句话,只要是影子寄存器都要使能。

TIM_SetCompare1(TIM14,i);通过手动设置比较值进行PWM输出

 

 

配置设置:

void TIM14_CH1_PWM_Init(u16 per,u16 psc)
{
************************GIPO配置**********************************
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_OCInitTypeDef TIM_OCInitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);//使能TIM14时钟
	
	GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14);//管脚复用
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF; //复用输出模式
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//管脚设置
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//速度为100M
	GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽输出
	GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//上拉
	GPIO_Init(GPIOF,&GPIO_InitStructure); //初始化结构体
	
****************************时基单元配置*****************************

	TIM_TimeBaseInitStructure.TIM_Period=per;   //自动装载值
	TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //分频系数
	TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //设置向上计数模式
	TIM_TimeBaseInit(TIM14,&TIM_TimeBaseInitStructure);	
	
****************************PWM配置*****************************
	TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
	TIM_OC1Init(TIM14,&TIM_OCInitStructure); //输出比较通道1初始化
	
******************************特别要注意关闭影子寄存器************************************
	TIM_OC1PreloadConfig(TIM14,TIM_OCPreload_Enable); //使能TIMx在 CCR1 上的预装载寄存器
	TIM_ARRPreloadConfig(TIM14,ENABLE);//使能预装载寄存器
	
	TIM_Cmd(TIM14,ENABLE); //使能定时器
		
}
*****************************手动修改CRR即PWM值************************************
TIM_SetCompare1(TIM14,i); 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值