第十五章 TIM高级定时器(中)

目录

14.5 高级定时器的配置方法

14.5.1 TIM_TimeBaseInitTypeDef

14.5.2 TIM_OCInitTypeDef

14.5.3 TIM_ICInitTypeDef

14.5.4 TIM_BDTRInitTypeDef


14.5 高级定时器的配置方法

        在标准库函数头文件 stm32f10x_tim.h 中对定时器外设建立了四个初始化结构体,分别为时基初始化结构体 TIM_TimeBaseInitTypeDef、输出比较初始化结构体 TIM_OCInitTypeDef、输入捕获初始化结构体 TIM_ICInitTypeDef 和断路和死区初始化结构体 TIM_BDTRInitTypeDef,高级控制定时器可以用到所有初始化结构体,通用定时器不能使用 TIM_BDTRInitTypeDef 结构体,基本定时器只能使用时基结构体。

14.5.1 TIM_TimeBaseInitTypeDef

        时基结构体 TIM_TimeBaseInitTypeDef 用于定时器基础参数设置,与 TIM_TimeBaseInit 函数配合使用完成配置。

typedef struct
{
	uint16_t TIM_Prescaler;        	//预分频器

	uint16_t TIM_CounterMode;      	//计数模式 
	uint16_t TIM_Period;           	//定时器周期

	uint16_t TIM_ClockDivision;    	//时钟分频

	uint8_t TIM_RepetitionCounter;  	//重复计数器
  
} TIM_TimeBaseInitTypeDef;

        (1) TIM_Prescaler:定时器预分频器设置,时钟源经该预分频器才是定时器计数时钟 CK_CNT,它设定 PSC 寄存器的值。计算公式为:计数器时钟频率 (fCK_CNT) 等于 fCK_PSC / (PSC[15:0] + 1),可实现 1 至 65536 分频。

        (2) TIM_CounterMode:定时器计数方式,可设置为向上计数、向下计数以及中心对齐。高级控制定时器允许选择任意一种。

        (3) TIM_Period:定时器周期,实际就是设定自动重载寄存器 ARR 的值, ARR 为要装载到实际自动重载寄存器(即影子寄存器)的值,可设置范围为 0 至 65535。

        (4) TIM_ClockDivision:时钟分频,设置定时器时钟 CK_INT 频率与死区发生器以及数字滤波器采样时钟频率分频比。可以选择 1、 2、 4 分频。

        (5) TIM_RepetitionCounter:重复计数器,只有 8 位,只存在于高级定时器。

14.5.2 TIM_OCInitTypeDef

        输出比较结构体 TIM_OCInitTypeDef 用于输出比较模式,与 TIM_OCxInit 函数配合使用完成指定定时器输出通道初始化配置。高级控制定时器有四个定时器通道,使用时都必须单独设置。

typedef struct
{
	uint16_t TIM_OCMode;        	//比较输出模式

	uint16_t TIM_OutputState;  		//比较输出使能

	uint16_t TIM_OutputNState; 		//比较互补输出使能 
	uint16_t TIM_Pulse;         	//脉冲宽度

	uint16_t TIM_OCPolarity;    	//输出极性

	uint16_t TIM_OCNPolarity;   	//互补输出极性

	uint16_t TIM_OCIdleState;   	//空闲状态下比较输出状态
  
	uint16_t TIM_OCNIdleState;  	//空闲状态下比较互补输出状态
  
} TIM_OCInitTypeDef;

        (1) TIM_OCMode:比较输出模式选择,总共有八种,常用的为 PWM1/PWM2。它设定 CCMRx 寄存器 OCxM[2:0] 位的值。(2) TIM_OutputState:比较输出使能,决定最终的输出比较信号 OCx 是否通过外部引脚输出。它设定 TIMx_CCER 寄存器 CCxE/CCxNE 位的值。

        (3) TIM_OutputNState: 比较互补输出使能,决定 OCx 的互补信号 OCxN 是否通过外部引脚输出。它设定 CCER 寄存器 CCxNE 位的值。

        (4) TIM_Pulse:比较输出脉冲宽度,实际设定比较寄存器 CCR 的值,决定脉冲宽度。可设置范围为 0 至 65535。

        (5) TIM_OCPolarity:比较输出极性,可选 OCx 为高电平有效或低电平有效。它决定着定时器通道有效电平。它设定 CCER 寄存器的 CCxP 位的值。

        (6) TIM_OCNPolarity:比较互补输出极性,可选 OCxN 为高电平有效或低电平有效。它设定TIMx_CCER 寄存器的 CCxNP 位的值。

        (7) TIM_OCIdleState:空闲状态时通道输出电平设置,可选输出 1 或输出 0,即在空闲状态(BDTR_MOE 位为 0) 时,经过死区时间后定时器通道输出高电平或低电平。它设定 CR2 寄存器的 OISx 位的值。

        (8) TIM_OCNIdleState:空闲状态时互补通道输出电平设置,可选输出 1 或输出 0,即在空闲状态(BDTR_MOE 位为 0) 时,经过死区时间后定时器互补通道输出高电平或低电平,设定值必须与TIM_OCIdleState 相反。它设定是 CR2 寄存器的 OISxN 位的值。

