一、实验目的
1. 掌握使用 STM32 的通用定时器 TIM6/7实现 1s 定时的方法;
2. 掌握 STM32 的定时器的原理及基本功能;
3. 掌握定时器的基本配置功能。
二、实验内容
编程实现,利用定时器TIM6/7定时1秒,每隔1秒控制PBO端口 LED灯闪烁一次,同时TFT上显示次数。
三、实验器材(设备、元器件)
(一)装有Keil uVision5软件的计算机一台
(二)STM32f103VET6的开发板一块
四、实验步骤
1. 定时/计数器的工作原理
使用精准的时基,通过硬件的方式,实现定时功能定时器核心就是计数器定时/计数器实质上是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是每来一个脉冲,计数器就自加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU发出中断请求(中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。
2. TIM(Timer)定时器
(1)定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断;
(2)16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时;
(3)不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能;
(4)根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型:
(5)基本定时器框图
3. 定时器基本配置
设置自动重装载寄存器ARR的值为10000,设置时钟预分频器为72,则驱动计数器的时钟CK_CNT=CK_INT/(71+1)=1MHz,则计数器计数一次的时间为1/CK_CNT=1s。当计数器计数到ARR的值为10000时,产生一次中断,则一次中断时间为1/CK_CNT×ARR=1s。
(1)开启定时器时钟,即内部时钟;
使用SystenInit函数初始化的时候,各时钟频率如下:SYSCLK = 72M AHB时钟 = 72M APB1时钟=36M,所以APB1的分频系数=AHB/APB1=2,由此可得CK_INT的时钟频率为2*36M = 72M
定时器时钟TIMxCLK,即内部时钟CK_INT,经APBL预分频器后分猕提供。如果APB1预分频系数等于1,则频率不变,否则频率乘以2。库函数中 APB1预分频的系数是2,即PCLK1=36 MHz,所以定时器时钟中TIMxCLK=36x2=72 MHz。
(2)TIM_Period:自动重装载寄存器周期的值(计数值);
定时器周期,即设定自动重载寄存器的值,在事件生成时更新到影子寄存器,可设置范围为0-65535。自动重载寄存器ARR是一个16位的寄存器,装着计数器能计数的最大数值。当计数到这个值时,如果使能了中断的话,定时器就产生溢出中断。
(3)TIM_Prescaler:定时器预预分频数器设置为72;
定时器时钟经过PSC预分频器之后,即CK_CNT,用来驱动计数器计数。PSC是一个16 位的预分频器,可以通过定时器时钟 TIMxCLK对1~65536的任何一个数进行分频。具体计算方式为:CK_CNT=TIMxCLK/(PSC+1)。
(4)TIM_CounterMode:定时器计数方式,可分为向上计数,向下计数以及中心对齐模式,基本定时器只能向上计数,且没有配置计数模式的寄存器,默认向上。
这里我们将计算模式设置为向上计算模式,也就将DIR位设为0。
(5)TIM_ClockDivision:时钟分频,设置定时器时钟CK_INT频率与数字滤波器采样时钟频率分频比,基本定时器没有此功能,不用设置;
(6)初始化定时器;初始代定时器房动定时器无限循环;
(7)清除计数器中断标志位;
(8)开启计数器CN中断;
该寄存器是用来计数的,不需要进配置,在将定时器打开以后便自动开始计数,直到与ARR寄存器中的值相匹配产生溢出事件。
4. 使能定时器更新中断,开启定时器计数,配置定时器中断优先级
CEN:使能计数器
0:禁止计数器; 1:使能计数器。
注:在软件设置了CEN之后,外部时钟、门控模式和编码器模式才能工作,触发器可以自动地通过硬件设置CEN位。
在单脉冲模式下,当发生更新事件时,CEN被自动清除。
(1)同时使能CEN位,让CK_CNT时钟开始工作,驱动计数器CNT计数。
(2)设置中断分组为0,抢占优先级为0,响应优先级为3,基本定时器中断优先级配置如下:
5.编写中断服务函数
定时器中断一次的时间是1s,定义一个全局变量Cnt,每当进一次中断的时候,由Cnt来记录进入中断次数。如果想实现一个1s的定时,只需要判断Cnt是否等于1000即可(1000个1ms就是1s);然后主函数把Cnt清除,重新计数,一次循环往复。在中断服务程序中一定要把相应的中断标志位清除掉,它不会硬件自动清除。
五、实验数据及结果分析
通过以上实验得出以下数据
1. 主函数部分如下:
2. 定时器的配置如下:
3. Tim.h部分:
4. GPIO的配置如下:
5. led.h部分:
6. 定时器中断服务程序如下:
7. 程序编译结果如下:
8. 软件仿真波形图如下: