定时器

1.1  软件定时器原理

使用纯软件(CPU死等)的方式实现定时(延时)功能

缺点:1. 延时不准确        2. CPU死等。      

1.2  定时器定时原理

1.3  STM32定时器分类

常规定时器:

 

基本定时器(TIM6和TIM7):拥有定时中断、主模式触发DAC的功能

通用定时器(TIM2到TIM7,TIM9到TIM14):拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能。

高级定时器(TIM1和TIM8):拥有通用定时器全部功能,并额外具有重复计时器、死区生成、互补输出、刹车输入等功能。

 

 

定时器种类 位数 计数器模式 产生DMA请求 捕获/比较通道 互补输出 特殊应用场景

高级定时器

(TIM1,TIM8)

16

向上,向下

向上/向下

可以 4 带可编程死区互补输出

通用定时器

(TIM2,TIM5)

32

向上,向下

向上/向下

可以 4 没有

定时计数、PWM输出、

输入捕获、输出比较

通用定时器

(TIM3,TIM4)

16

向上,向下

向上/向下

可以 4 没有

定时计数、PWM输出、

输入捕获、输出比较

通用定时器

(TIM9~TIM14)

16

向上

没有 2 没有

定时计数、PWM输出、

输入捕获、输出比较

基本定时器

(TIM6,TIM7)

16

向上,向下

向上/向下

可以 0 没有 主要应用于驱动DAC

 

各种定时器的结构框图

 

1、基本定时器

2、通用定时器

3、高级定时器

 

SysTick系统定时器

 

一、SysTick概念

1. 概念

SysTick 是 Cortex-M 内核中的一个系统定时器,经常被用作系统中断控制器的基础,或者作为操作系统的时间片轮转机制的基准。
SysTick可以取系统时钟(72M),还可以把系统时钟8分频后(9M)获取。

2. 工作过程

SysTick 会定时产生中断请求,当计数器达到设定值时,SysTick会触发一个SysTick定时器中断,向NVIC发出中断请求。

NVIC负责中断的优先级管理、中断处理函数的调用和中断嵌套等工作 。 当SysTick定时器中断发生时,NVIC会对中断进行处理。

SysTick 和NVIC组成了典型的生产者-消费者关系。

二、SysTick 使用

1.初始化 SysTick 寄存器

在使用 SysTick 之前,需要通过配置 SysTick 寄存器来初始化它,包括设置:

  • 计数器初值、
  • 选择时钟源
  • 使能 SysTick 定时器。

2.计数器开始计数

SysTick 定时器被使能后,计数器就开始从初始值开始递减。

3.生成中断请求

当 SysTick 定时器的计数器值减为零时,会触发一个 SysTick 中断请求,向 NVIC 发送中断请求信号。

4.中断处理

SysTick 中断请求被 NVIC 捕获,并根据其优先级和其他中断请求的优先级进行调度。如果 SysTick 中断被选为最高优先级的中断,系统会立即响应并执行 SysTick 中断服务程序。

5.中断服务程序执行

SysTick 中断服务程序会执行用户定义的操作,例如更新系统时间、处理定时任务或执行周期性的操作。

6.重复周期

一旦 SysTick 中断服务程序执行完毕,SysTick 定时器会自动重置并重新开始计数,进入下一个周期,继续循环上述过程。

三、SysTick寄存器

1.SysTick 控制和状态寄存器 (CTRL)

用于配置 SysTick 定时器的工作模式、使能定时器和中断,并提供定时器当前状态的查询功能。具体的控制位包括:

 

 

2.SysTick 重装载值寄存器 (LOAD)

用于设置 SysTick 定时器的重装载值,即定时器计数器的初始值。当计数器减到零时,会触发中断请求,并根据加载寄存器的值重新装载计数器。

3.SysTick 当前值寄存器 (VAL)

用于读取或写入当前 SysTick 定时器的计数器值。

  • 在读取该寄存器时,会返回当前计数器的剩余值;
  • 在写入该寄存器时,可以清零计数器的值。

 

 

4.SysTick 校准值寄存器 (CALIB):

用于读取 SysTick 定时器的校准值,包括重装载值 (TENMS) 和时钟源的准确度 (SKEW、NOREF)。这些值用于校准定时器的溢出时间,以保证其在不同系统上的准确性。

 

 

评论
列表