野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 44235|回复: 110

【F1-TIM】STM32基本定时器TIM6和TIM7框图剖析+程序+教程

  [复制链接]
发表于 2015-10-8 10:23:15 | 显示全部楼层 |阅读模式
STM32定时器分类
基本定时器TIM6和TIM7都有一个16位的计数器,计数方式只能向上,没有外面IO,是属于内部定时器。
STM32定时器分类.jpg



基本定时器TIM6和TIM7框图剖析
基本定时器框图1.jpg
基本定时器主要由PSC预分频器、CNT计数器、自动重装载寄存器这三部分组成。16位的计数器在
预分频器时钟CK_CNT的驱动下从0往上计数,计数器的计数模式只能是向上,最大是2^16=65535,
当计数值等于自动重装载寄存器中的数值时,产生一个更新事件,该事件可以是计数器溢出中断或者
是DMA请求。更新事件之后,计数器清零,重新开始计数。

①定时器时钟
定时器时钟TIMxCLK,即内部时钟CK_INT,经APB1预分频器后分频提供,如果APB1预分频系数等于1,则频率不变,否则频率乘以2,库函数中APB1预分频的系数是2,即PCLK1=36M,所以定时器时钟TIMxCLK=36*2=72M。
②计数器时钟
定时器时钟经过PSC预分频器之后,即CK_CNT,用来驱动计数器计数。PSC是一个16位的预分频器,可以对
定时器时钟TIMxCLK进行1~65536之间的任何一个数进行分频。具体计算方式为:CK_CNT=TIMxCLK/(PSC+1)

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

④自动重装载寄存器
自动重装载寄存器ARR是一个16位的寄存器,这里面装着计数器能计数的最大数值。

定时时间的计算
定时器的定时时间等于计数器的中断周期乘以中断的次数。计数器在CK_CNT的驱动下,计一个数的时间则是CK_CLK
的倒数,等于:1/(TIMxCLK/(PSC+1)),产生一次中断的时间则等于:1/(CK_CLK * ARR)
如果在中断服务程序里面设置一个变量time,用来记录中断的次数,那么就可以计算出我们需要的定时时间等于:1/(CK_CLK * ARR)* time

基本定时器除了可以产生基本的定时之外,还可以用来触发DAC的同步电路,实际上TIM6和TIM7在内部已经连接到了各自
的DAC中,关于这部分的知识我们在DAC章节再详细讲解。

============================基本定时器TIM6和TIM7编程要点============================
1、开定时器时钟TIMx_CLK, x[6,7]
2、设置自动重装载寄存器ARR的值
3、确定计数器的时钟,设置PSC的分频系数
4、初始化TIMx, x[6,7]
5、使能TIMx, x[6,7] update中断
6、打开定时器
7、编写中断服务程序

简单的不能再简单了,简直就跟51单片机的定时器一样

我看到很多人在初始化基本定时器的时候,还拼命的初始化TIM_CounterModeTIM_ClockDivisionTIM_RepetitionCounter
这三个成员,基本定时器根本就没有计数模式的设置,只能向上计数,也没有时钟分频因子和重复计数器,你们倒是在
瞎折腾个啥,型号也没有,所以你折腾了也没关系,不会出错,就因为瞎打误撞你还真以为就理解对了,其实你还不懂。

  1. /*
  2. * 注意:TIM_TimeBaseInitTypeDef结构体里面有5个成员,TIM6和TIM7的寄存器里面只有
  3. * TIM_Prescaler和TIM_Period,所以使用TIM6和TIM7的时候只需初始化这两个成员即可,
  4. * 另外三个成员是通用定时器和高级定时器才有.
  5. *-------------------------------------------------------------------------------------------------------------
  6. * TIM_Prescaler         都有
  7. * TIM_CounterMode                         TIMx,x[6,7]没有,其他都有
  8. * TIM_Period            都有
  9. * TIM_ClockDivision     TIMx,x[6,7]没有,其他都有
  10. * TIM_RepetitionCounter TIMx,x[1,8,15,16,17]才有
  11. *-------------------------------------------------------------------------------------------------------------
  12. */
