第八章 金龙107——TIM
8.1 TIMER: 通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。 使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。 每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作。STM32为用户配备了2个基本定时器TIM6和TIM7,4个通用定时器TIM2、TIM3、TIM4、TIM5,2个高级定时器。在《STM32 参考手册》中仅对定时器的介绍就已经占了 100 多页,看来STM32定时器的资源是非常强大的。 由于 STM32 通用定时器比较复杂,这里我们不再多作介绍,请大家直接参考《STM32 参考手册》第 253 页,通用定时器一章。为了深入了解 STM32 的通用定时器,下面我们先介绍一下与我们这章实验密切相关的几个函数的配置、调用。 8.2实验说明:在本实验中,主要使用STM32F107的TIM4和LED5,程序下载运行后,LED5以1s时间间隔亮灭闪烁。 主要跳线帽:JP4和JP7都接在2-3上 8.3硬件说明:本实验主要涉及的硬件LED灯, 8.4程序说明:本实验配置主要是TIM的配置,主要是涉及到定时器定时时间的计算,因为计数器的时钟频率(CK_CNT)等于fCK_PSC/( PSC[15:0]+1)。所以在设定预分频值时留心注意,其次是定时器的计数的数值,计数方式。这一章,我们将使用定时器TIM4产生中断,然后在中断服务函数里面翻转LED4上的电平,来指示定时器中断的产生。接下来我们以通用定时器 TIM4 为实例,来说明要经过哪些步骤,才能达到这个要求,并产生中断。这里我们就对每个步骤通过库函数的实现方式来描述。 首先要提到的是,定时器相关的库函数主要集中在固件库文件 stm32f10x_tim.h 和 stm32f10x_tim.c 文件中。 1) 使能TIM4时钟 TIM4是挂载在 APB1 之下,所以我们通过 APB1 总线下的使能使能函数来使能 TIM4。调用的函数是: 2) 初始化定时器参数,设置自动重装值,分频系数,计数方式等 3) 设置 TIM4_DIER 允许更新中断。 因为我们要使用 TIM4 的更新中断,寄存器的相应位便可使能更新中断。在库函数里面定 时器中断使能是通过 TIM_ITConfig 函数来实现的: 第一个参数是选择定时器号。我们这里选择TIM4 第二个参数非常关键,是用来指明我们使能的定时器中断的类型,定时器中断的类型包括更新中断 TIM_IT_Update,触发中断 TIM_IT_Trigger,以及输入捕获中断等等。 第三个参数就是失能还是使能。 4) 中断优先级的设置 在定时器中断使能后,因为要产生中断,必不可少的要设置NVIC相关寄存器和中断优先级。 5) 使能TIM4 6) 编写中断服务函数 在配置好了所有外设的时候,最后就要编写我们的中断服务函数了。中断产生后,通过ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT)来判断此次产生的中断类型。然后执行相关的操作,我们这里使用的是更新(溢出)中断,在处理完中断之后调用 TIM_ClearITPendingBit(TIM4, TIM_FLAG_Update);来清除该中断标志。 中断函数里面要判断中断源和清除中断标志位,再执行中断处理程序 通过以上几个步骤,就可以达到我们的实验目的,使用TIM4的更新中断,来控制 LED5 的亮灭。 8.5实验现象:LED1灯闪烁指示程序运行(简单延时)。 LD5闪烁周期为2秒(TIM4的更新中断)。
|