14.5.3 TIM_ICInitTypeDef

        输入捕获结构体 TIM_ICInitTypeDef 用于输入捕获模式,与 TIM_ICInit 函数配合使用完成定时器输入通道初始化配置。如果使用 PWM 输入模式需要与 TIM_PWMIConfig 函数配合使用完成定时器输入通道初始化配置。

typedef struct
{

	uint16_t TIM_Channel;      	//输入通到道选择

	uint16_t TIM_ICPolarity;   	//输入捕获触发方式

	uint16_t TIM_ICSelection; 	//输入捕获选择

	uint16_t TIM_ICPrescaler;  	//输入捕获预分频器

	uint16_t TIM_ICFilter;     	//输入捕获滤波器
  
} TIM_ICInitTypeDef;

        (1) TIM_Channel:捕获通道 ICx 选择,可选 TIM_Channel_1、 TIM_Channel_2、 TIM_Channel_3 或TIM_Channel_4 四个通道。它设定 CCMRx 寄存器 CCxS 位的值。

        (2) TIM_ICPolarity:输入捕获边沿触发选择,可选上升沿触发、下降沿触发或边沿跳变触发。它设定 CCER 寄存器 CCxP 位和 CCxNP 位的值。

        (3) TIM_ICSelection:输入通道选择,捕获通道 ICx 的信号可来自三个输入通道,分别为TIM_ICSelection_DirectTI、 TIM_ICSelection_IndirectTI 或 TIM_ICSelection_TRC,具体的区别见图输入通道与捕获通道 IC 的映射图。如果是普通的输入捕获, 4 个通道都可以使用,如果是 PWM输入则只能使用通道 1 和通道 2。它设定 CCRMx 寄存器的 CCxS[1:0] 位的值。

        (4) TIM_ICPrescaler:输入捕获通道预分频器,可设置 1、 2、 4、 8 分频,它设定 CCMRx 寄存器的 ICxPSC[1:0] 位的值。如果需要捕获输入信号的每个有效边沿,则设置 1 分频即可。

        (5) TIM_ICFilter:输入捕获滤波器设置,可选设置 0x0 至 0x0F。它设定 CCMRx 寄存器 ICxF[3:0]位的值。一般我们不使用滤波器,即设置为 0。

14.5.4 TIM_BDTRInitTypeDef

        断路和死区结构体 TIM_BDTRInitTypeDef 用于断路和死区参数的设置,属于高级定时器专用,用于配置断路时通道输出状态,以及死区时间。它与 TIM_BDTRConfig 函数配置使用完成参数配置。这个结构体的成员只对应 BDTR 这个寄存器,有关成员的具体使用配置请参考手册 BDTR 寄存器的详细描述。

typedef struct
{

  uint16_t TIM_OSSRState;      		//运行模式下的关闭状态选择  

  uint16_t TIM_OSSIState;        	//空闲模式下的关闭状态选择  

  uint16_t TIM_LOCKLevel;        	//锁定配置
 
  uint16_t TIM_DeadTime;         	//死区时间

  uint16_t TIM_Break;           	//断路输入使能控制

  uint16_t TIM_BreakPolarity;   	//断路输入极性

  uint16_t TIM_AutomaticOutput;  	//自动输出使能
  
} TIM_BDTRInitTypeDef;

        (1) TIM_OSSRState:运行模式下的关闭状态选择,它设定 BDTR 寄存器 OSSR 位的值。

        (2) TIM_OSSIState:空闲模式下的关闭状态选择,它设定 BDTR 寄存器 OSSI 位的值。

        (3) TIM_LOCKLevel:锁定级别配置, BDTR 寄存器 LOCK[1:0] 位的值。

        (4) TIM_DeadTime:配置死区发生器,定义死区持续时间,可选设置范围为 0x0 至 0xFF。它设定BDTR 寄存器 DTG[7:0] 位的值。

        (5) TIM_Break:断路输入功能选择,可选使能或禁止。它设定 BDTR 寄存器 BKE 位的值。

        (6) TIM_BreakPolarity:断路输入通道 BRK 极性选择,可选高电平有效或低电平有效。它设定BDTR 寄存器 BKP 位的值。

        (7) TIM_AutomaticOutput:自动输出使能,可选使能或禁止,它设定 BDTR 寄存器 AOE 位的值。

谢谢阅读!

猜你喜欢

转载自blog.csdn.net/weixin_68288412/article/details/129965419