STM32_TIMER(全)

STM32_TIMER

一.定时器概述

1.1定时器原理

1.2定时器分类

1.3定时器特性表

F1:

H7:

定时器类型

主要功能

基本定时器

没有输入输出通道,常用作时基,即定时功能

通用定时器

具有多路独立通道,可用于输入捕获/输出比较,也可用作时基

高级定时器

除具备通用定时器所有功能外,还具备带死区控制的互补信号输出、刹车输入等功能(可用于电机控制、数字电源设计等)

二.定时器介绍

2.1基本定时器

2.1.1介绍

TIM6/TIM7

主要特性:

  1. 16位递增计数器(计数值:0~65535)

  1. 16位预分频器(分频系数:1~65536)

  1. 可用于触发DAC

  1. 在更新事件(计数器溢出)时,会产生中断/DMA请求

2.1.2定时器框图

①时钟源

②控制器

③计数器(时基单元)

影子寄存器是实际起作用的寄存器,不可直接访问

2.1.3 定时器溢出条件

计数器模式

溢出条件

递增计数模式

CNT==ARR

递减计数模式

CNT==0

中心对齐模式

CNT==ARR-1、CNT==1

2.1.4 计数模式说明

递增:

递减:

中心对其:

2.1.5计算公式

2.1.6配置步骤

步骤

操作

函数

1

配置定时器基础工作参数

HAL_TIM_Base_Init()

2

定时器基础MSP初始化

HAL_TIM_Base_MspInit() 配置NVIC、CLOCK等

3

使能更新中断并启动计数器

HAL_TIM_Base_Start_IT()

4

设置优先级,使能中断

HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()

5

编写中断服务函数

TIMx_IRQHandler()等  HAL_TIM_IRQHandler()

6

编写定时器更新中断回调函数

HAL_TIM_PeriodElapsedCallback()

函数

主要寄存器

主要功能

HAL_TIM_Base_Init()

CR1、ARR、PSC

初始化定时器基础参数

HAL_TIM_Base_MspInit()

存放NVIC、CLOCK、GPIO初始化代码

HAL_TIM_Base_Start_IT()

DIER、CR1

使能更新中断并启动计数器

HAL_TIM_IRQHandler()

SR

定时器中断处理公用函数,处理各种中断

HAL_TIM_PeriodElapsedCallback()

定时器更新中断回调函数,由用户重定义

2.2通用定时器

2.2.1介绍

通用定时器:TIM2/TIM3 /TIM4 /TIM5

主要特性:

  1. 16位递增、递减、中心对齐计数器(计数值:0~65535)

  1. 16位预分频器(分频系数:1~65536)

  1. 可用于触发DAC、ADC

  1. 在更新事件、触发事件、输入捕获、输出比较时,会产生中断/DMA请求4个独立通道,可用于:输入捕获输出比较输出PWM单脉冲模式使用外部信号控制定时器且可实现多个定时器互连的同步电路支持编码器和霍尔传感器电路等

2.2.2定时器框图

①时钟源:

  1. 通过APB1提供的时钟源,

  1. 内部触发输入,TIM_ETR复用

  1. IO口提供时钟源,外部时钟模式2

  1. 外部时钟模式1,来自通道1和通道2

②控制器:

  1. 触发控制器:TRGO可以连接到其他定时器,作为触发信号,完成定时器的级联

  1. 从模式控制器:复位,使能,递增,计数

  1. 编码器接口:连接编码器

③时基单元:与基本定时器一致,用于计数

④输入捕获:

  1. 通过通道捕获型号,经过滤波器过滤和边沿检测器检测,得到TI1FP1和TI1FP2信号,将信号映射到预分频器产生IC1PS信号,产生捕获事件,将CNT计数器的值进行比较

⑤捕获/比较(公共):

⑥输出比较:

  1. 向比较寄存器的影子寄存器写入比较值,计数器正常计数,当计数器的值和比较值相等时,产生比较事件

2.2.3计数器时钟源

①内部时钟(CK_INT),来自外设总线APB提供的时钟

②外部时钟模式1:外部输入引脚(TIx),来自定时器通道1或者通道2引脚的信号

③外部时钟模式2:外部触发输入(ETR),来自可以复用为TIMx_ETR的IO引脚

④内部触发输入(ITRx),用于与芯片内部其它通用/高级定时器级联

计数器时钟选择类型

设置方法

内部时钟(CK_INT)

设置TIMx_SMCR的SMS=000

外部时钟模式1:外部输入引脚(TIx)

设置TIMx_SMCR的SMS=111

外部时钟模式2:外部触发输入(ETR)

设置TIMx_SMCR的ECE=1

内部触发输入(ITRx)

设置可参考STM32F10xxx参考手册_V10(中文版).pdf,14.3.15节

