TIM1比较模式
暂不讨论捕获功能,简化下面的描述方便阅读理解。
--------------------------------------------------------------------------------
13.4.14 TIM1 比较寄存器 1(TIMx_CCR1)
CCR1[15:0]: 比较通道1的值 (Compare 1 value)
若CC1 通道配置为输出:CCR1包含了装入比较1寄存器的值(预装载值)。
void TIM_SetCompare1(TIM_TypeDef* TIMx, u16 Compare1)
{
/* Check the parameters */
assert_param(IS_TIM_123458_PERIPH(TIMx));
/* Set the Capture Compare1 Register value */
TIMx->CCR1 = Compare1;
}
如果在TIMx_CCMR1寄存器(OC1PE位)中未选择预装载功能,写入的数值会立即传输至当前寄存器中。
否则只有当更新事件()发生时,此预装载值才传输至当前比较1寄存器中。
当前比较寄存器参与同计数器TIMx_CNT的比较,并在OC1端口上产生输出信号。
--------------------------------------------------------------------------------
13.4.10 TIM1 和TIM8 计数器(TIMx_CNT)
CNT[15:0]:计数器的值 (Counter value)
TIMx->CNT 是定时器配置好分频、ARR之后自动按节拍加减的数值。
--------------------------------------------------------------------------------
13.4.12 TIM1 和TIM8 自动重装载寄存器(TIMx_ARR)
自动重装载的值 (Prescaler value) 位15:0
ARR包含了将要装载入实际的自动重装载寄存器的值。
详细参考13.3.1节:有关ARR的更新和动作。当自动重装载的值为空时,计数器不工作。
void TIM_SetAutoreload(TIM_TypeDef* TIMx, u16 Autoreload)
{
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
/* Set the Autoreload Register value */
TIMx->ARR = Autoreload;
}
--------------------------------------------------------------------------------
STM32 输出方波的方法有两种比较类似的,一个是PWM模式,一个是输出比较模式。下面来看看这两种模式的不同处在哪。
CCMRx寄存器
OCxM=000输出保持电平
OCxM=001输出有效电平
OCxM=010输出无效电平
OCxM=011输出翻转电平
CCER寄存器
CCxP位
通过CCMR寄存器中的OCM位可以看出来这两种模式的一点区别。
输出比较模式下: CCR = CNT 时,翻转输出电平。
PWM模式下: CNT < CCR时输出一种电平,CNT > CCR时输出相反的电平。
通过图片来直观的看看这两种模式的区别。
PWM模式下: ARR 决定输出频率 ,CCR决定输出占空比。
输出比较模式下: ARR 决定输出频率 、CCRx 决定每个通道的初始相位。
两种模式下最主要的差别就是CCR值代表的含义不一样。PWM模式下CCR可以控制占空比。输出比较模式下CCR可以控制初始相位。
下面通过一个程序来对比一下这两种模式
#include "pwm.h"
void TIM3_PWM_Init( u16 arr, u16 psc )
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3, ENABLE ); //使能定时器3时钟
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE ); //使能GPIO和AFIO复用功能模块时钟
//设置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 );
//初始化TIM3
TIM_TimeBaseInitStructure.TIM_Period = arr;
TIM_TimeBaseInitStructure.TIM_Prescaler = psc;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit( TIM3, &TIM_TimeBaseInitStructure );
//初始化TIM3_CH3 PWM 模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC3Init( TIM3, &TIM_OCInitStructure );
//使能TIM3在CCR2上的预装载寄存器
TIM_OC3PreloadConfig( TIM3, TIM_OCPreload_Enable );
//使能TIM3
TIM_Cmd( TIM3, ENABLE );
}
void TIM3_CMP_Init( u16 arr, u16 psc )
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3, ENABLE ); //使能定时器3时钟
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB , ENABLE ); //使能GPIOC时钟
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);
//初始化TIM3
TIM_TimeBaseInitStructure.TIM_Period = arr;
TIM_TimeBaseInitStructure.TIM_Prescaler = psc;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit( TIM3, &TIM_TimeBaseInitStructure );
//初始化TIM3_CH4 比较 模式 输出比较翻转触发模式(当计数值与比较/捕获寄存器值相同时,翻转输出引脚的电平)
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC4Init( TIM3, &TIM_OCInitStructure );
TIM_OC4PreloadConfig( TIM3, TIM_OCPreload_Enable );
//使能TIM3
TIM_Cmd( TIM3, ENABLE );
}
输出比较模式的占空比为50%,是固定的不能修改占空比。
通过上面实验可以看到,这两种模式的主要差别是。
PWM模式: ARR设置频率,CCR设置占空比,频率和占空比可以任意设置,起始相位不能设置。
输出比较模式:ARR设置频率,CCR设置相位,频率和起始相位可以任意设置,占空比不能设置。输出频率为理论计算值一半
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_20222919/article/details/106564957