STM32入门(二十五)—-高级定时器

高级定时器

  • 定时器
    • 高级定时器
    • 高级定时器GPIO
  • 高级定时器功能框图
    • 时钟源
      • 内部时钟源
      • 外部时钟1
      • 外部时钟2
      • 内部触发输入
      • 内部触发连接
      • TIM1为TIM2提供时钟
    • 控制器
    • 时基单元
      • 预分频器
    • 计数器(上/下/两边)
    • 自动重装载寄存器
      • 重复计数器
    • 输入捕获
      • 输入捕获的作用和原理
    • 输出比较
      • 输出比较的作用
    • 输入捕获的应用
      • 1、测量脉宽和频率
      • 2、PWM输入模式
    • 输出比较的应用
  • 常用结构体
    • 输出比较结构体
    • 输入捕获结构体
    • 断路和死区结构体

定时器

定时器功能 :定时、输出比较、输入捕获、断路输入
定时器分类 :基本定时器、通用定时器、高级定时器
定时器资源 :F103有2个高级定时器、4个通用定时器、2个基本定时器
在这里插入图片描述

高级定时器

1-计数器16bit,上/下/两边 计数,TIM1和TIM8,还有一个重复计数器RCR,独有。
2-有4个GPIO,其中通道1~3还有互补输出GPIO
3-时钟来自PCLK2,为72M,可实现1~65536分频

高级定时器GPIO

在这里插入图片描述

高级定时器功能框图

在这里插入图片描述
1-时钟源
2-控制器
3-时基
4-输入捕获
5-输出比较
6-断路功能

时钟源

1-内部时钟源CK_INT
2-外部时钟模式1—外部的GPIO Tix(x=1 2 3 4)
3-外部时钟模式2—外部的GPIO ETR
4-内部触发输入

内部时钟源

1-内部时钟源来自RCC的TIMx_CLK
2-TIMx_CLK等于多少呢?如何确定?
具体的查看:RCC时钟树部分
在这里插入图片描述

外部时钟1

在这里插入图片描述
时钟信号输入引脚
1-外部的GPIO TIx,对应:TIMx_CH1/2/3/4
2-TIM_CCMRx 的位 CCxS[1:0]配置,其中 CCMR1 控制 TI1/2, CCMR2 控制 TI3/4

滤波器
1-如果来自外部的时钟信号的频率过高或者混杂有高频干扰信号的话,我们就需要使用滤波器对 ETRP 信号重新采样,来达到降频或者去除高频干扰的目的,2-由TIMx_CCMRx 的位 ICxF[3:0]配置。

触发选择
1-当使用外部时钟模式 1 时,触发源有两个,一个是滤波后的定时器输入 1( TI1FP1)和滤波后的定时器输入 2( TI2FP2)。
2-由 TIMx_SMCR 的位 TS[2:0]配置。

从模式选择
1-选定了触发源信号后,最后我们需把信号连接到 TRGI 引脚,让触发信号成为外部时钟模式 1 的输入,最终等于 CK_PSC,然后驱动计数器 CNT 计数。
2-具体的配置TIMx_SMCR 的位 SMS[2:0]为 000 即可选择外部时钟模式 1。

使能计数器
1-经过上面的 5 个步骤之后, 最后我们只需使能计数器开始计数,外部时钟模式 1 的配置就算完成。
2-使能计数器由 TIMx_CR1 的位 CEN 配置。

外部时钟2

在这里插入图片描述

时钟信号输入引脚
当使用外部时钟模式 2 的时候,时钟信号来自于定时器的特定输入通道 TIMx_ETR,只有 1 个。

外部触发极性
1-来自 ETR 引脚输入的信号可以选择为上升沿或者下降沿有效。
2-具体的由 TIMx_SMCR的位 ETP 配置。

外部触发预分频器
1-由于 ETRP 的信号的频率不能超过 TIMx_CLK( 180M)的 1/4,当触发信号的频率很高的情况下,就必须使用分频器来降频。
2-具体的由 TIMx_SMCR 的位 ETPS[1:0]配置。

滤波器
1-如果 ETRP 的信号的频率过高或者混杂有高频干扰信号的,需要使用滤波器对 ETRP 信号重新采样,来达到降频或者去除高频干扰的目的。
2-具体的由 TIMx_SMCR 的位 ETF[3:0]配置,其中的 fDTS 是由内部时钟 CK_INT 分频得到,具体的由 TIMx_CR1 的位CKD[1:0]配置。

从模式选择
1-经过滤波器滤波的信号连接到 ETRF 引脚后,触发信号成为外部时钟模式 2 的输入,最终等于 CK_PSC,然后驱动计数器 CNT 计数。
2-具体的配置 TIMx_SMCR 的位 ECE 为 1即可选择外部时钟模式 2。

