网易首页 > 网易号 > 正文 申请入驻

STM32第六章-TIM定时器详解

0
分享至

定时器(Timer)最基本的功能就是定时了,比如定时发送 USART 数据、定时采集 AD数据等等。如果把定时器与 GPIO 结合起来使用的话可以实现非常丰富的功能,可以测量输入信号的脉冲宽度,可以生产输出波形。定时器生产 PWM 控制电机状态是工业控制普遍方法,这方面知识非常有必要深入了解。STM32F4xx系列控制器有 2 个高级控制定时器、10 个通用定时器和 2 个基本定时器。

这里通用定时器的时钟频率是由APB1的分频系数决定,如果APB1的预分频系数是1,则通用定时器的时钟频率等于APB1的时钟频率,否则为APB1时钟的2倍。

时钟源

定时器要实现计数必须有个时钟源,基本定时器时钟只能来自内部时钟,高级控制定时器和通用定时器还可以选择外部时钟源或者直接来自其他定时器等待模式。我们可以通过 RCC 专用时钟配置寄存器(RCC_DCKCFGR)的 TIMPRE位设置所有定时器的时钟频率,我们一般设置该位为默认值 0,使得表中可选的最大定时器时钟为 90MHz,即基本定时器的内部时钟(CK_INT)频率为 90MHz。基本定时器只能使用内部时钟,当 TIM6 和 TIM7 控制寄存器 1(TIMx_CR1)的 CEN 位置 1时,启动基本定时器,并且预分频器的时钟来源就是 CK_INT。对于高级控制定时器和通用定时器的时钟源可以来找控制器外部时钟、其他定时器等等模式,较为复杂。

使用SystenInit函数初始化的时候,各时钟频率如下:SYSCLK = 72MAHB时钟 = 72MAPB1时钟=36M所以APB1的分频系数=AHB/APB1=2由此可得CK_INT的时钟频率为2*36M = 72M.计数器的最终的频率还需要经过PSC预分频计算才能得到

计数器

基本定时器计数过程主要涉及到三个寄存器内容,分别是计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)、自动重载寄存器(TIMx_ARR),这三个寄存器都是 16 位有效数字,即可设置值为 0至 65535。

定时器周期计算

定时事件生成时间主要由 TIMx_PSC 和 TIMx_ARR两个寄存器值决定,这个也就是定时器的周期。比如我们需要一个 1s周期的定时器,具体这两个寄存器值该如何设置?假设,我们先设置 TIMx_ARR寄存器值为 9999,即当 TIMx_CNT从 0开始计算,刚好等于 9999时生成事件,总共计数 10000次,那么如果此时时钟源周期为 100us即可得到刚好 1s的定时周期。接下来问题就是设置 TIMx_PSC寄存器值使得 CK_CNT 输出为 100us 周期(10000Hz)的时钟。预分频器的输入时钟 CK_PSC为 90MHz,所以设置预分频器值为(9000-1)即可满足。

定时器初始化结构体详解

