05_STM32F4通用定时器详细讲解
05_STM32F4通用定时器详细讲解精编版

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); ///使能TIM3时钟
2时钟Timer3的配置。
TIM_TimeBaseInitStructure.TIM_Period = arr;//自动重装载值
Timer3是一个16位的定时器,有四个独立通道,分别对应着PA6 PA7 PB0 PB1
主要功能是:1输入捕获——测量脉冲长度。
2输出波形——PWM输出和单脉冲输出。
Timer3有4个时钟源:
1:内部时钟(CK_INT),来自RCC的TIMxCLK
2:外部时钟模式1:外部输入TI1FP1与TI2FP2
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化TIM3
3使能中断
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允许定时器3更新中断。
4打开Timer3。
TIM_Cmd(TIM3,ENABLE); //使能定时器3
3:捕获/比较选择
8TIM3捕获/比较模式寄存器2 (TIM3_CCMR2)
9TIM3捕获/比较使能寄存器(TIM3_CCER)
1:上升沿触发or下降沿触发
2:捕获/比较输出使能
10 TIM3计数器(TIM3_CNT)
11 TIM3预分频器(TIM3_PSC)
计数器时钟频率CK_CNT等于fCK_PSC/ (PSC[15:0] + 1)。
1TIM3控制寄存器1 (TIM3_CR1)
作用:1使能自动重载TIM3_ARR
(待分)05STM32F4通用定时器详细讲解

系列共有个定时器,功能很强大。
个定时器分别为:个高级定时器:和个通用定时器:和个基本定时器:和本篇欲以通用定时器为例,详细介绍定时器的各个方面,并对其功能做彻底的探讨。
是一个位的定时器,有四个独立通道,分别对应着主要功能是:输入捕获——测量脉冲长度。
输出波形——输出和单脉冲输出。
有个时钟源::内部时钟(),来自的:外部时钟模式:外部输入与:外部时钟模式:外部触发输入,仅适用于、、,,对应着引脚:内部触发输入:一个定时器触发另一个定时器。
时钟源可以通过相关位进行设置。
这里我们使用内部时钟。
(最高)定时器挂在高速外设时钟或低速外设时钟上,时钟不超过内部高速时钟,故当不为时,定时器时钟为其倍,当为时,为了不超过,定时器时钟等于。
例如:我们一般配置系统时钟为,内部高速时钟,欲分频为,(因为最高时钟为),那么挂在总线上的时钟为。
《中文参考手册》的页列出与通用定时器相关的寄存器一共个,以下列出与相关的寄存器及重要寄存器的简单介绍。
控制寄存器()作用:使能自动重载定时器的计数器递增或递减计数。
事件更新。
计数器使能控制寄存器()从模式控制寄存器()中断使能寄存器()作用::使能事件更新中断:使能捕获比较中断状态寄存器():事件更新中断标志:捕获比较中断标志事件生成寄存器()捕获比较模式寄存器():输出比较模式:输出比较预装载使能,即使能后可以随时改变捕获比较寄存器()的值:捕获比较选择捕获比较模式寄存器()捕获比较使能寄存器():上升沿触发下降沿触发:捕获比较输出使能计数器()预分频器()计数器时钟频率等于([] )。
自动重载寄存器()当自动重载值为空时,计数器不工作难道说每次事件都必须装载重载值?捕获比较寄存器()输出时:是捕获比较寄存器的预装载值,由的位使能。
输入时:为上一个输入捕获事件()发生时的计数器值。
捕获比较寄存器()捕获比较寄存器()捕获比较寄存器()用来做定时中断与之相关的时基单元寄存器有计数器()预分频器()自动重载寄存器()原理:这里以向上计数为例,即计数器向上计数,当达到所设定的值时,归零重新计数,若使能了更新中断,则在归零时,进入中断。
STM32通用定时器原理

