嵌入式——定时器(1)配置

目录

一. 定时器概述

    1. STM32的定时器

    2. STM32定时器特性表

    3. 基本、通用、高级定时器的功能区别

    4. 定时器定时原理

    5. STM32定时器计数模式及溢出条件

    6. 定时器溢出事件的计算

二. 定时器认识——基本定时器(TIM6 / TIM7)

    1. 介绍

    2. 主要特性

    3. 结构框图

    4. 相关寄存器介绍

三. 定时器中断的配置

    1. 配置步骤

    2. 代码参考


一. 定时器概述

有软件、硬件两种方式实现定时(延时)功能,纯软件为CPU死等的方式,这种方式延时不精准;另一种则使用精准的时基,通过硬件的方式实现。

    1. STM32的定时器

    2. STM32定时器特性表

        STM32F1系列中,除了互联型的产品,共有8个定时器,分为基本定时器、通用定时器和高级定时器。

    3. 基本、通用、高级定时器的功能区别

(1)基本定时器:是16位的只能向上计数的定时器,只能定时,没有外部IO,常用作时基,即定时功能。

(2)通用定时器:可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,每个定时器有4个外部IO,可用于输入捕获/输出比较,也可用作时基。

3)高级定时器:可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,还可以有三相电机互补输出信号,每个定时器有8个外部IO,还具备带死区控制的互补信号输出、刹车输入等功能(可用于电机控制、数字电源设计等)

    4. 定时器定时原理

定时器核心就是计数器

    5. STM32定时器计数模式及溢出条件

(分频系数 = PSC + 1)

(1)递增计数模式(向上计数模式)

计数器从‘0’计数到自动加载值(TIMx_ARR计数器的内容),然后重新从‘0’开始计数并且产生一个计数器溢出事件。

(2)递减计数模式(向下计数模式)

计数器从自动装入的值(TIMX_ARR计数器的值)开始向下计数到‘0’,然后从自动装入的值重新开始并且产生一个计数器向下溢出事件。

(3)中心对齐模式(中央对齐模式)

计数器从‘0’开始计数到‘自动加载的值(TIMX_ARR寄存器)-1’,产生一个计数器溢出事件,然后向下计数到‘1’并且产生一个计数器下溢事件;然后再从‘0’开始重新计数。

    6. 定时器溢出事件的计算

补:(1)Tout:定时器溢出时间

(2)Ft:定时器的时钟源频率

(3)ARR:自动重装载寄存器的值

(4)PSC:预分频器寄存器的值

二. 定时器认识——基本定时器(TIM6 / TIM7

    1. 介绍

        基本定时器的核心是时基,不仅基本定时器有,通用定时器和高级定时器也有。每个定时器各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。这2个定时器是互相独立的,不共享任何资源

    2. 主要特性

①16位递增计数器(计数值:0~65535)

②16位预分频器,用于对输入的时钟按系数为1~65536之间的任意数值

③可用于触发DAC

④在更新事件(计数器溢出)时,会产生中断/DMA请求

    3. 结构框图

①时钟源

        定时器时钟 TIMx_CLK,即内部时钟CK_INT,经APB1预分频器分频提供,如果 APB1预分频系数等于1,则频率不变,否则频率乘以2。定时器的时钟来源有四个:1)内部时钟(CK_INT) 2)外部时钟模式1:外部输入脚(TIx) 3)外部时钟模式2:外部触发输入(ETR) 4)内部触发输入(ITRx):使用 A定时器作为B定时器的预分频器(A为B提供时钟)

②计数器时钟

        定时器时钟经过PSC预分频器之后,即CK_CNT,用来驱动计数器计数。PSC是一个16位的预分频器,可以对定时器时钟TIMx_CLK的1~65536之间的任何一个数进行分频。具体计算方式为:CK_CNT=TIMx_CLK/(PSC+1)。

③计数器

        计数器 CNT 是一个16位的计数器,只能往上计数,最大计数值为65535。当计数达到自动重装载寄存器的时候产生更新事件,并清零从头开始计数。

④自动重装载寄存器

        自动重装载寄存器TIMx_ ARR是一个16位的寄存器,这里面装着计数器能计数的最大数值。当计数到这个值的时候,如果使能中断的话,定时器就产生溢出中断。

        该寄存器在物理上实际对应着2个寄存器。一个是程序员可以直接操作的,另外一个是程序员看不到的,这个看不到的奇存器被叫做影子寄存器。事实上真正起作用的是影子寄存器。具体的,即根据在TIMx_CR1寄存器中的自动装载预装载使能位(ARPE)的设置,预装载寄存器的内容被立即或在每次的更新事件UEV时传送到影子寄存器(APRE=0 时,预装载寄存器的内容可以随时传送到影子寄存器,此时2者是连通的;APRE=1 时,在每一次更新事件(UEV)时,才把预装在寄存器的内容传送到影子寄存器),并当TIMX_CR1寄存器中的UDIS位等于’0’时,产生更新事件。同理,在UDIS位被清‘0’之前,将不产生更新事件。但是在应该产生更新事件时,计数器仍会被清’0‘,同时预分频器的计数也被请’0‘(但预分频系数不变)。更新事件也可以由软件产生。

    4. 相关寄存器介绍

① 控制寄存器 1(TIMx_CR1

位7(ARPE):自动重装载预装载使能,配置TIMx_ARR寄存器有缓冲减少操作ARR寄存器所产生的误差

位0(CEN):计数器使能(默认关闭)

② DMA/中断使能寄存器(TIMx_DIER)

溢出时

位8(UDE):更新DMA请求使能(默认关闭)

位0(UIE):更新中断使能

③状态寄存器(TIMx_SR)

位0(UIF):更新中断标志,用于判断是否发生了更新中断,由硬件置1,软件清零。

④计数器(TIMx_CNT

计数器实时数值,可用于设置计时器初始值,范围:0~65535

⑤预分频器(TIMx_PSC

用于设置预分频系数,即可以将计数器的时钟频率按165536之间的任意值分频(实际预分频系数等于PSC + 1),它是基于一个(在TIMx_PSC寄存器中的)16位寄存器控制的16位计数器。这个控制寄存器带有缓冲器,它能够在工作时被改变。新的预分频器参数在下一次更新事件到来时被采用。

⑥自动重装载寄存器(TIMX_ARR

用于设置自动重装载值,范围:0~65535

三. 定时器中断的配置

    1. 配置步骤

(1)配置定时器基础工作参数:HAL_TIM_Base_Init()

(2)定时器基础MSP初始化:HAL_TIM_Base_MspInit()  (配置NVIC、CLOCK等)

(3)使能更新中断并启动计数器:HAL_TIM_Base_Start_IT()

(4)设置优先级,使能中断:HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()

(5)编写中断服务函数:TIMx_IRQHandler()等  ->  HAL_TIM_IRQHandler()(对相应的中断标志位进行详细判断,判断确定中断来源后,会自动清掉该中断标志位,同时调用不同类型中断的回调函数)

(6)编写定时器更新中断回调函数:HAL_TIM_PeriodElapsedCallback()(在每次中断后,判断 TIM6 的中断类型,如果中断类型正确,则执行代码)

    2. 代码参考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值