STM32系统学习-TIM(基本定时器)_第1页
STM32系统学习-TIM(基本定时器)_第2页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 STM32系统学习TIM(基本定时器)、定时器分类STM32F1 系列中,除了互联型的产品,共有 8 个定时器,分为基本定时器,通定时器和级定时器。基本定时器 TIM6 和 TIM7 是个 16 位的只能向上计数的定时器,只能定时,没有外部 IO。通定时器 TIM2/3/4/5 是个 16 位的可以向上/下计数的定时器,可以定时,可以输出较,可以输捕捉,每个定时器有四个外部 IO。级定时器 TIM1/8是个 16 位的可以向上/下计数的定时器,可以定时,可以输出较,可以输捕捉,还可以有三相电机互补输出信号,每个定时器有 8 个外部 IO。、功能框图剖析基本定时器的核是时基,通计时器和级定时器

2、也有。1、时钟源定时器时钟TIMxCLK,即内部时钟CK_INT,经APB1预分频器后分频提供,如果APB1 预分频系数等于 1,则频率不变,否则频率乘以2,库函数中 APB1 预分频的系数是 2,即 PCLK1=36M,所以定时器时钟 TIMxCLK=36*2=72M 。2、计数器时钟定时器时钟经过 PSC 预分频器之后,即 CK_CNT,来驱动计数器计数。PSC 是个16 位的预分频器,可以对定时器时钟 TIMxCLK进 165536 之间的任何个数进分频。具体计算式为:CK_CNT=TIMxCLK/(PSC+1)。3.计数器计数器 CNT 是个 16 位的计数器,只能往上计数,最计数值为

3、 65535。当计数达到动重装载寄存器的时候产更新事件,并清零从头开始计数。4、动重装载寄存器动重装载寄存器 ARR 是个 16 位的寄存器,这装着计数器能计数的最数值。当计数到这个值的时候,如果使能了中断的话,定时器就产溢出中断。5. 定时时间的计算定时器的定时时间等于计数器的中断周期乘以中断的次数。计数器在 CK_CNT 的驱动下,计个数的时间则是 CK_CLK 的倒数,等于:1/(TIMxCLK/(PSC+1)),产次中断的时间则等于:1/(CK_CLK * ARR)。如果在中断服务程序设置个变量 time,来记录中断的次数,那么就可以计算出我们需要的定时时间等于: 1/CK_CLK *

4、(ARR+1)*time。三、定时器初始化结构体详解在标准库函数头件stm32f10 x_tim.h中对定时器外设建了四个初始化结构体,基本定时器只到其中个即TIM_TimeBaseInitTypeDef,其他三个在级定时器章节讲解。 uint16_t TIM_Prescaler; / 预分频器uint16_t TIM_CounterMode; / 计数模式uint32_t TIM_Period; / 定时器周期uint16_t TIM_ClockDivision; / 时钟分频uint8_t TIM_RepetitionCounter; / 重复计算器 TIM_TimeBaseInitTyp

5、eDef;(1) TIM_Prescaler:定时器预分频器设置,时钟源经该预分频器才是定时器时钟,它设定TIMx_PSC 寄存器的值。可设置范围为 0 65535,实现 1 65536 分频。(2) TIM_CounterMode:定时器计数式,可是在为向上计数、向下计数以及三种中对齐模式。基本定时器只能是向上计数,即TIMx_CNT只能从 0开始递增,并且需初始化。(3) TIM_Period:定时器周期,实际就是设定动重载寄存器的值,在事件成时更新到影寄存器。可设置范围为 0 65535。(4) TIM_ClockDivision:时钟分频,设置定时器时钟 CK_INT 频率与数字滤波器

6、采样时钟频率分频,基本定时器没有此功能,不设置。(5) TIM_RepetitionCounter:重复计数器,属于级控制寄存器专寄存器位,利它可以常容易控制输出 PWM 的个数。这不设置。虽然定时器基本初始化结构体有 5 个成员,但对于基本定时器只需设置其中两个就可以。四、基本定时器实验本实验利基本定时器 TIM6/7 定时 1s,1s 时间到 LED 翻转次。基本定时器是单机内部的资源,没有外部 IO,不需要接外部电路,现只需要个 LED 即可 。软件设计编写两个定时器驱动件,bsp_TiMbase.h 和bsp_TiMbase.h,来配置定时器中断优先级和和初始化定时器 。1、 编程要点

