STM32 定时器

一、SysTick—系统定时器

1.1 SysTick简介

  SysTick—系统定时器是属于CM3内核中的一个外设,内嵌在NVIC中。系统定时器是一个24bit的向下递减的计数器,计数器每计数一次的时间为1/SYSCLK,一般我们设置系统时钟SYSCLK等于72M

1.2 SysTick寄存器介绍

  SysTick—系统定时器有4个寄存器,在使用SysTick产生定时的时候,只需要配置前三个寄存器,最后一个校准寄存器不需要使用。

寄存器名称 寄存器描述
CTRL SysTick控制及状态寄存器
LOAD SysTick重装载数值寄存器(从某值开始倒数)
VAL SysTick当前数值寄存器(当前计数值)
CALIB SysTick校准数值寄存器
SysTick控制及状态寄存器
位段 名称 类型 复位值 描述
16 COUNTFLAG R/W 0 如果在上次读取本寄存器后, SysTick 已经计到 了 0,则该位为 1。
2 CLKSOURCE R/W 0 时钟源选择位,0=AHB/8,1=处理器时钟AHB
1 TICKINT R/W 0 1=SysTick倒数计数到 0时产生 SysTick异常请 求,0=数到 0 时无动作。也可以通过读取COUNTFLAG标志位来确定计数器是否递减到0
0 ENABLE R/W 0 SysTick 定时器的使能位

1.3 Delay函数实现

void Delay_us(uint32_t xus)
{
   
	SysTick->LOAD = 72 * xus;				//设置定时器重装值,72代表的是系统时钟72M
	SysTick->VAL = 0x00;					//清空当前计数值
	SysTick->CTRL = 0x00000005;				//设置时钟源为HCLK,启动定时器,即位0和位2置1
	while(!(SysTick->CTRL & 0x00010000));	//等待计数到0
	SysTick->CTRL = 0x00000004;				//关闭定时器,SysTick定时器使能位置0
}

二、TIM—基本定时器

2.1 定时器分类

  定时器分为基本定时器,通用定时 器和高级定时器。
在这里插入图片描述

图1 定时器分类

在这里插入图片描述

图2 定时器类型

  不同的芯片拥有的定时器数量不同,具体看对应的数据手册。

2.2 基本定时器

在这里插入图片描述

图3 基本定时器功能框图

  时钟源:定时器时钟 TIMxCLK,即内部时钟 CK_INT,经 APB1 预分频器后分频提供,如果 APB1 预分频系数等于 1,则频率不变,否则频率乘以 2,库函数中 APB1 预分频的系数是2,即 PCLK1=36M,所以定时器时钟 TIMxCLK=36*2=72M
  自动重装载寄存器 :自动重装载寄存器 ARR 是一个 16 位的寄存器,这里面装着计数器能计数的最大数 值。当计数到这个值的时候,如果使能了中断的话,定时器就产生溢出中断。
  定时时间:计数一次的时间为:1/CK_CNT,总的计数时间为(1/CK_CNT) * (ARR+1)。

2.3 通用定时器

在这里插入图片描述

图4 通用定时器功能框图

2.4 高级定时器

在这里插入图片描述

图5 高级控制定时器功能框图

2.4.1 时钟源

  高级控制定时器有四个时钟源可选:

  1. 内部时钟源CK_INT
  2. 外部时钟模式1:外部输入引脚TIx(即TIMx_CHx)(x=1,2,3,4)
  3. 外部时钟模式2:外部触发输入ETR
  4. 内部触发输入(ITRx)
2.4.1.1 外部时钟模式1

在这里插入图片描述

图6 外部时钟模式1框图
2.4.1.2 外部时钟模式2

在这里插入图片描述

图7 外部时钟模式2框图

2.4.2 控制器

  高级控制定时器控制器部分包括触发控制器、从模式控制器以及编码器接口。

2.4.3 时基单元

  该部分即为基本控制器部分

2.4.4 输入捕获

  输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,常用的有测量输
入信号的脉宽和测量PWM输入信号的频率和占空比这两种。
  输入捕获的大概的原理就是,当捕获到信号的跳变沿的时候,把计数器CNT的值锁存到捕获寄存器 CCR中,把前后两次捕获到的 CCR寄存器中的值相减,就可以算出脉宽或者频率。如果捕获的脉宽的时间长度超过你的捕获定时器的周期,就会发生溢出,这个我们需要做额外的处理。

2.4.5 输出比较

  输出比较就是通过定时器的外部引脚对外输出控制信号,有冻结、将通道 X(x=1,2,3,4)设置为匹配时输出有效电平、将通道 X 设置为匹配时输出无效电平、翻转、强制变为无效电平、强制变为有效电平、PWM1和PWM2这八种模式,具体使用哪种模式由寄存器 CCMRx的位 OCxM[2:0]配置。

2.4.6 断路功能

  断路功能就是电机控制的刹车功能,使能断路功能时,根据相关控制位状态修改输出信号电平。在任何情况下,OCx和 OCxN输出都不能同时为有效电平,这关系到电机控制常用的H桥电路结构原因。
  断路源可以是时钟故障事件,由内部复位时钟控制器中的时钟安全系统(CSS)生成,也可以是外部断路输入IO,两者是或运算关系。
  系统复位启动都默认关闭断路功能,将断路和死区寄存器(TIMx_BDTR)的BKE为置1,
使能断路功能。可通过TIMx_BDTR 寄存器的BKP位设置设置断路输入引脚的有效电平,设置为1时输入BRK为高电平有效,否则低电平有效。

2.5 定时中断基本结构

在这里插入图片描述

图8 定时中断基本结构

2.6 定时器初始化结构体

  时基结构体 TIM_TimeBaseInitTypeDef(用于定时器基础参数设置

typedef struct {
       
	uint16_t TIM_Prescaler;          //预分频器         
	uint16_t TIM_CounterMode;        //计数模式,可设置为向上计数、向下计数以及中心对齐   
	uint32_t TIM_Period;             //定时器周期,实际就是设定自动重载寄存器ARR的值
	uint16_t TIM_ClockDivision;      //时钟分频,设置定时器时钟CK_INT频率与死区发生器以及数字滤波器采样时钟频率分频比
	uint8_t TIM_RepetitionCounter;   //重复计数器,只存在于高级定时器
} TIM_TimeBaseInitTypeDef; 

  输出比较结构体TIM_OCInitTypeDef(用于输出比较模式

typedef struct{
   
  uint16_t TIM_OCMode;        //比较输出模式,比较输出模式选择,总共有八种,常用的为PWM1/PWM2
  uint16_t TIM_OutputState;   //比较输出使能,决定最终的输出比较信号OCx是否通过外部引脚输出
  uint16_t TIM_OutputNState;  //比较互补输出使能,决定OCx的互补信号OCxN是否通过外部引脚输出
  uint16_t TIM_Pulse;         //脉冲宽度                                   
  uint16_t TIM_OCPolarity;    //输出极性
  uint16_t TIM_OCNPolarity;   //互补输出极性
  uint16_t TIM_OCIdleState
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值