typedef struct { uint16_t TIM_Prescaler; // 预分频器 uint16_t TIM_CounterMode; // 计数模式 uint32_t TIM_Period; // 定时器周期 uint16_t TIM_ClockDivision; // 时钟分频 uint8_t TIM_RepetitionCounter; // 重复计算器 } TIM_TimeBaseInitTypeDef;

(1) TIM_Prescaler:定时器预分频器设置,时钟源经过该预分频器才是定时器时钟,它设定TIMx_PSC 寄存器的值。可设置范围为 0 至 65535,实现 1至 65536 分频。为啥要搞一个预分频器,那是因为系统时钟频率太快了,90MHZ啊,这一般人定时器可顶不住这么快的速度,所以分频一下,让他的给定时器的时钟频率少一点,仅此而已。(2) TIM_CounterMode:定时器计数方式,可为向上计数、向下计数以及三种中心对齐模式。基本定时器只能是向上计数,即 TIMx_CNT只能从 0开始递增,并且无需初始化。(3) TIM_Period:定时器周期,实际就是设定自动重载寄存器的值,在事件生成时更新到影子寄存器。可设置范围为 0至 65535。自动重载寄存器的值:举个例子,你要往桶里面放水,水满了之后把它倒掉。那装满需要多少水呢?就给他设定一个值,滴水滴100000滴才满,拿去倒掉。倒掉之后,在重新设置滴100000滴,满了再倒掉……(4) TIM_ClockDivision:时钟分频,设置定时器时钟 CK_INT 频率与数字滤波器采样时钟频率分频比,基本定时器没有此功能,不用设置。(5) TIM_RepetitionCounter:重复计数器,属于高级控制寄存器专用寄存器位,利用它可以非常容易控制输出 PWM 的个数。这里不用设置.

程序配置

设置通用定时器,并产生相应中断,主要分为以下几个步骤(以TIM3为例)

TIM3时钟使

3年嵌入式物联网学习资源整理分享:C语言、Linux开发、数据结构;软件开发,STM32单片机、ARM硬件开发、物联网通信开发、综合项目开发教程资料;笔试面试真题。点击下方插件免费领取↓↓↓

嵌入式物联网学习资料(头条)

设置TIM3_ARR和TIM3_PSC的值

设置TIM3_DIER允许更新中断

允许TIM3工作

TIM3中断分组设置

编写中断服务函数

void TIM3_Int_Init() { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能 TIM_TimeBaseStructure.TIM_Prescaler =7199; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率 TIM_TimeBaseStructure.TIM_Period = 4999; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 TIM_ITConfig(TIM3, TIM_IT_Update,ENABLE); NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能 NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器 TIM_Cmd(TIM3, ENABLE); //使能TIMx外设 }

使用定时器之前都必须开启定时器时钟,基本定时器属于 APB1总线外设。APB1总线外设时钟=72M。我们把定时器设置自动重装载寄存器 arr 的值为4999,设置时钟预分频器寄存器psc的值为7199,则驱动计数器的时钟:

CK_CNT=APB1_CLK/(7199+1)=72M/7200=10K

则计数器计数一次的时间等于:

1/CK_CNT=0.0001s=0.1ms=100us,

当计数器从0计数到4999时,产生一次中断,

则中断一次的时间为:

100usX5000=0.0001sX5000=0.5s=500ms

也就是半秒钟。

void TIM3_IRQHandler(void) //TIM3中断 { if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 { TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断源 LED1=!LED1; } }

这个中断服务函数开始用if语句和TIM_GetITStatus()函数判断是否TIM3发生了中断,如果发生了中断就清除TIM3的中断标志位。让LED1灯反转。

int main(void) { delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2 LED_Init(); //初始化与LED连接的硬件接口 TIM3_Int_Init(); //10Khz的计数频率,计数到5000为500ms while(1) { LED0=!LED0; delay_ms(200); } }

主函数首先延时函数初始化、设置中断优先级分组2、初始化与LED连接的硬件接口、定时器3初始化。至此LED0就会每个0.5秒翻转一下。同时我们为了比较在while函数中让LED1灯0.2秒翻转一下做对比。现在我们来用keil仿真一下,看看是不是LED0是0.2ms翻转一下,LED1是0.5ms翻转一下。

软件仿真

1.配置keil仿真调试工具

2.打开调试, 进入调试界面后 ,打开logic analysis窗口,并设置PWM输出引脚

3.点击全速运行,观察示波器

原文作者:果果小师弟

原文标题:STM32第六章-TIM定时器详解

原文链接:https://mp.weixin.qq.com/s/6rHEp-dYb3iM_aUHjRZvrA

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
笑不活了,普京老是半夜坐飞机上热搜。网友:半夜凉快,机票五折

笑不活了,普京老是半夜坐飞机上热搜。网友:半夜凉快,机票五折

记录生活日常阿蜴
2024-06-20 22:15:30
4岁女孩被3只狗围住,狗主人叫嚣咬了就打疫苗,结果被暴打

4岁女孩被3只狗围住,狗主人叫嚣咬了就打疫苗,结果被暴打

飞花文史
2024-06-20 15:00:59
在岸、离岸人民币对美元汇率跌至去年11月中旬以来新低

在岸、离岸人民币对美元汇率跌至去年11月中旬以来新低

澎湃新闻
2024-06-20 10:04:30
为什么那么多人抵触戴头盔?网友:其实进ICU的大多数是戴头盔的

为什么那么多人抵触戴头盔?网友:其实进ICU的大多数是戴头盔的

有趣的羊驼
2024-06-20 18:24:06
焦点访谈丨机井打完电却难通  投资2400多万的高标准农田设施为何烂尾?

焦点访谈丨机井打完电却难通 投资2400多万的高标准农田设施为何烂尾?

央广网
2024-06-20 22:00:12
复旦打老师者已被北大医学院录取,特殊身份曝光,网友:不能原谅

复旦打老师者已被北大医学院录取,特殊身份曝光,网友:不能原谅

熙熙说教
2024-06-20 14:51:17
儿媳照顾50岁农村公公,酒后公公行夫妻之事,公公:儿媳经验丰富

儿媳照顾50岁农村公公,酒后公公行夫妻之事,公公:儿媳经验丰富

魅老八足球
2024-05-13 13:49:37
专家:对俄战争已然失败

专家:对俄战争已然失败

俄罗斯卫星通讯社
2024-01-22 15:13:11
说说北京“豁免姐”事件:京州不允许有这么牛B的人存在

说说北京“豁免姐”事件:京州不允许有这么牛B的人存在

林孤小姐
2024-06-20 12:07:44
女生私处「小花瓣」长什么样,才正常?

女生私处「小花瓣」长什么样,才正常?

喜马拉雅主播暮霭
2024-06-09 13:13:48
贾静雯为女儿庆生,19岁梧桐妹变化超大,化浓妆戴美瞳造型前卫

贾静雯为女儿庆生,19岁梧桐妹变化超大,化浓妆戴美瞳造型前卫

扒虾侃娱
2024-06-19 21:12:14
欧盟汽车关税大逆转24小时:多国齐齐反对,法国总统力挺遭围攻!

欧盟汽车关税大逆转24小时:多国齐齐反对,法国总统力挺遭围攻!

匹夫来搞笑
2024-06-20 16:10:09
“人造天才”姜萍,一个非常拙劣的谎言

“人造天才”姜萍,一个非常拙劣的谎言

雪千岚
2024-06-17 21:40:36
1秒从出线到出局❓斯洛文尼亚若胜基本出线 现在需末轮死磕英格兰

1秒从出线到出局❓斯洛文尼亚若胜基本出线 现在需末轮死磕英格兰

直播吧
2024-06-20 23:25:18
外媒污蔑中国在英军帽徽中装跟踪器,知名大V:幸亏我们不和傻子生活在一个国家!

外媒污蔑中国在英军帽徽中装跟踪器,知名大V:幸亏我们不和傻子生活在一个国家!

不掉线电波
2024-06-20 12:01:30
“跌落神坛”的5大保健品,实际根本没有什么用,你吃过哪几种?

“跌落神坛”的5大保健品,实际根本没有什么用,你吃过哪几种?

梦录的西方史话V
2024-06-19 18:05:56
Manner咖啡店员情绪失控向顾客泼咖啡粉,品牌方回应了

Manner咖啡店员情绪失控向顾客泼咖啡粉,品牌方回应了

南方都市报
2024-06-20 16:48:07
股汇双杀!在岸、离岸人民币汇率跌至去年11月新低,港、A股全线飘绿

股汇双杀!在岸、离岸人民币汇率跌至去年11月新低,港、A股全线飘绿

格隆汇
2024-06-20 12:48:04
创新低,人民币闷声下跌!

创新低,人民币闷声下跌!

暴财经
2024-06-20 11:56:34
重量级转会!恭喜皇马,4000万锁未来10年基石,巴黎1亿报价被拒

重量级转会!恭喜皇马,4000万锁未来10年基石,巴黎1亿报价被拒

小金体坛大视野
2024-06-20 19:58:34
2024-06-21 04:16:49
阚阚
阚阚
加油,新的一天会更好!
1469文章数 3291关注度
往期回顾 全部

头条要闻

欧洲杯:凯恩破门 英格兰1-1丹麦

头条要闻

欧洲杯:凯恩破门 英格兰1-1丹麦

体育要闻

千夫所指的关系户 成了拯救葡萄牙的英雄

娱乐要闻

叶舒华参加柯震东生日聚会,五毒俱全

财经要闻

楼市新“王炸”!释放何信号?

科技要闻

小米SU7流量泼天,富贵却被蔚来接住了

汽车要闻

售价11.79-14.39万元 新一代哈弗H6正式上市

态度原创

本地
时尚
房产
公开课
军事航空

本地新闻

2024·合肥印象|用崭新视角对话城市发展

当男人不耍帅时,就是最帅的时候(穿衣篇)

房产要闻

海棠湾!一所重量级国际学校真的来了!

公开课

近视只是视力差?小心并发症

军事要闻

以军发言人公开表示"哈马斯无法被消灭" 以政府反驳

无障碍浏览 进入关怀版