2.2.3.1 外部时钟模式1
2.2.3.2 外部时钟模式2

在外部时钟模式1中,定时器仅在每次外部脉冲到达时进行计数;而在外部时钟模式2中,定时器可以在外部脉冲到达时和外部脉冲消失时各进行一次计数,因此可以更精确地控制定时器的计数。

2.2.3.3 内部触发输入(ITRx)

2.2.4 PWM输出
2.2.4.1比较部分框图

捕获/比较通道1的主电路---输出部分:

捕获/比较通道的输出部分(通道1):

2.2.4.2 PWM原理

2.2.5配置步骤

输出PWM:

步骤

操作

函数

1

配置定时器基础工作参数

HAL_TIM_PWM_Init()

2

定时器PWM输出MSP初始化

HAL_TIM_PWM_MspInit() 配置NVIC、CLOCK、GPIO等

3

配置PWM模式/比较值等

HAL_TIM_PWM_ConfigChannel()

4

使能输出并启动计数器

HAL_TIM_PWM_Start()

5

修改比较值控制占空比(可选)

__HAL_TIM_SET_COMPARE()

6

使能通道预装载(可选)

__HAL_TIM_ENABLE_OCxPRELOAD()

函数

主要寄存器

主要功能

HAL_TIM_PWM_Init()

CR1、ARR、PSC

初始化定时器基础参数

HAL_TIM_PWM_MspInit()

存放NVIC、CLOCK、GPIO初始化代码

HAL_TIM_PWM_ConfigChannel()

CCMRx、CCRx、CCER

配置PWM模式、比较值、输出极性等

HAL_TIM_PWM_Start()

CCER、CR1

使能输出比较并启动计数器

__HAL_TIM_SET_COMPARE()

CCRx

修改比较值

__HAL_TIM_ENABLE_OCxPRELOAD()

CCER

使能通道预装载

输入捕获:

步骤

操作

函数

1

配置定时器基础工作参数

HAL_TIM_IC_Init()

2

定时器输入捕获MSP初始化

HAL_TIM_IC_MspInit() 配置NVIC、CLOCK、GPIO等

3

配置输入通道映射、捕获边沿等

HAL_TIM_IC_ConfigChannel()

4

设置优先级,使能中断

HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()

5

使能定时器更新中断

__HAL_TIM_ENABLE_IT()

6

使能捕获、捕获中断及计数器

HAL_TIM_IC_Start_IT()

7

编写中断服务函数

TIMx_IRQHandler()等  HAL_TIM_IRQHandler()

8

编写更新中断和捕获回调函数

HAL_TIM_PeriodElapsedCallback() HAL_TIM_IC_CaptureCallback()

函数

主要寄存器

主要功能

HAL_TIM_IC_Init()

CR1、ARR、PSC

初始化定时器基础参数

HAL_TIM_IC_MspInit()

存放NVIC、CLOCK、GPIO初始化代码

HAL_TIM_IC_ConfigChannel()

CCMRx、CCER

配置通道映射、捕获边沿、分频、滤波等

__HAL_TIM_ENABLE_IT()

DIER

使能更新中断等

HAL_TIM_IC_Start_IT()

CCER、DIER、CR1

使能输入捕获、捕获中断并启动计数器

HAL_TIM_IRQHandler()

SR

定时器中断处理公用函数,处理各种中断

HAL_TIM_PeriodElapsedCallback()

定时器更新中断回调函数,由用户重定义

HAL_TIM_IC_CaptureCallback()

定时器输入捕获回调函数,由用户重定义

再HAL库中,不需要对中断类型经行设置,采用各种中断的回调函数来达到各种中断的作用

外部输入模式一:

步骤

操作

函数

1

配置定时器基础工作参数

HAL_TIM_IC_Init()

2

定时器输入捕获MSP初始化

HAL_TIM_IC_MspInit() 配置NVIC、CLOCK、GPIO等

3

配置定时器从模式等

HAL_TIM_SlaveConfigSynchro()

4

使能输入捕获并启动计数器

HAL_TIM_IC_Start()

5

获取计数器的值

__HAL_TIM_GET_COUNTER()

6

设置计数器的值

__HAL_TIM_SET_COUNTER()

函数

主要寄存器

主要功能

HAL_TIM_IC_Init()

CR1、ARR、PSC

初始化定时器基础参数

HAL_TIM_IC_MspInit()

存放NVIC、CLOCK、GPIO初始化代码

HAL_TIM_SlaveConfigSynchro()

SMCR、CCMRx、CCER

配置定时器从模式、触发选择、分频、滤波等

HAL_TIM_IC_Start()

CCER、CR1

使能输入捕获、启动计数器

__HAL_TIM_GET_COUNTER()

CNT

获取计数器当前值

__HAL_TIM_SET_COUNTER()

CNT

设置计数器的值

2.3高级定时器