STM32通⽤定时器原理/************************************************************************************************转载⾃:⼀、STM32通⽤定时器原理STM32 系列的CPU,有多达8个定时器,其中TIM1和TIM8是能够产⽣三对PWM互补输出的⾼级定时器,常⽤于三相电机的驱动,它们的时钟由APB2的输出产⽣。
其它6个为普通定时器,时钟由APB1的输出产⽣。
下图是STM32参考⼿册上时钟分配图中,有关定时器时钟部分的截图:从图中可以看出,定时器的时钟不是直接来⾃APB1或APB2,⽽是来⾃于输⼊为APB1或APB2的⼀个倍频器,图中的蓝⾊部分。
下⾯以通⽤定时器2的时钟说明这个倍频器的作⽤:当APB1的预分频系数为1时,这个倍频器不起作⽤,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作⽤,定时器的时钟频率等于APB1的频率两倍。
可能有同学还是有点不理解,OK,我们举⼀个例⼦说明。
假定AHB=36MHz,因为APB1允许的最⼤频率为36MHz,所以APB1的预分频系数可以取任意数值;当预分频系数=1时,APB1=36MHz,TIM2~7的时钟频率=36MHz(倍频器不起作⽤);当预分频系数=2时,APB1=18MHz,在倍频器的作⽤下,TIM2~7的时钟频率=36MHz。
有⼈会问,既然需要TIM2~7的时钟频率=36MHz,为什么不直接取APB1的预分频系数=1?答案是:APB1不但要为TIM2~7提供时钟,⽽且还要为其它外设提供时钟;设置这个倍频器可以在保证其它外设使⽤较低时钟频率时。
Stm32外设⽤户⼿册,如图:再举个例⼦:当AHB=72MHz时,APB1的预分频系数必须⼤于2,因为APB1的最⼤频率只能为36MHz。
如果APB1的预分频系数=2,则因为这个倍频器,TIM2~7仍然能够得到72MHz的时钟频率。
STM32通用定时器

STM32通用定时器一、定时器的基础知识三种STM32定时器区别通用定时器功能特点描述:STM3 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定时器功能特点包括:位于低速的APB1总线上(APB1)16 位向上、向下、向上/向下(中心对齐)计数模式,自动装载计数器(TIMx_CNT)。
16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数 为 1~65535 之间的任意数值。
4 个独立通道(TIMx_CH1~4),这些通道可以用来作为:①输入捕获②输出比较③ PWM 生成(边缘或中间对齐模式)④单脉冲模式输出可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外一个定时器)的同步电路。
如下事件发生时产生中断/DMA(6个独立的IRQ/DMA请求生成器):①更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)②触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)③输入捕获④输出比较⑤支持针对定位的增量(正交)编码器和霍尔传感器电路⑥触发输入作为外部时钟或者按周期的电流管理STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。
使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。
STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。
定时器框图:倍频得到),外部时钟引脚,可以通过查看数据手册。
也可以是TIMx_CHn,此时主要是实现捕获功能;框图中间的时基单元框图下面左右两部分分别是捕获输入模式和比较输出模式的框图,两者用的是同一引脚,不能同时使用。
二、定时器相关的寄存器和寄存器操作库函数时钟选择, 计数器时钟可以由下列时钟源提供:时钟选择①内部时钟(CK_INT)②外部时钟模式1:外部输入脚(TIx)③外部时钟模式2:外部触发输入(ETR)④内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。
STM32学习笔记4通用定时器基本定时功能

STM32学习笔记(4):通用定时器基本定时功能1.STM32的Timer简介STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。
其中系统嘀嗒定时器是前文中所描述的SysTick,看门狗定时器以后再详细研究。
今天主要是研究剩下的8个定时器。
其中TIM1和TIM8是能够产生3对PWM互补输出的高级定时器,常用于三相电机的驱动,时钟由APB2的输出产生。
TIM2-TIM5是普通定时器,TIM6和TIM7是基本定时器,其时钟由APB1输出产生。
由于STM32的TIMER功能太复杂了,所以只能一点一点的学习。
因此今天就从最简单的开始学习起,也就是TIM2-TIM5普通定时器的定时功能。
2.普通定时器TIM2-TIM52.1时钟来源计数器时钟可以由下列时钟源提供:·内部时钟(CK_INT)(TIx):外部输入脚1外部时钟模式·.·外部时钟模式2:外部触发输入(ETR)·内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。
由于今天的学习是最基本的定时功能,所以采用内部时钟。
TIM2-TIM5的时钟不是直接来自于APB1,而是来自于输入为APB1的一个倍频器。
这个倍频器的作用是:当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其他数值时(即预分频系数为2、4、8或16),这个倍频器起作用,定时器的时钟频率等于APB1的频率的2倍。
APB1的分频在STM32_SYSTICK的学习笔记中有详细描述。
通过倍频器给定时器时钟的好处是:APB1不但要给TIM2-TIM5提供时钟,还要为其他的外设提供时钟;设置这个倍频器可以保证在其他外设使用较低时钟频率时,TIM2-TIM5仍然可以得到较高的时钟频率。
STMF通用定时器详细讲解

S T M F通用定时器详细讲解Standardization of sany group #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#STM32F4系列共有14个定时器,功能很强大。
14个定时器分别为:2个高级定时器:Timer1和Timer810个通用定时器:Timer2~timer5 和 timer9~timer142个基本定时器: timer6和timer7本篇欲以通用定时器timer3为例,详细介绍定时器的各个方面,并对其PWM功能做彻底的探讨。
Timer3是一个16位的定时器,有四个独立通道,分别对应着PA6 PA7 PB0 PB1主要功能是:1输入捕获——测量脉冲长度。
2 输出波形——PWM输出和单脉冲输出。
Timer3有4个时钟源:1:内部时钟(CK_INT),来自RCC的TIMxCLK2:外部时钟模式1:外部输入TI1FP1与TI2FP23:外部时钟模式2:外部触发输入TIMx_ETR,仅适用于TIM2、TIM3、TIM4,TIM3,对应着PD2引脚4:内部触发输入:一个定时器触发另一个定时器。
时钟源可以通过TIMx_SMCR相关位进行设置。
这里我们使用内部时钟。
定时器挂在高速外设时钟APB1或低速外设时钟APB2上,时钟不超过内部高速时钟HCLK ,故当APBx_Prescaler 不为1时,定时器时钟为其2倍,当为1时,为了不超过HCLK ,定时器时钟等于HCLK 。
例如:我们一般配置系统时钟SYSCLK 为168MHz ,内部高速时钟 AHB=168Mhz ,APB1欲分频为4,(因为APB1最高时钟为42Mhz ),那么挂在APB1总线上的timer3时钟为84Mhz 。
《STM32F4xx 中文参考手册》的424~443页列出与通用定时器相关的寄存器一共20个,以下列出与Timer3相关的寄存器及重要寄存器的简单介绍。
1 TIM3 控制寄存器 1 (TIM3_CR1)作用:1使能自动重载TIM3_ARR2定时器的计数器递增或递减计数。
STM32通用定时器的基本特性、操作模式及相关应用介绍

STM32 通用定时器的基本特性、操作模式及相关应
用介绍
众所周知,STM32 的定时器功能非常庞大复杂,应用也非常普遍。
目前STM32 家族已有10 条产品线,其中都内置多个定时器外设。
尽管STM32 各系列的定时器无论从数目上还是特性上可能略有差异,但它们整体上还是具有一些公共特性与相同的操作模式。
ST 官方有一篇针对STM32 通用定时器的应用笔记,编号为AN4776,内容较为详尽丰富。
该笔记主要对STM32 通用定时器的基本特性、操作模式及相关应用做了细致清晰的描述。
既有对基本概念的详细讲解,又有相关实际应用的原理介绍,同时还配有相关应用的参考工程代码。
该笔记值得一读。
这里简单介绍下AN4776 应用笔记的基本内容框架。
该笔记主要分两部分。
第一部分主要是对STM32 定时器的基本组成及特性的描述和讲解。
第二部分对STM32 定时器的一些特定应用做了专门描述,包括基本工作原理和相关应用代码的介绍。
STM32学习笔记(4)通用定时器基本定时功能

STM32学习笔记(4)通⽤定时器基本定时功能STM32学习笔记(4):通⽤定时器基本定时功能1.STM32的Timer简介STM32中⼀共有11个定时器,其中2个⾼级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。
其中系统嘀嗒定时器是前⽂中所描述的SysTick,看门狗定时器以后再详细研究。
今天主要是研究剩下的8个定时器。
其中TIM1和TIM8是能够产⽣3对PWM互补输出的⾼级定时器,常⽤于三相电机的驱动,时钟由APB2的输出产⽣。
TIM2-TIM5是普通定时器,TIM6和TIM7是基本定时器,其时钟由APB1输出产⽣。
由于STM32的TIMER功能太复杂了,所以只能⼀点⼀点的学习。
因此今天就从最简单的开始学习起,也就是TIM2-TIM5普通定时器的定时功能。
2.普通定时器TIM2-TIM52.1时钟来源计数器时钟可以由下列时钟源提供:·内部时钟(CK_INT)·外部时钟模式1:外部输⼊脚(TIx)·外部时钟模式2:外部触发输⼊(ETR)·内部触发输⼊(ITRx):使⽤⼀个定时器作为另⼀个定时器的预分频器,如可以配置⼀个定时器Timer1⽽作为另⼀个定时器Timer2的预分频器。
由于今天的学习是最基本的定时功能,所以采⽤内部时钟。
TIM2-TIM5的时钟不是直接来⾃于APB1,⽽是来⾃于输⼊为APB1的⼀个倍频器。
这个倍频器的作⽤是:当APB1的预分频系数为1时,这个倍频器不起作⽤,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其他数值时(即预分频系数为2、4、8或16),这个倍频器起作⽤,定时器的时钟频率等于APB1的频率的2倍。
APB1的分频在STM32_SYSTICK的学习笔记中有详细描述。
通过倍频器给定时器时钟的好处是:APB1不但要给TIM2-TIM5提供时钟,还要为其他的外设提供时钟;设置这个倍频器可以保证在其他外设使⽤较低时钟频率时,TIM2-TIM5仍然可以得到较⾼的时钟频率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM32F4系列共有14个定时器,功能很强大。
14个定时器分别为:
2个高级定时器:Timer1和Timer8
10个通用定时器:Timer2~timer5 和 timer9~timer14
2个基本定时器: timer6和timer7
本篇欲以通用定时器timer3为例,详细介绍定时器的各个方面,并对其PWM 功能做彻底的探讨。
Timer3是一个16位的定时器,有四个独立通道,分别对应着PA6 PA7 PB0 PB1 主要功能是:1输入捕获——测量脉冲长度。
2 输出波形——PWM 输出和单脉冲输出。
Timer3有4个时钟源:
1:内部时钟(CK_INT ),来自RCC 的TIMxCLK
2:外部时钟模式1:外部输入TI1FP1与TI2FP2
3:外部时钟模式2:外部触发输入TIMx_ETR ,仅适用于TIM2、TIM3、TIM4,TIM3,对应
着PD2引脚
4:内部触发输入:一个定时器触发另一个定时器。
时钟源可以通过TIMx_SMCR 相关位进行设置。
这里我们使用内部时钟。
定时器挂在高速外设时钟APB1或低速外设时钟APB2上,时钟不超过内部高速时钟HCLK ,故当APBx_Prescaler 不为1时,定时器时钟为其2倍,当为1时,为了不超过HCLK ,定时器时钟等于HCLK 。
例如:我们一般配置系统时钟SYSCLK 为168MHz ,内部高速时钟 AHB=168Mhz ,APB1欲分频为4,(因为APB1最高时钟为42Mhz ),那么挂在APB1总线上的timer3时钟为84Mhz 。
《STM32F4xx 中文参考手册》的424~443页列出与通用定时器相关的寄存器一共20个, 以下列出与Timer3相关的寄存器及重要寄存器的简单介绍。
1 TIM3 控制寄存器 1 (TIM3_CR1)
SYSCLK(最高
AHB_Prescaler APBx_Prescaler
作用:1使能自动重载TIM3_ARR
2定时器的计数器递增或递减计数。
3 事件更新。
4 计数器使能
2 TIM
3 控制寄存器2 (TIM3_CR2)
3 TIM3 从模式控制寄存器(TIM3_SMCR)
4 TIM3 DMA/中断使能寄存器(TIM3_DIER)
作用:1:使能事件更新中断
2:使能捕获/比较中断
5 TIM3 状态寄存器(TIM3_SR)
1:事件更新中断标志
2:捕获/比较中断标志
6 TIM3 事件生成寄存器(TIM3_EGR)
7 TIM3 捕获/比较模式寄存器1 (TIM3_CCMR1)
1:输出比较模式
2:输出比较预装载使能,即使能后可以随时改变TIM3 捕获/比较寄存器1
(TIM3_CCR1)的值
3:捕获/比较选择
8 TIM3 捕获/比较模式寄存器2 (TIM3_CCMR2)
9 TIM3 捕获/比较使能寄存器(TIM3_CCER)
1:上升沿触发or下降沿触发
2:捕获/比较输出使能
10 TIM3 计数器(TIM3_CNT)
11 TIM3 预分频器(TIM3_PSC)
计数器时钟频率CK_CNT 等于f CK_PSC / (PSC[15:0] + 1)。
12 TIM3 自动重载寄存器(TIM3_ARR)
当自动重载值为空时,计数器不工作
难道说每次事件都必须装载重载值?
13 TIM3 捕获/比较寄存器1 (TIM3_CCR1)
输出时:CCR1是捕获/比较寄存器的预装载值,由TIM3_CCMR的OC1PE位使能。
输入时:CCR1为上一个输入捕获事件(IC1)发生时的计数器值。
14 TIM3 捕获/比较寄存器2 (TIM3_CCR2)
15 TIM3 捕获/比较寄存器3 (TIM3_CCR3)
16 TIM3 捕获/比较寄存器4 (TIM3_CCR4)
1 Timer3用来做定时中断
与之相关的时基单元寄存器有
10 TIM3 计数器(TIM3_CNT)
11 TIM3 预分频器(TIM3_PSC)
12 TIM3 自动重载寄存器(TIM3_ARR)
原理:
这里以向上计数为例,即计数器TIM3_CNT向上计数,当达到TIM3_ARR所设定的值时,归零重新计数,若使能了更新中断,则在TIM3_CNT归零时,进入中断。
进入中断的时间为(TIM3_ARR+1)个计时器周期
而计时器单元时钟是由定时器时钟分频得到,每(CK_PSC+1)个定时器周期计数一次。
定时器时钟上文已经讲了,由于Timer3挂在APB1总线上
故Timer3进入中断的周期为(CK_PSC+1)* (TIM3_ARR+1)/84000000秒
频率为84000000/[(CK_PSC+1)* (TIM3_ARR+1)] Hz
利用官方库函数实现每500ms进入中断,改变LED灯的电平,程序如下
1 打开时钟,Timer3挂在APB1上,所以命令开启时钟。
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); ///使能TIM3时钟
2 时钟Timer3的配置。
TIM_TimeBaseInitStructure.TIM_Period = arr; //自动重装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //定时器分频
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化TIM3
3 使能中断
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允许定时器3更新中断。
4 打开Timer3。
TIM_Cmd(TIM3,ENABLE); //使能定时器3
5 配置中断。
6 中断服务函数编写。
故可见STM32的初始化函数都离不开以下几步
1 打开设备时钟。
2 配置参数。
3 打开设备。
设备需配置后再打开。
如果需要配置中断,那么则需要编写中断服务函数。
完整程序如下
void TIM3_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //使能TIM3时钟
TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //定时器分频
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数TIM_TimeBaseInitStructure.TIM_Period = arr; //自动装载值
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化TIM3
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允许定时器3更新中断
TIM_Cmd(TIM3,ENABLE); //使能定时器
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //定时器中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/Timer3中断服务函数
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)/ /溢出中断
{
GPIO_ToggleBits(GPIO_LED ,DS1_PIN); //LED灯电平翻转}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志位
}
然后main()函数中TIM3_Int_Init(5000-1,8400-1);即可
可以计算进入中断的频率为2Hz即LED灯每500ms亮一次,LED周期为1Hz。