STM32单片机入门教程---TIM定时中断

TIM简介

  • TIM(Timer)定时器

  • 基本功能:定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断;

  • 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时;

    16位计数器就是用来执行计数定时的一个寄存器,每来一个时钟,计数器加1;
    预分配器可以对计数器的时钟进行分频,使计数更灵活;
    自动重装寄存器就是计数的目标值,就是想要计多少个时钟才进行中断;

  • 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能;

  • 根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型;

定时器类型

STM32F103T8C6定时器资源:TIM1、TIM2、TIM3、TIM4在这里插入图片描述

结构图

基本定时器

预分频器、计数器和自动重装载寄存器构成最基本的计数计时电路,这一块电路叫做时基单元
通向时基单元的计数基准频率是72MHz,预分频器可以对72MHz的计数时钟进行预分频,输出频率=输入频率÷(预分频器中写入数值+1)【实际分频系数=预分频器的值+1】
计数器可以对预分频以后的计数时钟进行计数,计数时钟每来一个上升沿,计数器加1,最大加到65535,所以计数器的值在计时过程中会不断自增运行,当自增到目标值时产生中断
自动重装寄存器写入的是我们写入的目标,当计数器的值自增到自动重装寄存器的值时,产生一个中断信号,并清零计数器,并进行下一次计数
向上的折线箭头代表的是更新中断,之后通往NVIC;向下的折线箭头代表的是更新事件,不会触发中断,但会触发电路其他部分的工作;
在这里插入图片描述

通用定时器

计数器除了向上计数模式外,还支持向下计数模式中央对齐模式。向下计数模式就是从重装值开始递减,到0之后回到重装值并申请中断;中央对齐模式就是从0开始先向上自增到重装值,申请中断,再向下自减到0,再申请中断;
ITR信号:这一部分的时钟信号是来自其他定时器的,ITR0~ITR3分别来自其他四个定时器的TRGO输出,通过配置可以实现定时器的级联;
TIF_ED连接的是输入捕获单元的CH1引脚,即从CH1获取时钟;

  • 总结:外部时钟模式1的输入可以是ETR引脚、其他定时器、CH1引脚的边沿、CH1引脚和CH2引脚;在这里插入图片描述

高级定时器

重复次数计数器:可以实现每隔几个计数周期才发生一次更新事件和更新中断
DTG:死区生成电路,目的是为了驱动三相无刷电机,在开关切换的瞬间产生一定时长的死区,让桥臂上下管全部关断,防止直通现象;
刹车输入功能:给电机驱动提供安全保障,如果外部引脚BKIN产生刹车信号,控制电路自动切断电机输出,防止意外发生;在这里插入图片描述

定时中断基本结构图

在这里插入图片描述

时基单元运行时序图

预分频器时序

预分频缓冲器:在计数过程中改变分频值,**变化不会立刻生效,而是等到本次计数周期结束,**产生更新事件后预分频器的值才会被传递到缓冲寄存器里面生效;
预分频计数器:在值为0时输出一个脉冲,由此调整输出频率;
计数器计数频率:CK_CNT=CK_PSC/(PSC+1)
在这里插入图片描述

计数器时序

计数器溢出频率:CK_CNT_OV=CK_CNT/(ARR+1)=CK_PSC/(PSC+1)/(ARR+1)
在这里插入图片描述

计数器无预装时序

在这里插入图片描述

计数器有预装时序

影子寄存器:相当于缓冲寄存器,作用是让值的变化和事件的更新同步发生,防止在运行途中程序发生错误;
在这里插入图片描述

RCC时钟树

时钟树:STM32中用来产生和配置时钟,并且把配置好的时钟发送到各个外设的系统;
在这里插入图片描述

代码部分

定时器定时中断

Timer定时器的库函数:

时基单元初始化:

  • TIM_TimeBaseInit;

运行控制:

  • TIM_Cmd:使能计数器,对应运行控制;

中断输出控制;

  • TIM_ITConfig:使能中断输出信号,对应中断输出控制;

时基单元的时钟源选择部分:
(RCC内部时钟、ETR外部时钟、ITRx其他定时器、TIx捕获通道)

  • TIM_InternalClockConfig:选择内部时钟;
  • TIM_ITRxExternalClockConfig:选择ITRx其他定时器;
  • TIM_TIxExternalClockConfig:选择TIx捕获通道的时钟,参数ICPolarity是输入的极性,ICFilter是滤波器;
  • TIM_ETRClockMode1Config:选择ETR通过外部时钟模式1输入的时钟,参数TIM_ExtTRGPrescaler是外部触发预分频器,对ETR外部时钟提前做一个分频;
  • TIM_ETRClockMode2Config:选择ETR通过外部时钟模式2输入的时钟;
  • TIM_ETRConfig:单独配置ETR引脚的预分频器、极性、滤波器这些参数;

修改关键参数:

  • TIM_PrescalerConfig:单独写预分频值,参数Prescaler就是要写入的预分频值,PSCReloadMode是写入的模式,选择有无缓冲寄存器;
  • TIM_CounterModeConfig:改变计数器的计数模式;
  • TIM_ARRPreloadConfig:自动重装器预装功能配置;
  • TIM_Setcounter:给计数器写一个值;
  • TIM_SetAutoreload:给自动重装器写入一个值;
  • TIM_GetCounter:获取当前计数器的值;
  • TIM_GetPrescaler:获取当前预分频器的值;
  • 最后四个函数就是用来获取标志位和清除标志位的

定时方法:
计数器溢出频率:CK_CNT_OV=CK_CNT/(ARR+1)=CK_PSC/(PSC+1)/(ARR+1)
结构体参数中Period是计数周期,即ARR;Prescaler是预分频器的值,即PSC;注意在配置参数时不要超出0~65535的范围;
预分频给少点,自动重装给多点,就是以高频率计比较多的数;预分频给多点,自动重装给少点,就是以高频率计比较少的数;两种方法的定时效果一致。

跨文件使用变量:
在使用变量的文件上方,用extern声明一下要使用的变量,如extern uint16_t Num;在这里插入图片描述
在这里插入图片描述

定时器外部时钟

配置外部时钟时的参数TIM_ExtTRGPolarity是外部触发的极性,反向即下降沿或低电平有效,不反向即上升沿或高电平有效;
参数外部触发滤波器ExteTRGFilter外部触发滤波器,作用是以一个采样频率F采样n个点,如果n个点都一样才能有效输出;

计数跳动的话,External Trigger Filter的值改为0x0f;在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值