使能计数器
1-经过上面的 5 个步骤之后, 最后我们只需使能计数器开始计数,外部时钟模式 2 的配置就算完成。
2-使能计数器由 TIMx_CR1 的位 CEN 配置。

内部触发输入

1-内部触发输入是使用一个定时器作为另一个定时器的预分频器。硬件上高级控制定时器和通用定时器在内部连接在一起,可以实现定时器同步或级联。
2- 由TIMx_SMCR 的位 TS[2:0]配置。

内部触发连接

在这里插入图片描述

TIM1为TIM2提供时钟

在这里插入图片描述

控制器

1-控制器就是用来控制的,发送命令的
2-CR1、CR2、SMCR、CCER,主要学习这几个寄存器即可。

时基单元

在这里插入图片描述
1-16位的预分频器 PSC,PSC
2-16位的计数器CNT, CNT
3-8位的重复计数器RCR,RCR(高级定时器独有)
4-16位的自动重装载寄存器ARR,ARR

预分频器

在这里插入图片描述

计数器(上/下/两边)

在这里插入图片描述

自动重装载寄存器

在这里插入图片描述

重复计数器

在这里插入图片描述

输入捕获

在这里插入图片描述

输入捕获的作用和原理

在这里插入图片描述

①输入通道
当使用需要被测量的信号从定时器的外部引脚 TIMx_CH1/2/3/4 进入,通常叫 TI1/2/3/4,在后面的捕获讲解中对于要被测量的信号我们都以 TIx 为标准叫法。

②输入滤波和边沿检测
在这里插入图片描述
③捕获通道
在这里插入图片描述
④预分频器
1-ICx 的输出信号会经过一个预分频器,用于决定发生多少个事件时进行一次捕获。
2-具体的由寄存器 CCMRx 的位 ICxPSC 配置,如果希望捕获信号的每一个边沿,则不分频。

⑤捕获寄存器
在这里插入图片描述

输出比较

在这里插入图片描述

输出比较的作用

在这里插入图片描述
①输出比较寄存器
在这里插入图片描述
②死区发生器
在这里插入图片描述
带死区插入的半桥驱动电路
在这里插入图片描述
带死区插入的互补输出波形图
在这里插入图片描述
③输出控制
在这里插入图片描述
在这里插入图片描述
④输出引脚
在这里插入图片描述

输入捕获的应用

1、测量脉宽和频率

在这里插入图片描述

2、PWM输入模式

在这里插入图片描述
在这里插入图片描述

输出比较的应用

1-输出比较模式总共有 8 种,常用的是PWM模式。
2-由寄存器 CCMRx 的位 OCxM[2:0]配置。

PWM 输出就是对外输出脉宽(即占空比)可调的方波信号,信号频率由自动重装寄存器 ARR 的值决定,占空比由比较寄存器 CCR 的值决定。

在这里插入图片描述
有效:高电平;无效:低电平

边沿对齐 VS 中心对齐
1-根据CNT的计数方向,PWM波形分成边沿对齐和中心对齐两种。边沿对齐主要用于直流电机,中心对齐主要用于交流电机。
2-边沿对齐时,CNT只工作在递增或者递减。
3-中心对齐时,CNT工作在递增和递减。

PWM1边沿对齐模式的波形
在这里插入图片描述

PWM1中心对齐模式的波形
在这里插入图片描述

常用结构体

输出比较结构体

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;

TIM_OCMode
比较输出模式选择,总共有八种,常用的为 PWM1/PWM2。它设定CCMRx 寄存器 OCxM[2:0]位的值。

TIM_OutputState
比较输出使能,决定最终的输出比较信号 OCx 是否通过外部引脚输出。它设定 TIMx_CCER 寄存器 CCxE 位的值。

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

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

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

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

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

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

输入捕获结构体

typedef struct
{uint16_t TIM_Channel;//输入通道选择uint16_t TIM_ICPolarity; //输入捕获触发选择uint16_t TIM_ICSelection;//输入捕获选择uint16_t TIM_ICPrescaler; //输入捕获预分频器uint16_t TIM_ICFilter; //输入捕获滤波器
} TIM_ICInitTypeDef;

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

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

TIM_ICSelection
输入通道选择,捕获通道 ICx 的信号可来自三个输入通道,分别为TIM_ICSelection_DirectTI、TIM_ICSelection_IndirectTI 或 TIM_ICSelection_TRC
它设定 CCRMx 寄存器的 CCxS[1:0]位的值。

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

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

断路和死区结构体

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;

Published by

风君子

独自遨游何稽首 揭天掀地慰生平