定时器基础知识笔记

简要


stm32外设Timer定时器:TIM1~TIM8其中TIM1,TIM8是高级定时器,TIM2~TIM5是通用定时器,TIM6TIM7是基本定时器

通用定时器 :充当基本时基,还有 输入捕获模式和 输出比较。
PWM输出高级定时器 :有通用定时器的全部功能, 互补输出模式,可接刹车信号。
基本定时器 :只有基本的时基功能(无捕获/比较通道),主要应用驱动DAC。

时基单元


  • 计数器(CNT) :16位 计数,对脉冲个数进行计数上限是2^16。还可以计时,脉冲个数剩余信号周期=时间

  • 预分频器(PSC) :16位 将时钟源进行分频

  • 自动重装载值寄存器(ARR) :32位 计数上限,当CNT达到ARR时,将CNT清零重新计数,并产生更新中断UI

时基单元初始化 TIM_TimeBaseInit(); 结构体成员

typedefstruct

{

uint16_tTIM_Prescaler; // 预分频器 PAC

uint16_tTIM_CounterMode; // 计数模式

uint32_tTIM_Period; // 定时器周期 ARR

uint16_tTIM_ClockDivision; // 时钟分频

uint8_tTIM_RepetitionCounter; // 重复计算器

} TIM_TimeBaseInitTypeDef;

TIM_Prescaler:定时器预分频器设置,时钟源经该预分频器才是定时器计数时钟CK_CNT,它设PSC 寄存器的值。
TIM_CounterMode:定时器计数方式,可设置为向上计数、向下计数以及中心对
齐。
TIM_Period :定时器周期,实际就是设定自动重载寄存器 ARR的值,ARR 为要装载到实际自动重载寄存器(即影子寄存器)的值,可设置范围为 0至 65535。
TIM_ClockDivision :时钟分频,设置定时器时钟 CK_INT 频率与死区发生器以及数字滤波器采样时钟频率分频比。可以选择 1、2、4分频。
TIM_RepetitionCounter :重复计数器,只有 8 位,只存在于高级定时器。

时钟选择


内部时钟(CK_INT)
外部时钟模式1:外部输入脚
外部时钟模式2:外部触发输入ETR
内部触发输入:使用一个定时器作为另一个定时器的预分频器(时钟源)

主要功能




计数器模式
向上计数
向下计数
中央对齐模式
重复向下计数器 :定时器重复次数计数的计数器(计数器的计数器)
4个独立通道
  • 输入捕获

  • 输出比较

  • PWM生成

  • 当脉冲模式输出

死区时间可编程的互补输出 (高级定时器)
可接入刹车信号(高级定时器)
支持针对定位的增量(正交)编码器和霍尔传感器电路
定时器同步
产生中断
更新中断:计数器向上溢出/向下溢出,计数器初始化
触发事件 :计数器启动、停止、初始化或者由内部/外部触发计数
输入捕获
输出比较
刹车信号输入 :高级定时器专属


输出比较(PWM)


频率(周期),占空比。

比较值(CCRX):当计数器(CNT)的值等于CCRX时,电平反转

ARR :决定PWM周期(在系统时钟频率固定的情况下)。

CCRX :决定PWM占空比。

定时器4路都可以作为PWM输出:但是四路共用一个计数器(CNT),4路PWM输出频率相同,改变每个通道比较值可以实现,用一个定时器输出四个占空比不同的PWM

时间计算:Tout(溢出时间)=(ARR+1)*(PSC+1)/Tclk(时钟频率) 系统时钟一般为72M

比较通道初始化:TIM_OCxInit() 。

结构体成员

1typedefstruct {

2uint16_tTIM_OCMode; // 比较输出模式 PWM1/PWM2

3uint16_tTIM_OutputState; // 比较输出使能

4uint16_tTIM_OutputNState; // 比较互补输出使能

5uint32_tTIM_Pulse; // 脉冲宽度 RRCX比较值

6uint16_tTIM_OCPolarity; // 输出极性 High/Low

7uint16_tTIM_OCNPolarity; // 互补输出极性

8uint16_tTIM_OCIdleState; // 空闲状态下比较输出状态

9uint16_tTIM_OCNIdleState; // 空闲状态下比较互补输出状态

10 } TIM_OCInitTypeDef;

TIM_OCMode :比较输出模式选择,总共有八种,常用的为 PWM1/PWM2。 TIM_OutputState:比较输出使能,决定最终的输出比较信号 OCx是否通过外部引脚输出。 TIM_OutputNState :比较互补输出使能,决定 OCx的互补信号 OCxN是否通过外部引脚输出。(高级定时器) TIM_Pulse :比较输出脉冲宽度,实际设定比较寄存器 CCR 的值,决定脉冲宽度。可设置范围为 0至 65535。 TIM_OCPolarity :比较输出极性,可选 OCx为高电平有效或低电平有效。 TIM_OCNPolarity :比较互补输出极性,可选 OCxN 为高电平有效或低电平有效。(高级定时器) TIM_OCIdleState :空闲状态时通道输出电平设置,可选输出 1 或输出 0。 TIM_OCNIdleState :空闲状态时互补通道输出电平设置,可选输出 1或输出 0。

使能输出比较装载值 :void TIM_OCxPreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);设置比较值 :void TIM_SetCompareX(TIM_TypeDef* TIMx, uint16_t Compare2);

输入捕获


可以捕获测量脉冲宽度,频率

捕获方法 :1.直接测量脉冲周期 从某一次上升沿开始计数,再次检测到上升沿时停止计数

假如采样频率时F,每计一次数经历的时间为1/F。计数停止时,计数值为CNT,则脉冲信号周期为CNT/F。这种捕获方式适合测量低频脉冲

  1. 测量单位时间脉冲个数

从某个时刻开始计时,到某个时刻停止计时。经过T时间。并记录T时间内的上升沿个数,CNT。单位时间脉冲数为CNT/T。脉冲频率为CNT/T。 CNT越大越准适用高频脉冲

捕获通道初始化 :TIM_ICInit(); 结构体成员

typedefstruct

{

uint16_tTIM_Channel; //捕获通道1-4

uint16_tTIM_ICPolarity; //捕获极性

uint16_tTIM_ICSelection; //映射关系

uint16_tTIM_ICPrescaler; //分频系数

uint16_tTIM_ICFilter; //滤波器

} TIM_ICInitTypeDef;

TIM_Channel :捕获通道 ICx选择,可选 TIM_Channel_1、TIM_Channel_2、TIM_Channel_3或 TIM_Channel_4四个通道。
TIM_ICPolarity :输入捕获边沿触发选择,可选上升沿触发、下降沿触发或边沿跳变触发。 TIM_ICSelection :输入通道选择,捕获通道 ICx的信号可来自三个输入通道,分别为TIM_ICSelection_DirectTI、TIM_ICSelection_IndirectTI或 TIM_ICSelection_TRC。如果是普通的输入捕获,4个通道都可以使用。如果是 PWM输入则只能使用通道 1 和通道 2。

获取通道捕获值: uint32_t TIM_GetCapturex(TIM_TypeDef* TIMx);

状态标志位获取与清除

FlagStatusTIM_GetFlagStatus(TIM_TypeDef*TIMx, uint16_tTIM_FLAG);

voidTIM_ClearFlag(TIM_TypeDef*TIMx, uint16_tTIM_FLAG);

ITStatusTIM_GetITStatus(TIM_TypeDef*TIMx, uint16_tTIM_IT);

voidTIM_ClearITPendingBit(TIM_TypeDef*TIMx, uint16_tTIM_IT);

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值