复制代码
基本定时器初始化代码如下:
  1. void TIMx_Configuration(void)
  2. {
  3.     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  4.                
  5.                 // 开启TIMx_CLK,x[6,7],即内部时钟CK_INT=72M
  6.     macTIM_APBxClock_FUN (macTIM_CLK, ENABLE);
  7.         
  8.                 // 自动重装载寄存器周的值(计数值)
  9.     TIM_TimeBaseStructure.TIM_Period=1000;
  10.         
  11.     // 累计 TIM_Period个频率后产生一个更新或者中断
  12.           // 时钟预分频数为71,则驱动计数器的时钟CK_CNT = CK_INT / (71+1)=1M
  13.     TIM_TimeBaseStructure.TIM_Prescaler= 71;
  14.         
  15.                 // 时钟分频因子 ,基本定时器TIM6和TIM7没有,不用管
  16.     //TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
  17.                
  18.                 // 计数器计数模式,基本定时器TIM6和TIM7只能向上计数,没有计数模式的设置,不用管
  19.     //TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
  20.                
  21.                 // 重复计数器的值,基本定时器TIM6和TIM7没有,不用管
  22.                 //TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
  23.         
  24.           // 初始化定时器TIMx, x[6,7]
  25.     TIM_TimeBaseInit(macTIMx, &TIM_TimeBaseStructure);
  26.                
  27.                 // 清除计数器中断标志位
  28.     TIM_ClearFlag(macTIMx, TIM_FLAG_Update);
  29.          
  30.                 // 开启计数器中断
  31.     TIM_ITConfig(macTIMx,TIM_IT_Update,ENABLE);
  32.                
  33.                 // 使能计数器
  34.     TIM_Cmd(macTIMx, ENABLE);                                                                                                                                                
  35.    
  36.                 // 暂时关闭TIMx,x[6,7]的时钟,等待使用
  37.     macTIM_APBxClock_FUN (macTIM_CLK, DISABLE);   
  38. }
复制代码
默认初始化的是基本定时器TIM6,如果想用TIM7,把macTIM6这个宏注释掉即可
  1. /********************基本定时器TIM参数定义,只限TIM6、7************/
  2. #define macTIM6 // 如果使用TIM7,注释掉这个宏即可

  3. #ifdef  macTIM6 // 使用基本定时器TIM6
  4. #define             macTIMx                                TIM6
  5. #define             macTIM_APBxClock_FUN                   RCC_APB1PeriphClockCmd
  6. #define             macTIM_CLK                             RCC_APB1Periph_TIM6
  7. #define             macTIM_IRQ                             TIM6_IRQn
  8. #define             macTIM_INT_FUN                         TIM6_IRQHandler

  9. #else  // 使用基本定时器TIM7
  10. #define             macTIMx                                TIM7
  11. #define             macTIM_APBxClock_FUN                   RCC_APB1PeriphClockCmd
  12. #define             macTIM_CLK                             RCC_APB1Periph_TIM7
  13. #define             macTIM_IRQ                             TIM7_IRQn
  14. #define             macTIM_INT_FUN                         TIM7_IRQHandler

  15. #endif
复制代码


基本定时器TIM6和TIM7 定时1s代码 TIM—基本定时器定时.rar (312.26 KB, 下载次数: 257)

教程: TIM—通用定时器.pdf (351.15 KB, 下载次数: 305)



回复

使用道具 举报

发表于 2015-10-31 10:59:50 | 显示全部楼层
支持野火!!!支持每日一题!!!
回复 支持 反对

使用道具 举报

发表于 2015-10-31 15:01:02 | 显示全部楼层
受教了,知道了定时器的差距和如何操作定时器。
回复 支持 反对

使用道具 举报

发表于 2015-11-5 14:07:27 | 显示全部楼层
知道了定时器的差距和如何操作
回复 支持 反对

使用道具 举报

发表于 2015-11-8 18:40:13 | 显示全部楼层
要重新梳理一遍定时器了
回复 支持 反对

使用道具 举报

发表于 2015-11-9 15:50:11 | 显示全部楼层
定时器定时器
回复 支持 反对

使用道具 举报

发表于 2015-11-10 12:53:15 | 显示全部楼层
好东西,值得学习
回复 支持 反对

使用道具 举报

发表于 2015-11-13 07:27:10 | 显示全部楼层
定时器诗歌复杂的玩意
回复 支持 反对

使用道具 举报

发表于 2015-11-13 07:52:52 | 显示全部楼层
产生一次中断的时间则等于:1/(CK_CLK * ARR)。请教野火,计时周期为什么不是ARR+1呢?
回复 支持 反对

使用道具 举报

发表于 2015-11-13 12:43:28 | 显示全部楼层
进来学习学习定时器
回复 支持 反对

使用道具 举报

发表于 2015-11-13 13:22:31 | 显示全部楼层

学习中,顶顶顶顶!!!!!!!!
回复 支持 反对

使用道具 举报

发表于 2015-11-19 16:54:12 | 显示全部楼层

知道了定时器的差距和如何操作
回复 支持 反对

使用道具 举报

发表于 2015-11-19 16:56:15 | 显示全部楼层
基本定时器
回复 支持 反对

使用道具 举报

发表于 2015-11-20 12:52:34 | 显示全部楼层
来学习学习
回复 支持 反对

使用道具 举报

发表于 2015-11-20 23:36:46 | 显示全部楼层

学习学习
回复 支持 反对

使用道具 举报

发表于 2015-11-22 16:11:12 | 显示全部楼层
每日一题,火哥厉害!!
回复 支持 反对

使用道具 举报

