stm32学习笔记——通用计时器基本原理

本文详细介绍了STM32F10x系列微控制器中的通用定时器,包括其功能特性、计数模式和工作流程。通用定时器具备向上、向下、中心对齐三种计数模式,可用于输入捕获、输出比较和PWM生成。每个定时器有4个独立通道,支持中断/DMA请求,常用于测量脉冲长度或生成输出波形。通过预分频器和时钟控制,可灵活调整定时精度。文章还列举了库函数示例,指导如何配置和使用定时器中断。
摘要由CSDN通过智能技术生成

stm32f10x最多有8个定时器,stm32f103zet6就有8个定时器,分别是4个通用定时器,2个高级定时器,2个基本定时器。

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

高级定时器

(TIM1,TIM8)

16向上,向下,向上/下可以4带死区控制盒紧急刹车,可应用于PWM电机控制

通用定时器

(TIM2~TIM5)

16向上,向下,向上/下可以4通用。定时计数,PWM输出,输入捕获,输出比较

基本定时器

(TIM6,TIM7)

16向上,向下,向上/下可以0主要应用于驱动DAC

通用定时器(TIM2~TIM5)功能特点描述:

  • 位于低速的APB1总线上(可以使用来自APB1的时钟,也有其他始终来源)
  • 16位向上、向下、向上/向下(中心对齐)计数模式,自动装载计数器(TIMx_CNT)
  • 16位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为(1~65535)之间的任意值
  • 4个独立通道(TIMx_CH1~4),这些通道可以用来作为:
    1. 输入捕获
    2. 输出比较
    3. PWM生成(边缘或中间对齐模式)
    4. 单脉冲模式输出
  • 可使用外部信号(TIMx_ETR)控制定时器和定时器互连(用1个定时器控制另一个定时器)的同步电路
  •  如下事件发生时产生中断/DMA(6个独立的IRQ/DMA请求生成器):
  1. 更新:计数器向上/向下溢出,计数器初始化(通过软件或者内部/外部触发)
  2. 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
  3. 输入捕获
  4. 输出比较
  5. 支持针对定位的增量(正交)编码器和霍尔传感器电路
  6. 触发输入作为外部时钟或者按周期的电流管理
  • STM32的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等
  • 使用定时器预分频器和RCC时钟控制预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。STM32的每个通用定时器都是完全独立的,没有互相共享的任何资源。

计数器模式

通用定时器可以向上计数,向下计数,向上向下双向计数模式

向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数,并且产生一个计数器向上溢出事件。

向下计数模式:计数器从自动装载值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,产生一个计数器向下溢出的时间。

中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。

通用定时器工作过程简略 

定时器的时钟选择有内部时钟(APB1),外部时钟(2,3,4号定时器可以使用),其他定时器(ITRn)或者定时器通道(TIn)。

ITRn:定时器会产生一个TRGn的时钟发送到其他定时器作为ITRn或者发送到DAC/ADC。

TIn:来自TIMx_CHn引脚的电平,通过滤波和边沿检测等后产生的信号


引脚输入的电平除了作为TIn以外,还会经过选择、预分频,当捕获到上升沿(可以设置为下降沿)时,捕获/比较寄存器就会把CNT计数器中的值记下来,通过这种方法可以方便地测量脉冲地宽度。

每个定时器都有4个独立的通道,要么用作输入捕获,要么用作输出比较。输出比较的功能比如,CNT计数器会跟捕获/比较寄存器中的值进行比较,如果更大通道输出高电平,更小通道输出低电平。


如果选择内部时钟APB1,那么APB1的预分频系数为1则通用定时器时钟为36MHz,APB1的预分频系数不为1,那么就为72MHz。

TIMx_PSC的预分频系数在此基础上再进行分频。


常用库函数:

void TIM_TimeBaseInit();//初始化
void TIM_Cmd();//使能
void TIM_ITConfig();//中断使能
FlagStatus TIM_GetFlagStatus();//标志位获取
void TIM_ClearFlag();//标志位清除
ITStatus TIM_GetITStatus();//中断标志位获取
void TIM_ClearITPendingBit();//挂起状态标志位清除

定时器中断实现步骤:

  1. 使能定时器时钟(和之前的内容一样调用APB1的使能函数)
  2. 初始化定时器,配置ARR(重装载寄存器),PSC(预分频系数)
  3. 开启定时器中断,配置NVIC(调用中断使能函数和NVIC初始化)
  4. 使能定时器
  5. 编写中断服务函数(TIMx_IRQHandler())

Tout(溢出时间) = (ARR+1)(PSC+1)/Tclk

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值