7、(1) 开定时器时钟 TIMx_CLK, x6,7 ;(2) 初始化时基初始化结构体 ;(3) 使能 TIMx, x6,7 update 中断;(4) 打开定时器;(5) 编写中断服务程序通定时器和级定时器的定时编程要点跟基本定时器差不多,只是还要再选择下计数器的计数模式,是向上还是向下。因为基本定时器只能向上计数,且没有配置计数模式的寄存器,默认是向上。2.、软件分析基本 定时器宏定义11 #else / 使基本定时器 TIM712 #define BASIC_TIM TIM718 #endif基本定时器有 TIM6 和 TIM7,我们可以有选择的使,为了提代码的可移植性,我们把当需要修改定

8、时器时需要修改的代码定义成宏,默认使的是定时器 6,如果想修改成定时器 7,只需要把宏 BASIC_TIM6 注释掉即可。基本定时器设定 void BASIC_TIM_Config(void)4712 / 时钟预分频数为 71,则驱动计数器的时钟 CK_CNT = CK_INT / (71+1)=1M27 / 清除计数器中断标志位28 TIM_ClearFlag(BASIC_TIM, TIM_FLAG_Update);2930 / 开启计数器中断31 TIM_ITConfig(BASIC_TIM,TIM_IT_Update,ENABLE);3233 / 使能计数器34 TIM_Cmd(BASI

9、C_TIM, ENABLE);3536 / 暂时关闭定时器的时钟,等待使37 BASIC_TIM_APBxClock_FUN(BASIC_TIM_CLK, DISABLE)38 我们把定时器设置动重装载寄存器 ARR 的值为 1000,设置时钟预分频器为 71,则驱动计数器的时钟:CK_CNT = CK_INT /(71+1)=1M,则计数器计数次的时间等于:1/CK_CNT=1us,当计数器计数到 ARR 的值 1000 时,产次中断,则中断次的时间为:1/CK_CNT*ARR=1ms。在初始化定时器的时候,我们定义了个结构体:TIM_TimeBaseInitTypeDef,TIM_Time

10、BaseInitTypeDef 结构体有 5 个成员,TIM6 和 TIM7 的寄存器只有TIM_Prescaler 和 TIM_Period,另外三个成员基本定时器是没有的,所以使 TIM6 和TIM7的时候只需初始化这两个成员即可, 另外三个成员是通定时器和级定时器才有,具体说明如下:1 typedef struct 2 TIM_Prescaler / 都有5 TIM_ClockDivision / TIMx,x6,7没有,其他都有6 TIM_RepetitionCounter / TIMx,x1,8,15,16,17 才有7 TIM_TimeBaseInitTypeDef;定时器中断优先

11、级配置 12 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;13 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;14 NVIC_Init(&NVIC_InitStructure);15 定时器中断服务程序1 void BASIC_TIM_IRQHandler (void)6 7 定时器中断次的时间是 1ms,我们定义个全局变量 time,每当进次中断的时候,让 time 来记录进中断的次数。如果我们想实现个 1s 的定时,我们只需要判断time 是否等于 1000 即可,1000 个 1ms

12、就是 1s。然后把 time 清 0,重新计数,以此循环往复。在中断服务程序的最后,要把相应的中断标志位清除掉,切记。主函数1 int main(void)2 3 /* led 端配置 */4 LED_GPIO_Config();56 /* 基本定时器 TIMx,x6,7 定时配置 */7 BASIC_TIM_Config();89 /* 配置基本定时器 TIMx,x6,7的中断优先级 */10 BASIC_TIM_NVIC_Config();1112 /* 基本定时器 TIMx,x6,7 重新开时钟,开始计时 */13 BASIC_TIM_APBxClock_FUN(BASIC_TIM_CLK, ENABLE);1415 while (1) 16 if ( time = 1000 ) /* 1000 * 1 ms = 1s 时间到 */17 time = 0;18 /* LED1 取反 */19 LED1_TOGGLE;20 21 22 函数做些必须的初

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论