2.3.1定时器介绍

高级定时器:TIM1/TIM8

主要特性:

  1. 16位递增、递减、中心对齐计数器(计数值:0~65535)

  1. 16位预分频器(分频系数:1~65536)

  1. 可用于触发DAC、ADC

  1. 在更新事件、触发事件、输入捕获、输出比较时,会产生中断/DMA请求4个独立通道,可用于:输入捕获、输出比较、输出PWM、单脉冲模式

  1. 使用外部信号控制定时器且可实现多个定时器互连的同步电路支持编码器和霍尔传感器电路等

  1. 重复计数器

  1. 死区时间带可编程的互补输出

  1. 断路输入,用于将定时器的输出信号置于用户可选的安全配置中

2.3.2定时器框图

  1. 有重复计数器,当计数器溢出后等重复计数器为0的时候才会触发中断

  1. N为互补通道,123有4无,DTG可以设置死区事件

  1. 刹车输入功能,产生刹车中断

2.3.3输出多个PWM
2.3.3.1重复计数器

计数器每次上溢或下溢都能使重复计数器减1,减到0时,再发生一次溢出就会产生更新事件

如果设置RCR为N,更新事件将在N+1次溢出时发生

2.3.3.2输出多个PWM

  1. 配置边沿对齐模式输出PWM

  1. 指定输出N个PWM, 则把N-1写入RCR

  1. 在更新中断内,关闭计数器

注意:高级定时器通道输出必须把MOE位置1

步骤

操作

函数

1

配置定时器基础工作参数

HAL_TIM_PWM_Init()

2

定时器PWM输出MSP初始化

HAL_TIM_PWM_MspInit() 配置NVIC、CLOCK、GPIO等

3

配置PWM模式/比较值等

HAL_TIM_PWM_ConfigChannel()

4

设置优先级,使能中断

HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()

5

使能定时器更新中断

__HAL_TIM_ENABLE_IT()

6

使能输出、主输出、计数器

HAL_TIM_PWM_Start()

7

编写中断服务函数

TIMx_IRQHandler()等  HAL_TIM_IRQHandler()

8

编写更新中断回调函数

HAL_TIM_PeriodElapsedCallback()

2.3.4高级定时器输出比较模式

步骤

操作

函数

1

配置定时器基础工作参数

HAL_TIM_OC_Init()

2

定时器输出比较MSP初始化

HAL_TIM_OC_MspInit() 配置NVIC、CLOCK、GPIO等

3

配置输出比较模式等

HAL_TIM_OC_ConfigChannel()

4

使能通道预装载

__HAL_TIM_ENABLE_OCxPRELOAD()

5

使能输出、主输出、计数器

HAL_TIM_OC_Start()

6

修改捕获/比较寄存器的值

__HAL_TIM_SET_COMPARE()

函数

主要寄存器

主要功能

HAL_TIM_OC_Init()

CR1、ARR、PSC

初始化定时器基础参数

HAL_TIM_OC_MspInit

存放NVIC、CLOCK、GPIO初始化代码

HAL_TIM_OC_ConfigChannel()

CCMRx、CCRx、CCER

设置输出比较模式、比较值、输出极性等

__HAL_TIM_ENABLE_OCxPRELOAD()

CCMRx

使能通道预装载

HAL_TIM_OC_Start()

CR1、CCER、BDTR

使能输出比较、主输出、启动计数器

__HAL_TIM_SET_COMPARE()

CCRx

修改捕获/比较寄存器的值

2.3.4高级定时器输出比较模式实验

步骤

操作

函数

1

配置定时器基础工作参数

HAL_TIM_PWM_Init()

2

定时器PWM输出MSP初始化

HAL_TIM_PWM_MspInit() 配置NVIC、CLOCK、GPIO等

3

配置PWM模式/比较值等

HAL_TIM_PWM_ConfigChannel()

4

配置刹车功能、死区时间等

HAL_TIMEx_ConfigBreakDeadTime()

5

使能输出、主输出、计数器

HAL_TIM_PWM_Start()

6

使能互补输出、主输出、计数器

HAL_TIMEx_PWMN_Start()

函数

主要寄存器

主要功能

HAL_TIM_PWM_Init()

CR1、ARR、PSC

初始化定时器基础参数

HAL_TIM_PWM_MspInit()

存放NVIC、CLOCK、GPIO初始化代码

HAL_TIM_PWM_ConfigChannel()

CCMRx、CCRx、CCER

配置PWM模式、比较值、输出极性等

HAL_TIMEx_ConfigBreakDeadTime()

BDTR

配置刹车功能、死区时间等

HAL_TIM_PWM_Start()

CCER、CR1

使能输出、主输出、启动计数器

HAL_TIMEx_PWMN_Start()

CCER、CR1

使能互补输出、主输出、启动计数器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值