发表于 2015-11-25 19:44:34 | 显示全部楼层
看帖回复是种美德~
回复 支持 反对

使用道具 举报

发表于 2015-11-26 11:06:51 | 显示全部楼层
谢谢火哥分享,很有用的资料
回复 支持 反对

使用道具 举报

发表于 2015-11-26 11:07:33 | 显示全部楼层
谢谢火哥分享,很有用的资料,顶,顶!!!
回复 支持 反对

使用道具 举报

发表于 2015-11-26 12:58:56 | 显示全部楼层
支持野火!!!支持每日一题!!!
回复 支持 反对

使用道具 举报

发表于 2015-11-26 14:30:26 | 显示全部楼层
正好遇到类似的问题
回复 支持 反对

使用道具 举报

发表于 2015-11-26 20:48:21 | 显示全部楼层
不是讲通用定时器吗?,怎么讲的是一般计时器??
回复 支持 反对

使用道具 举报

发表于 2015-11-26 22:17:20 | 显示全部楼层
链接过来看看
回复 支持 反对

使用道具 举报

发表于 2015-11-29 08:25:33 | 显示全部楼层
我要学习一下
回复 支持 反对

使用道具 举报

发表于 2015-12-1 10:46:14 | 显示全部楼层
真心感谢野火团队,让我对自己的专业有了兴趣!
回复 支持 反对

使用道具 举报

发表于 2015-12-6 07:47:24 来自手机 | 显示全部楼层
谢谢,正在学习定时器
回复 支持 反对

使用道具 举报

发表于 2015-12-6 10:00:03 | 显示全部楼层
学习一下定时器
回复 支持 反对

使用道具 举报

发表于 2015-12-6 10:34:00 | 显示全部楼层
火哥辛苦   
回复 支持 反对

使用道具 举报

发表于 2015-12-6 10:52:31 | 显示全部楼层
感謝火哥分享!!學習學習
回复 支持 反对

使用道具 举报

发表于 2015-12-9 22:56:28 | 显示全部楼层
学习一下。。。。。。。。。。。。。。。。。。。。
回复

使用道具 举报

发表于 2015-12-10 15:20:53 | 显示全部楼层
谢谢分享啊啊啊
回复 支持 反对

使用道具 举报

发表于 2015-12-10 18:31:13 | 显示全部楼层
支持                        
回复 支持 反对

使用道具 举报

发表于 2015-12-14 11:14:15 | 显示全部楼层
赞一个!!!!!!!!!!
回复

使用道具 举报

发表于 2015-12-18 10:47:26 | 显示全部楼层
再回复一次
回复 支持 反对

使用道具 举报

发表于 2015-12-22 17:25:14 | 显示全部楼层
让我看看那
回复 支持 反对

使用道具 举报

发表于 2015-12-22 19:59:07 | 显示全部楼层
66666666666
回复 支持 反对

使用道具 举报

发表于 2015-12-24 10:06:23 | 显示全部楼层
ipnu b ytm ytm
回复 支持 反对

使用道具 举报

发表于 2015-12-27 12:02:48 | 显示全部楼层
重新看一遍定时器。
回复 支持 反对

使用道具 举报

发表于 2016-1-5 23:16:52 来自手机 | 显示全部楼层
天天要回复
回复 支持 反对

使用道具 举报

发表于 2016-1-7 20:55:07 | 显示全部楼层
还好还好好。
回复 支持 反对

使用道具 举报

发表于 2016-1-9 23:33:52 | 显示全部楼层
支持野火!!!支持每日一题!!!
回复 支持 反对

使用道具 举报

发表于 2016-1-19 17:40:19 | 显示全部楼层
跳过来的 从另一个楼里
回复 支持 反对

使用道具 举报

发表于 2016-1-21 12:44:08 | 显示全部楼层
感谢火哥,好东西值得大家分享
回复 支持 反对

使用道具 举报

发表于 2016-2-8 22:20:18 | 显示全部楼层
非常不错,感谢火哥
回复 支持 反对

使用道具 举报

发表于 2016-2-17 16:05:00 | 显示全部楼层
看看学习                  
回复 支持 反对

使用道具 举报

发表于 2016-2-17 19:49:25 | 显示全部楼层
支持野火每日一题!
回复 支持 反对

使用道具 举报

发表于 2016-2-18 00:11:59 | 显示全部楼层
正好在研究定时器  谢火哥
回复 支持 反对

使用道具 举报

发表于 2016-2-19 15:53:52 | 显示全部楼层
每日一题顶顶顶
回复 支持 反对

使用道具 举报

发表于 2016-3-3 08:38:41 | 显示全部楼层
支持野火!!
回复

使用道具 举报

发表于 2016-3-7 17:30:22 | 显示全部楼层
火哥真厉害,加油,小弟佩服你。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-22 04:01 , Processed in 0.081322 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表