打印
[其他ST产品]

stm32学习笔记-定时器

[复制链接]
1572|45
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一、定时器基础知识。
定时器概述
stm32系列的cpu,有8个定时器。定时器是完全独立的,没有互相共享的资源。定时器可以与定时器形成级联,组建更大的定时范围。所有定时器的时钟以72M作为标志(若使用默认的库配置方式配置时钟为72M)。具体有

2个基本定时器(TIM6、TIM7)
4个通用定时器(TIM2-TIM5)
2个高级定时器(TIM1、TIM8)
基本定时器类似51单片机的定时器,具有定时/计数的功能。 它是一个通过可编程预分频器驱动的16bit的自带装载计数器构成。

通用定时器是 基本定时器拓展而来,增加了输入捕获与输出比较等功能。

高级定时器是由 通用定时器 拓展而来,增加了可编程死去互补输出、重复计数器、带刹车功能。(高级定时器很少使用)


使用特权

评论回复
沙发
米多0036|  楼主 | 2023-12-22 15:48 | 只看该作者
功能简介
输入捕获:可以用来捕获外部事件,并为其赋予时间标记以说明此事件的发生时刻。主要是用来测量外部信号的频率,测量输入信号的脉冲长度
输出比较:产生输出波形。
PWM生成:略
单脉冲模式输出:略
互补输出:用于三相点击的驱动,防死机。

使用特权

评论回复
板凳
米多0036|  楼主 | 2023-12-22 15:48 | 只看该作者
计数模式介绍
向上计数模式 ↑↑
向上计数模式中,计数器从 0 计数到 自动装入的值 (TIMx ARR计数器内容),然后重新从0开始计数并且产生一个计数器溢出事件。当TIMx_CR1寄存器中的DIR位为低的时候执行向上计数。
向下计数模式 ↓↓
在向下模式中,计数器从 自动装入的值 (TIMx_ ARR)开始向下计数到 0 ,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。当TIMx_ _CR1寄存器的DIR位为高时执行向下计数。
向上/向下计数模式(中央对齐模式)↑↓↑↓
向上/向下计数模式(中央对齐模式)是计数器从 0 开始计数到 自动装入的值 ,产生一个计数器溢出事件,然后 向下计数 到 1 并且产生一个计数器溢出事件;然后再从 0 开始重新计数。当TIMx_ CR1 寄存器中的CMS位不为0时为中央对齐模式。形象点就是来回往复计数。

使用特权

评论回复
地板
米多0036|  楼主 | 2023-12-22 15:49 | 只看该作者
时基单元
时基单元有三个主要部分:计数器(Counter)、预分频器(Prescaler)、和自动重载寄存器(Auto-Reload Register)。 我们可以在任何时间任何状态下对这三个主要部分进行读写操作。还有个程序员无法读写的,用作缓冲的影子寄存器。

使用特权

评论回复
5
米多0036|  楼主 | 2023-12-22 15:49 | 只看该作者
PSC预分频器:
其工作就是对其输入时钟CK_PSC进行分频,以得到自己想要的计数器时钟CK_CNT用于驱动计时器计数。(CK_CNT=CK_PSC/(PSC+1), 其中PSC+1的+1 是为了防止PSC=0时出现除以0的错误)

使用特权

评论回复
6
米多0036|  楼主 | 2023-12-22 15:49 | 只看该作者
CNT计数器:
有16位,即计数范围是(0~65535),在CK_CNT的驱动下 向上计数/向下计数/中央对齐计数。

使用特权

评论回复
7
米多0036|  楼主 | 2023-12-22 15:49 | 只看该作者
自动重载寄存器:
定义了计数器只能在0与该寄存器的值ARR之间计数。
每当计数器向上计数到达ARR,或者向下计数到达0时,就会产生一次UEV事件,如果开启了中断,将产生相应的中断信号。

使用特权

评论回复
8
米多0036|  楼主 | 2023-12-22 15:49 | 只看该作者
影子寄存器:
仔细观察,功能框图上,PSC预分频寄存器、ARR自动重新装载寄存器都有一个影子。影子寄存器起到一个缓冲的作用。
根据TIMx_ CR1 寄存器中APRE位的设置:
APRE=0时,预装载寄存器的内容可以随时传送到影子寄存器,此时2者是连通的;
而APRE=1时,在每一次更新事件(UEV)时,才把预装在寄存器的内容传送到影子寄存器。
即我们定义的值不会立马产生作用,而是在溢出中断来临后再产生作用。

使用特权

评论回复
9
米多0036|  楼主 | 2023-12-22 15:49 | 只看该作者

使用特权

评论回复
10
米多0036|  楼主 | 2023-12-22 15:50 | 只看该作者
计数器时序图
向上计数模式
这里的分频因子的值就是预分频器的值。预分频器可以将计数器的时钟频率按1到65536之间的任意值分频

使用特权

评论回复
11
米多0036|  楼主 | 2023-12-22 15:50 | 只看该作者

使用特权

评论回复
12
米多0036|  楼主 | 2023-12-22 15:50 | 只看该作者

使用特权

评论回复
13
米多0036|  楼主 | 2023-12-22 15:50 | 只看该作者

使用特权

评论回复
14
米多0036|  楼主 | 2023-12-22 15:50 | 只看该作者
向下计数模式

使用特权

评论回复
15
米多0036|  楼主 | 2023-12-22 15:50 | 只看该作者
中央对齐模式

使用特权

评论回复
16
米多0036|  楼主 | 2023-12-22 15:51 | 只看该作者
定时时间的计算
一般根据计数器时钟频率,预分频器,自动重装载寄存器,来计算定时时间。



关于STM32定时器,在库设置默认的情况下,TIMx(1-8)的时钟频率都是72M的时钟;
我们一般只用设置 预分频器 和 自动重装载寄存器 来设置定时时间。

使用特权

评论回复
17
米多0036|  楼主 | 2023-12-22 15:51 | 只看该作者
//这里的定时器计数模式是 向上计数模式
TIM_TimeBaseInitStructure.TIM_Period = 60000-1;                   //设置自动重装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=36000-1;              //设置定时器预分频数

使用特权

评论回复
18
米多0036|  楼主 | 2023-12-22 16:02 | 只看该作者
TIM_Prescaler 预分频系数为35999,表示定时器的时钟频率CK_CNT 为72M/(35999+1) = 2000Hz,那么就是周期就是1/2000 s = 0.5 ms,表示每0.5ms 根据设定的计数模式把计数寄存器的值 +1 或 -1。
TIM_Period 自动重装载系数是59999,当计数值寄存器到达59999+1时,产生事件出现中断,即定时器在 0.5 * (59999+1) ms = 30 s产生一个事件(如中断事件)。

使用特权

评论回复
19
米多0036|  楼主 | 2023-12-22 16:02 | 只看该作者
计算公式如下:
Tout= ((arr+1)*(psc+1))/Tclk;

Tout: 一次计时的时间

Tclk: 输入的时钟频率(单位为 Mhz)。
arr : 自动重装载系数
psc : 预分频系数

使用特权

评论回复
20
米多0036|  楼主 | 2023-12-22 16:02 | 只看该作者
二、基本定时器(TIM6,TIM7)简介。
主要特性
计数器16bit(0~65535),计数模式只有向上计数.
时钟来自PCLK1,为72M,可实现1~65535分频。
没有GPIO,属于内部资源,只能用来定时。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

128

主题

1392

帖子

0

粉丝