TIM定时中断

TIM简介

TIM(Timer):定时器
定时器基本功能:定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断    //定时触发中断
定时器其他功能:不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能
组成:16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时
    1/(72M/65536/65536)= 59.65
注意:定时器支持级联模式

TIM分类

根据复杂度和应用场景分为了
    高级定时器:最复杂
    通用定时器:中等复杂、最常用
    基本定时器:最简单
STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4

类型编号总线功能
高级定时器TIM1、TIM8APB2拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能
通用定时器TIM2、TIM3、TIM4、TIM5APB1拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能
基本定时器TIM6、TIM7APB1拥有定时中断、主模式触发DAC的功能

基本定时器

时基单元:预分频器、计数器、自动重装载寄存器
功能:计数、定时
时钟源:默认72MHz    //只能选择内部时钟
预分频器:对72Mhz的计数时钟进行预分频    //实际分频=预分频+1
        预分频器=0,CK_CNT=72MHz    //不分频
        预分频器=1,CK_CNT=36MHz    //2分配
    最大分频数为65535
计数器:对预分频后的计数数字进行计数,计数时钟每来一个上升沿,计数器的值就加1,最大可以加到65535    //仅支持向上计数
自动重装载寄存器:存储计数目标,计数到,产生中断信号,清零计数器
更新中断:计数值等于自动重装值产生的中断
输出:
    上方箭头产生中断,更新中断
    下方箭头产生事件,更新事件
DAC:把跟新事件通过主模式映射到TRGO,TRGO触发DAC,不需要软件参数,实现硬件的自动化

 

通用定时器

时基单元

核心:时基单元    //和基本定时器一样
计数模式:向上计数、向下计数、中央对齐    //通用定时器和高级定时器
    向上计数:从0到计数目标,向上自增
    向下计数:从计数目标到0,向下自减
    中央对齐模式:从0开始向上计数到目标,产生一个溢出;再从目标向下计数,参数一个下溢,依次循环

内外时钟源选择

1.内部时钟源:72MHz
2.外部时钟源:
    1.TIMx_ETR引脚上的外部时钟,通过ETRF给预分频器,这一路也叫外部时钟模式2
    2.TRGI,用作触发输入来使用,可以触发定时器的从模式,TRGI当作外部时钟来使用,叫外部时钟模式1    //会占用触发输入通道
    3.其他:
        TIMx_CH1、TIMx_CH2    //这个上升沿和下降沿都有效
        TI1FP1和TI2FP2获得
级联:
    把跟新事件通过主模式映射到TRGO,TRGO触发DAC/ADC,然后接到其他定时器ITR上

其他硬件

输出比较电路
    通道数:4
    功能:输出PWM波形
输入捕获电路
    通道数:4
    功能:测量输入方波频率
捕获/比较寄存器
    输入捕获和输出比较共用

 

高级定时器

重复次数计数器:实现每隔几个计数周期才发生一次更新事件和更新中断
DTG:死区生成电路
互补输出:前三路输出引脚变为两个,可以输入一对互补的PWM波,方式开关切换瞬间,由于器件不理想,造成短暂的直通现象,所以接入死区生成电路
刹车输入:给电机驱动提供安全保障,如果引脚BKIN产生刹车信号或内部时钟失效,产生故障,自动切断输出,防止意外发生

基本结构

时钟部分:
    内部时钟:72MHz
    ETR外部时钟:外部时钟模式2
    ITRx其他定时器:外部时钟模式1
    TIx捕获通道:编码器模式,编码器独用模式
时基单元:
    预分频器:
    计数器:
    自动重装载器:
中断输出:
    重复计数器(高级定时器):
    中断输出控制:中断状态寄存器置标志位,标志位通过终端输出控制,到NVIC申请中断,需要就允许,不需要就禁止

时序

实时时钟:
    RTC时钟,用于提供年、月、日、时、分、秒和星期等的实时时间信息,由后备电池供电,当你晚上关闭系统和早上开启系统时,RTC仍然会保持正确的时间和日期。
系统时钟:
    是一个存储于系统内存中的逻辑时钟。用于系统的计算,比如超时产生的中断异常,超时计算就是由系统时钟计算的。这种时钟在系统掉电或重新启动时每次会被清除。  
CPU时钟:
    即CPU的频率,当然这里的时钟频率指的是工作频率,即外频,还有什么主频=外频×倍频

预分频时序

//分频系数1到2
CK_PSC:输入时钟
CNT_EN:高电平使能时钟
CNT_CNT:分频后时钟
计数:计数到自动重装载置产生更新事件,并清零,计数时改变分频数需要等待到计数清零后才能更新分哦数    //FC为计数目标
预分频控制寄存器:写入的分频数
预分频缓冲器:也称影子寄存器,真正起作用寄存器,实际分频数
    //如果某时刻将预分频改变,若立刻改变分频系数,将导致一个计数周期内,前后不断频率不一样
预分频计数器:预分频器内部实际上也是靠计数来分频
    当预分频值为0时,计数器就一直为0,输出原频率
    当预分频值为1时,计数器0、1、0、1
    计数器计数频率CK_CNT=CK_PSC/(PSC+1)

 

 

 

无预装

有预装

 

 

RCC时钟树

时钟是所有外设运行基础,时钟是最先需要配置的东西
主函数之前还有执行SystemInit函数,用来配置时钟树
时钟产生电路:    //左半部分
    震荡源:
        高速晶振:    //提供系统时钟,AHB、APB2、APB1
            RC振荡器:8MHz
            石英晶体振荡器HSE:4-16MHz,一般为8MHz    //比RC更稳定
        低速晶振:
            低速晶振LSE:外部32.768KHz,一般给RTC提供时钟
            低速RC振荡器:内部40KHz,给看门狗提供时钟
    工作方式:
        1.启动内部时钟,选择RC振荡器8MHz作为系统时钟
        2.启动外部时钟,进入PLL锁相环倍频,得到72MHz
    错误:
        当外部时钟出现问题,72MHz变为内部8MHz,慢10倍
    CSS:时钟安全系统
        复杂切换时钟,检测外部时钟的运行状态,一但外部时钟失效,自动把外部时钟切换到内部时钟,保证系统时钟运行,防止程序卡死造成事故
时钟分配电路:    //右半部分
    SYSCLK经过AHB    1分频,在经过APB1 2分配(APB1最大36MHz),得到36MHz,下方频率x2提供给定时器2~7频率72MHz;APB2 1分频,下方频率x1提供给定时器1和8频率72MHz    //预分频数在SystemInit分配
    无论是高级定时器、通用定时器、基本定时器,内部基准时钟都是72MHz

 

定时中断编程

步骤

1.RCC开启时钟
    RCC_APB1PeriphClockCmd
2.选择时基单元的时钟源    //定时中断默认选择内部时钟
    TIM_InternalClockConfig
3.配置时基单元
    TimeBaseInit
4.配置输出中断控制,允许更新中断输出到NVIC
    ITConfig
5.配置NVIC,在NVIC中打开定时器中断通道,配分配优先级
6.允许控制,使能计数器
    不使能不计数;使能后计数;计数器更新触发中断

学习资源:

        哔哩哔哩江科大自化协STM32视频资料

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值