STM32通用定时器_15-1-6

合集下载

STM32定时器配置(TIM1、TIM2、TIM3、TIM4、TIM5、TIM8)高级定时。。。

STM32定时器配置(TIM1、TIM2、TIM3、TIM4、TIM5、TIM8)高级定时。。。

STM32定时器配置(TIM1、TIM2、TIM3、TIM4、TIM5、TIM8)⾼级定时。

⽂章结构:——> ⼀、定时器基本介绍——> ⼆、普通定时器详细介绍TIM2-TIM5——> 三、定时器代码实例⼀、定时器基本介绍之前有⽤过野⽕的学习板上⾯讲解很详细,所以直接上野⽕官⽅的资料吧,作为学习参考笔记发出来⼆、普通定时器详细介绍TIM2-TIM52.1 时钟来源计数器时钟可以由下列时钟源提供:·内部时钟(CK_INT)·外部时钟模式1:外部输⼊脚(TIx)·外部时钟模式2:外部触发输⼊(ETR)·内部触发输⼊(ITRx):使⽤⼀个定时器作为另⼀个定时器的预分频器,如可以配置⼀个定时器Timer1⽽作为另⼀个定时器Timer2的预分频器。

由于今天的学习是最基本的定时功能,所以采⽤内部时钟。

TIM2-TIM5的时钟不是直接来⾃于APB1,⽽是来⾃于输⼊为APB1的⼀个倍频器。

这个倍频器的作⽤是:当APB1的预分频系数为1时,这个倍频器不起作⽤,定时器的时钟频率等于APB1的频率(36MHZ);当APB1的预分频系数为其他数值时(即预分频系数为2、4、8或16),这个倍频器起作⽤,定时器的时钟频率等于APB1的频率的2倍。

{假如APB1预分频为2(变成36MHZ),则定时器TIM2-5的时钟倍频器起作⽤,将变成2倍的APB1(2x36MHZ)将为72MHZ给定时器提供时钟脉冲。

⼀般APB1和APB2的RCC时钟配置放在初始化函数中例如下⾯的void RCC_Configuration(void)配置函数所⽰,将APB1进⾏2分频,导致TIM2时钟变为72MHZ输⼊。

如果是1分频则会是36MHZ输⼊,如果4分频:CKINT=72MHZ/4x2=36MHZ; 8分频:CKINT=72MHZ/8x2=18MHZ;16分频:CKINT=72MHZ/16x2=9MHZ}1//系统时钟初始化配置2void RCC_Configuration(void)3 {4//定义错误状态变量5 ErrorStatus HSEStartUpStatus;6//将RCC寄存器重新设置为默认值7 RCC_DeInit();8//打开外部⾼速时钟晶振9 RCC_HSEConfig(RCC_HSE_ON);10//等待外部⾼速时钟晶振⼯作11 HSEStartUpStatus = RCC_WaitForHSEStartUp();12if(HSEStartUpStatus == SUCCESS)13 {14//设置AHB时钟(HCLK)为系统时钟15 RCC_HCLKConfig(RCC_SYSCLK_Div1);16//设置⾼速AHB时钟(APB2)为HCLK时钟17 RCC_PCLK2Config(RCC_HCLK_Div1);18 //设置低速AHB时钟(APB1)为HCLK的2分频(TIM2-TIM5输⼊TIMxCLK频率将为72MHZ/2x2=72MHZ输⼊)19 RCC_PCLK1Config(RCC_HCLK_Div2);20//设置FLASH代码延时21 FLASH_SetLatency(FLASH_Latency_2);22//使能预取指缓存23 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);24//设置PLL时钟,为HSE的9倍频 8MHz * 9 = 72MHz25 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);26//使能PLL27 RCC_PLLCmd(ENABLE);28//等待PLL准备就绪29while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);30//设置PLL为系统时钟源31 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);32//判断PLL是否是系统时钟33while(RCC_GetSYSCLKSource() != 0x08);34 }35//允许TIM2的时钟36 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);37//允许GPIO的时钟38 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);39 }APB1的分频在STM32_SYSTICK的学习笔记中有详细描述。

STM32之TIM通用定时器

STM32之TIM通用定时器

STM32之TIM通⽤定时器本⽂介绍如何使⽤STM32标准外设库配置并使⽤定时器,定时器就是设置⼀个计时器,待计时时间到之后产⽣⼀个中断,程序接收到中断之后可以执⾏特定的程序,跟现实中的闹钟功能类似。

与延时功能不同,定时器计时过程中程序可以执⾏其他程序。

最简单直观的应⽤为定时翻转指定IO引脚。

本例程使⽤通⽤定时器TIM3,每100ms翻转GPIOB的Pin5输出,如果该引脚外接有LED灯,可以看到LED灯周期性的闪烁。

STM32F103VE系列共有8个定时器,分为基本定时器、通⽤定时器和⾼级定时器,其中通⽤定时器包括TIM2/3/4/5共4个,如果⼀个定时器不够⽤,可以启动其他⼏个定时器。

本⽂适合对单⽚机及C语⾔有⼀定基础的开发⼈员阅读,MCU使⽤STM32F103VE系列。

TIM通⽤定时器分为两部分,初始化和控制。

1. 初始化分两步:通⽤中断、TIM。

1.1. 通⽤中断:优先级分组、中断源、优先级、使能优先级分组:设定合适的优先级分组中断源:选择指定的TIM中断源:TIM3_IRQn优先级:设定合适的优先级使能:调⽤库函数即可1.2. TIM:时钟、预分频器、定时器周期、分频因⼦、计数模式、初始化定时器、开启定时器中断、使能计数器。

结构体:typedef struct{uint16_t TIM_Prescaler;uint16_t TIM_CounterMode;uint16_t TIM_Period;uint16_t TIM_ClockDivision;uint8_t TIM_RepetitionCounter;} TIM_TimeBaseInitTypeDef;时钟:需要使能定时器时钟//开启定时器时钟,即内部时钟CK_INT=72MRCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);预分频器:默认定时器时钟频率为72M,那么预分频器设置为71,那么⼀次计数为1us//时钟预分频数为71,则计数器计数⼀次时间为1usTIM_TimeBaseStructure.TIM_Prescaler = 71;定时器周期:设置为999,那么产⽣⼀次定时器中断的时间为1ms//⾃动重装载寄存器为999,则产⽣⼀次中断时间为1msTIM_TimeBaseStructure.TIM_Period = 1000 - 1;计数模式:⼀般选择向上计数模式// 计数器计数模式,选择向上计数模式TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;时钟分频因⼦:⼀般选择1分频// 时钟分频因⼦,选择1分频TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;重复计数器的值:仅对⾼级定时器有效,⽆需设置初始化定时器:调⽤库函数即可//初始化定时器TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);开启定时器中断//开启计数器中断TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);使能计数器//使能计数器TIM_Cmd(TIM3, ENABLE);2. 处理2.1. 中断服务函数定时器TIM3的中断服务函数名称为TIM3_IRQHandler ()。

stm32定时器

stm32定时器

STM32定时器定时器功能简介区别于SysTick一般只用于系统时钟的计时,STM32的定时器外设功能非常强大。

STM32一共有8个都为16位的定时器。

其中TIM6、TIM7是基本定时器;TIM 2、TIM3、TIM4、TIM5是通用定时器;TIM1和TIM8是高级定时器。

这些定时器使STM32具有定时、信号的频率测量、信号的PWM测量、PWM输出、三相6步电机控制及编码器接口等功能,都是专门为工控领域量身定做的。

定时器工作分析基本定时器基本定时器TIM6和TIM7只具备最基本的定时功能,就是累加的时钟脉冲数超过预定值时,能触发中断或触发DMA请求。

这两个基本定时器使用的时钟源都是TIMxCLK,时钟源经过PSC预分频器输入至脉冲计数器TIMx_CNT,基本定时器只能工作在向上计数模式,在重载寄存器TIMx_ARR中保存的是定时器的溢出值。

工作时,脉冲计数器TIMx_CNT由时钟触发进行计数,当TIMx_CNT的计数值X等于重载寄存器TIMx_ARR中保存的数值N时,产生溢出事件,可触发中断或DMA请求。

然后TIMx_CNT的值重新被置为0,重新向上计数。

通用定时器相比之下,通用定时器TIM2~TIM5就比基本定时器复杂得多了。

除了基本的定时,它主要用在测量输入脉冲的频率、脉冲宽与输出PWM脉冲的场合,还具有编码器的接口。

通用定时器的基本计时功能与基本定时器的工作方式是一样的,同样把时钟源经过预分频器输出到脉冲计数器TIMx_CNT累加,溢出时就产生中断或DMA请求。

而通用定时器比基本定时器多出的强大功能,就是因为通用定时器多出了一种寄存器----捕获/比较寄存器TIMx_CRR(capture/compareregister)它在输入时被用于捕获(存储)输入脉冲在电平发生翻转时脉冲计数器TI Mx_CNT的当前计数值,从而实现脉冲的频率测量;在输出时被用来存储一个脉冲数值,把这个数值用于与脉冲计数器TIMx_CNT的当前计数值进行比较,根据比较结果进行不同的电平输出定时器的时钟源从时钟源方面来说,通用定时器比基本定时器多了一个选择,它可以使用外部脉冲作为定时器的时钟源。

第六章 STM32 定时器的使用 《基于ARM的单片机应用及实践--STM32案例式教学》课件

第六章 STM32 定时器的使用 《基于ARM的单片机应用及实践--STM32案例式教学》课件

第六章 STM32 定时器的使用
AHB预分频 /1,2,…,512
APB1预分频 /1,2,4,8,16
最大36MHz
PCLK1 至APB1外设
20个外设时钟使能位
TIM2,3,4,5,6,7 如果APB1预分频=1, 则乘1输出,否则乘2输出
6个外设时钟使能位
TIMXCLK 至TIM2~7
APB2预分频 /1,2,4,8,16
第六章 STM32 定时器的使用
PWM模式 脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器 确定频率、由TIMx_CCRx寄存器确定占空比的信号。 在TIMx_CCMRx寄存器中的OCxM位写入‘110’(PWM 模式1)或‘111’(PWM模式2),能够独立地设置每个 OCx输出通道产生一路PWM。必须设置TIMx_CCMRx 寄存器OCxPE位以使能相应的预装载寄存器, 最后要设置TIMx_CR1寄存器的ARPE位,(在向上计数 或中心对称模式中)使能自动重装载的预装载寄存器。
这个倍频器的作用:当APB1的预分频系数为1时,倍 频器不起作用,定时器的时钟频率等于APB1的频率; 当APB1的预分频系数为其它数值(即预分频系数为2、4 、8或16)时,这个倍频器起作用,定时器的时钟频率 等于APB1的频率两倍。
第六章 STM32 定时器的使用 下面举一个例子说明。假定AHB=36MHz,因为APB1 允许的最大频率为36MHz,所以APB1的预分频系数可 以取任意数值;当预分频系数=1时,APB1=36MHz, TIM2~7的时钟频率=36MHz(倍频器不起作用);
第六章 STM32 定时器的使用
3)设置TIM3_DIER允许更新中断 因为我们要使用TIM3的更新中断,所以设置DIER 的UIE位,并使能触发中断。

第六章-STM32-定时器的使用-《基于ARM的单片机应用及实践--STM32案例式教学》课件

第六章-STM32-定时器的使用-《基于ARM的单片机应用及实践--STM32案例式教学》课件

第六章 STM32 定时器的使用 通用定时器配置步骤
1)TIM3时钟使能 这里我们通过APB1ENR的第1位来设置TIM3的时钟,因为 Stm32_Clock_Init函数里面把APB1的分频设置为2了, 所以我们的TIM3时钟就是APB1时钟的2倍,等于系统时 钟(72M)。 2)设置TIM3_ARR和TIM3_PSC的值 通过这两个寄存器,设置自动重装的值及分频系数。这 两个参数加上时钟频率就决定了定时器的溢出时间。
计数器寄存器:TIMx_CNT 预分频器寄存器:TIMx_PSC 自动装载寄存器:TIMx_ARR
第六章 STM32 定时器的使用 通用寄存器时基单元 1)计数器寄存器:TIMx_CNT
16位的计数器,设定值从1~65535
第六章 STM32 定时器的使用 计数器模式 向上计数模式:计数器从0计数到设定的数值,然后 重新从0开始计数并且产生一个计数器溢出事件。
在定时器配置完了之后,因为要产生中断,必不可少的 要设置NVIC相关寄存器,以使能TIM3中断。
6)编写中断服务函数 编写定时器中断服务函数,通过该函数处理定时器 产生的相关中断。中断产生后,通过状态寄存器的 值来判断此次产生的中断属于什么类型。然后执行 相关的操作。
第六章 STM32 定时器的使用 通用寄存器时基单元
第六章 STM32 定时器的使用
2)预分频器寄存器:TIMx_PSC 预分频器可以讲计数器的时钟频率按1到65536之间的任 意值分频,它是一个16位寄存器。 这个寄存器带有缓冲区,它能够在工作时被改变。新的 预分频器参数在下一次更新事件到来时被采。
第六章 STM32 定时器的使用 预分频器寄存器在事件更新时采用
定时器的工作频率计算公式为 CK_CNT=定时器时钟/(TIMx_PSC+1) 其中CK_CNT表示定时器工作频率 TIMx_PSC表示分频系数

STM32F103ZET6通用定时器

STM32F103ZET6通用定时器

STM32F103ZET6通⽤定时器1、通⽤定时器简介  通⽤定时器是由⼀个可编程预分频器驱动的16位⾃动装载计数器构成。

通⽤定时器可以应⽤于多种场合,如测量输⼊信号的脉冲长度(输⼊捕获)或者产⽣输出波形(输出⽐较和PWM)。

使⽤通⽤定时器的预分频器和RCC时钟控制器的预分频器,脉冲长度和输出波形周期可以在⼏个微秒到⼏个毫秒间调整。

STM32内有多个通⽤定时器,每个通⽤定时器都是完全独⽴的,没有互相共享任何资源。

通⽤定时器的主要功能包括: 16位向上、向下、向上/向下⾃动装载计数器。

16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值。

4个独⽴通道可以实现4路:输⼊捕获、输出⽐较、PWM输出、单脉冲模式输出。

使⽤外部信号控制定时器和定时器互连的同步电路。

⽀持针对定位的增量(正交)编码器和霍尔传感器电路。

通⽤定时器框图如下:2、通⽤定时器的时基单元 通⽤定时器的时基单元主要由⼀个16位计数器和与其相关的⾃动装载寄存器。

这个计数器可以向上计数、向下计数或者向上向下双向计数。

通⽤定时器的计数器的时钟由预分频器分频得到,⾄于预分频器之前的时钟在时钟选择的时候回说到。

通⽤定时器的计数器、⾃动装载寄存器和预分频器寄存器可以由软件读写,在计数器运⾏时仍可以读写。

如下图红⾊框部分就是通⽤定时器的时基部分: 时基单元包含: CNT计数器(TIMx_CNT)。

PSC预分频器(TIMx_PSC)。

⾃动重装载寄存器(TIMx_ARR)。

CNT 计数器和⾃动重装载寄存器: TIMx_ARR寄存器是预先装载的,写或读TIMX_ARR寄存器将访问预装载寄存器。

通⽤定时器根据TIMx_CR1寄存器中的ARPE 位,来决定写⼊TIMx_ARR寄存器的值是⽴即⽣效还是要等到更新事件(溢出)后才⽣效。

在计数器运⾏的过程中,ARPE位的作⽤如下: 当ARPE = 0时,写⼊TIMx_ARR寄存器的值⽴即⽣效,即TIMx_CNT计数器的计数范围⽴马更新。

STM32通用定时器

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的预分频器。

STM32F4通用定时器详细讲解

STM32F4通用定时器详细讲解
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志位
}
然后main()函数中TIM3_Int_Init(5000-1,8400-1);即可
可以计算进入中断的频率为2Hz即LED灯每500ms现方式做保护处理对用户上传分享的文档内容本身不做任何修改或编辑并不能对任何下载内容负责
STM32F4系列共有14个定时器,功能很强大。14个定时器分别为:
2个高级定时器:Timer1和Timer8
10个通用定时器:Timer2~timer5和timer9~timer14
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。
TIMnitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

第八章 STM32定时器

第八章 STM32定时器
/*对C端口初始化,即0,1,2,3管脚输出0*/
GPIO_ResetBits(GPIOC,GPIO_Pin_0); GPIO_ResetBits(GPIOC,GPIO_Pin_1); GPIO_ResetBits(GPIOC,GPIO_Pin_2); GPIO_ResetBits(GPIOC,GPIO_Pin_3); }
TIM_Perscaler:用户设定的预分频系数, 其值范围从0~65535,为1999
8.7 TIM2应用实例概述
void Timer_Configuration(void) { /*定义TIM结构体变量*/ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_DeInit(TIM2); TIM_TimeBaseStructure.TIM_Period=35999; TIM_TimeBaseStructure.TIM_Prescaler=1999; TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); TIM_ClearFlag(TIM2,TIM_FLAG_Update); TIM_Cmd(TIM2,ENABLE);
8.7 TIM2应用实例概述
4.定时器的初始化
定时时间T的计算公式: T=(TIM_Period+1)*(TIM_Prescaler+1)/TIMxCLK =(35999+1)*(1999+1)/72MHz=1s

STM32系列TIM定时器整理

STM32系列TIM定时器整理

1、PWM输出模式TIM_Period配置是代表波形的周期,因此其数值一定要比输出配置中TIM_OCInitStructure.TIM_Pulse的数值大。

(如TIM_Period = 0x3E7则波形频率为TIMCLK/(0x3E7+1))且只要TIM_Period 不为零,则其TIMCLK为系统频率的一半。

TIM_Prescaler是在上述基础上再分频(如TIM_TimeBaseStructure.TIM_Prescaler = 0x2,以1中配置为例,则输出波形频率变为TIMCLK/(0x3E7+1)/(0x2+1))。

若此时TIM_OCInitStructure.TIM_Pulse = CCR1_V al;(例如CCR1_V al=15则占空比为:CCR1_V al/(TIM_Period+1))所以TIM_Prescaler之改变输出波形的周期,并不改变占空比。

2、TIM_OCMode_Toggle TIM输出比较触发模式此项功能是用来控制一个输出波形,或者指示一段给定的的时间已经到时。

在输出比较模式下,更新事件UEV对OCxREF和OCx输出没有影响。

即TIM_TimeBaseStructure.TIM_Period配置大小对输出波形的频率没有影响(但是TIM_Period的值一定要大于TIM_OCInitStructure.TIM_Pulse,否则还没来得及更新时间就产生中断,这样结果肯定就会错误)例如下面程序:vu16 CCR2_Val = 0x4000;TIM_TimeBaseStructure.TIM_Period = 0xFFF5;TIM_TimeBaseStructure.TIM_Prescaler = 0x02;TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);/* Output Compare Toggle Mode configuration: Channel1 */TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;TIM_OCInitStructure.TIM_Channel = TIM_Channel_1;TIM_OCInitStructure.TIM_Pulse = CCR1_Val;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;TIM_OCInit(TIM2, &TIM_OCInitStructure);TIM2 Configuration: 输出比较模式:TIM2CLK = 36 MHz, Prescaler = 0x2, 所以TIM2 counter clock = 12 MHzCC1 update rate (更新频率)= TIM2 counter clock / CCR1_Val = 366.2 Hz3、TIM输出比较时间模式在这种模式下TIM的计数时钟频率为TIM2CLK/TIM_PrescalerConfig,且TIMCLK同前面一样,只要TIM_Period 不为零,就是系统时钟的一半。

stm32编码器接口初始化及定时器详解

stm32编码器接口初始化及定时器详解

stm32编码器接⼝初始化及定时器详解February 2014DocID022500 Rev 31/36AN4013Application noteSTM32F0, STM32F1, STM32F2, STM32F4, STM32L1 series,STM32F30xC/Bx, STM32F358xC, STM32F37x, timer overviewIntroductionThis document:?presents an overview of the timer peripherals in the STM32F0, STM32F1, STM32F2, STM32F4 and STM32L1 microcontroller series, STM32F30xC/Bx, STM32F358xC, STM32F37x microcontrollers lines .describes the various modes and specific features of the timers, such as clock sources,explains how to use the available modes and features,?explains how to compute the time base in each configuration,describes the timer synchronization sequences and the advanced features for motor control applications, in addition to the general-purpose timer modes.For each mode, typical configurations are presented and examples of how to use the modes are provided.In the rest of this document (unless otherwise specified), the term STM32xx is used to refer to STM32F0xx, STM32F1xx, STM32F2xx, STM32F4xx, STM32L1xx, STM32F30x and STM32F37x.Table 1. Applicable productsTypeApplicable productsMicrocontrollersSTM32F0, STM32F1, STM32F2, STM32F4, STM32L1 series. STM32F30xC/Bx, STM32F358xC, STM32F37x lines. /doc/c6702593aef8941ea76e05e5.htmlContents AN4013Contents1Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62General-purpose timer modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.1Clock input sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.1.1Internal clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.1.2External clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.2Time base generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.3Timer input capture mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.4Timer output compare mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.5Timer PWM mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.6Timer one pulse mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.7Timer Asymmetric PWM mode available forSTM32F30xC/Bx and STM32F358xC . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.8Timer Combined PWM mode available forSTM32F30xC/Bx and STM32F358xC . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.9Retriggerable one pulse mode available forSTM32F30xC/Bx and STM32F358xC . . . . . . . . . . . . . . . . . . . . . . . . . . . 193Timer synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.1Timer system link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.2Master configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.3Slave configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224Advanced features for motor control . . . . . . . . . . . . . . . . . . . . . . . . . . 244.1Signal generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244.2Combined 3 phase PWM mode available forSTM32F30xC/Bx and STM32F358xC . . . . . . . . . . . . . . . . . . . . . . . . . . . 264.3Specific features for motor control applications . . . . . . . . . . . . . . . . . . . . 274.3.1Complementary signal and dead time feature . . . . . . . . . . . . . . . . . . . . 274.3.2Break input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284.3.3Locking mechanism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294.3.4Specific features for feedback measurement . . . . . . . . . . . . . . . . . . . . . 29 5Specific applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2/36DocID022500 Rev 3AN4013Contents5.1Infrared application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335.23-phase AC and PMSM control motor . . . . . . . . . . . . . . . . . . . . . . . . . . . 335.3Six-step mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 6Revision history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35DocID022500 Rev 33/36List of tables AN4013 List of tablesTable 1.Applicable products . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Table 2. STM32 family timers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Table 3.Timer features overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Table 4.Advanced timer configurations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Table 5.Behaviour of timer outputs versus Break1 and Break2 inputs . . . . . . . . . . . . . . . . . . . . . . 28 Table 6.Locking levels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Table 7.Document revision history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4/36DocID022500 Rev 3AN4013List of figures List of figuresFigure 1.Asymetric PWM mode versus center Aligned PWM mode. . . . . . . . . . . . . . . . . . . . . . . . . 17 Figure/doc/c6702593aef8941ea76e05e5.html bined PWM mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Figure 3.Retriggerable OPM mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Figure4.Timer system link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Figure/doc/c6702593aef8941ea76e05e5.html bined 3 phase PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Figure 6.Two signals are generated with insertion of a dead time . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Figure 7.Position at X4 resolution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Figure 8.Position at X2 resolution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Figure 9.Output waveform of a typical Hall sensor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Figure /doc/c6702593aef8941ea76e05e5.html mutation sequence . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32DocID022500 Rev 35/36Overview AN40136/36DocID022500 Rev 31 OverviewSTM32 devices use various types of timers, with the following features for each:?General-purpose timers are used in any application for output compare (timing and delay generation), one-pulse mode, input capture (for external signal frequency measurement), sensor interface (encoder, hall sensor)...Advanced timers : these timers have the most features. In addition to general purpose functions, they include several features related to motor control and digital power conversion applications: three complementary signals with deadtime insertion, emergency shut-down input.One or two channel timers : used as general-purpose timers with a limited number of channels.One or two channel timers with complementary output : same as previous type, but having a deadtime generator on one channel. This allows having complementary signals with a time base independent from the advanced timers.Basic timers have no input/outputs and are used either as timebase timers or for triggering the DAC peripheral.Table 2 summarizes the STM32 family timers.Table 3 presents a general overview of timer features.DocID022500 Rev 37/36AN4013OverviewNote:STM32F30xC/Bx and STM32F358xC timers present several new modes: Asymetric mode, combined mode, One retriggerable mode, combined 3 PWM mode and a second break input, these modes are available only for these families. Table 2. STM32 family timersTimer type STM32F0seriesSTM32F101/102/103/105/107linesSTM32F100value line STM32L1series STM32F2 and STM32F4seriesSTM32F30xC/Bxand STM32F358xC STM32F37xlines AdvancedTIM1TIM1TIM1-TIM1TIM1--TIM8--TIM8TIM8-General-purpose16-bit-TIM2TIM2TIM2-TIM2TIM2TIM3 TIM3TIM3TIM3TIM3TIM3TIM3-TIM4TIM4TIM4TIM4TIM4TIM4-TIM5TIM5---TIM5------TIM1932-bit TIM2---TIM2TIM2TIM2----TIM5TIM5Basic TIM6TIM6TIM6TIM6TIM6TIM6TIM6-TIM7TIM7TIM7TIM7TIM7TIM7------TIM181-channel-TIM10-TIM10TIM10---TIM11-TIM11TIM11---TIM13TIM13TIM13-TIM13TIM14TIM14TIM14TIM14-TIM142-channel -TIM9TIM9TIM9---TIM12TIM12-TIM12-TIM121-channel with onecomplementary outputTIM15-TIM15--TIM15TIM15-------2-channel with onecomplementary outputTIM16-TIM16--TIM16TIM16TIM17-TIM17--TIM17TIM17OverviewAN40138/36DocID022500 Rev 3Table 3. Timer features overviewTimer typeCounter resolutionCounter typeDMAChannelsComp. channelsSynchronizationMaster config.Slave config.Advanced 16 bit up, down and center aligned Yes 43Yes Yes General-purpose 16 bit 32 bit (1) up, down and center aligned Yes 40Yes Yes Basic 16 bit up Yes 00Yes No 1-channel 16 bit up No 10Yes (OC signal) No 2-channel16 bitupNo2Yes Yes1-channel with one complementary output16 bit up Yes 11Yes (OC signal)No2-channel with one complementary output16 bit up Yes 21No Yes1.TIM2 and TIM5 are 32-bit counter resolution in the STM32F2, STM32F4 series, STM32F30xC/Bx and STM32F358xC.2 General-purpose timer modesGeneral-purpose timers can be programmed to work in one of the following configurations.sourcesinput2.1 ClockThe timer can be synchronized by several clocks simultaneously:Internal clockExternal clock–External mode1 (TI1 or TI2 pins)–External clock mode2 (ETR pin)–Internal trigger clock (ITRx)clock2.1.1 InternalThe timer is clocked by default by the internal clock provided from the RCC. To select thisclock source, the SMCR_SMS (if present) bits should be reset.clock2.1.2 ExternalThe external clock timer is divided in two categories:External clock connected to TI1 or TI2 pinsExternal clock connected to ETR pinIn these cases, the clock is provided by an external signal connected to TIx pins or ETR pin.The maximum external clock frequency should be verified.Note:1In addition to all these clock sources, the timer should be clocked with the APBx clock.2The external clocks are not directly feeding the prescaler, but they are first synchronized with the APBx clock through dedicated logical blocks.External clock mode1 (TI1 or TI2 pins)In this mode the external clock will be applied on timer input TI1 pin or TI2 pin. To do this:1.Configure the timers to use the TIx pin as input:a) Select the pin to be used by writing CCxS bits in the TIMx_CCMR1 register.b) Select the polarity of the input:For the STM32F100/101/102/103/105/107 lines : by writing CCxP in theTIMx_CCER register to select the rising or the falling edge;For the other series & lines : by writing CCxP and CCxNP in the TIMx_CCERregister to select the rising/falling edge, or both edges(a).a.For the STM32F100/101/102/103/105/107 lines, polarity selection for both edges can be achieved by using TI1F_ED, but only for TI1 input.DocID022500 Rev 39/36c) Enable the corresponding channel by setting the CCEx bit in the TIMx_CCERregister.2. Select the timer TIx as the trigger input source by writing TS bits in the TIMx_SMCRregister.3. Select the external clock mode1 by writing SMS=111 in the TIMx_SMCR register.External clock mode2 (ETR pin)The external clock mode2 uses the ETR pin as timer input clock. To use this feature:1.Select the external clock mode2 by writing ECE = 1 in the TIMx_SMCR register.2. Configure, if needed, the prescaler, the filter and the polarity by writing ETPS [1:0], ETF[3:0] and ETP in the TIMx_SMCR register.Internal trigger clock (ITRx)This is a particular mode of timer synchronization. When using one timer as a prescaler foranother timer, the first timer update event or output compare signal is used as a clock for thesecond one.2.2 Time base generatorThe timer can be used as a time base generator. Depending on the clock, prescaler andautoreload, repetition counter (if present) parameters, the 16-bit timer can generate anupdate event from a nanosecond to a few minutes. For the 32-bit timer, the range is larger.Example update event periodThe update event period is calculated as follows:Update_event = TIM_CLK/((PSC + 1)*(ARR + 1)*(RCR + 1))Where:TIM_CLK = timer clock inputPSC = 16-bit prescaler registerARR = 16/32-bit Autoreload registerRCR = 16-bit repetition counterTIM_CLK = 72 MHzPrescaler = 1Auto reload = 65535No repetition counter RCR = 0Update_event = 72*106/((1 + 1)*(65535 + 1)*(1))Update_event = 549.3 Hz10/36DocID022500 Rev 3Example external clock mode2In this mode, the update event period is calculated as follows:Update_event = ETR_CLK/((ETR_PSC)*(PSC + 1)*(ARR + 1)*(RCR + 1))Where ETR_CLK = the external clock frequency connected to ETR pin.ETR_CLK = 100 kHzPrescaler = 1ETR_PSC = 2Autoreload = 255Repetition counter = 2Update_event= 100*103/((2 + 1)* (1+ 1)*((255 + 1)*(2 + 1))Update_event = 21.7 HzExample external clock mode1In this mode, the update event period is calculated as follows:Update_event = TIx_CLK/((PSC + 1)*(ARR + 1)*(RCR +1))Where TIx_CLK = the external clock frequency connected to TI1 pin or TI2 pin.TIx_CLK = 50 kHzPrescaler = 1Auto reload = 255Repetition counter = 2Update_event = 50 000/((1+ 1)*((255 + 1)*(2 + 1))Update_event = 32.55 HzExample Internal trigger clock (ITRx) mode1In this mode, the update event period is calculated as follows:Update_event = ITRx_CLK/((PSC + 1)*(ARR + 1)*(RCR + 1))Where ITRx_CLK = the internal trigger frequency mapped to timer trigger input (TRGI) ITRx_CLK = 8 kHz Prescaler = 1Auto reload = 255Repetition counter = 1Update_event = 8000/((1+ 1)*((255 + 1)*(1 + 1))Update_event = 7.8 HzDepending on the counter mode, the update event is generated each:Overflow, if up counting mode is used: the DIR bit is reset in TIMx_CR1 register Underflow, if down counting mode is used: the DIR bit is set in TIMx_CR1 register ?Overflow and underflow, if center aligned mode is used: the CMS bits are different from zero.DocID022500 Rev 311/36The update event is generated also by:Software, if the UG (update generation) bit is set in TIM_EGR register.Update generation through the slave mode controllerAs the buffered registers (ARR, PSC, CCRx) need an update event to be loaded with theirpreload values, set the URS (Update Request Source) to 1 to avoid the update flag eachtime these values are loaded. In this case, the update event is only generated if the counteroverflow/underflow occurs.The update event can be also disabled by setting the bit UDIS (update disable) in the CR1register. In this case, the update event is not generated, and shadow registers (ARR, PSC,CCRx) keep their value. The counter and the prescaler are reinitialized if the UG bit is set, orif a hardware reset is received from the slave mode controller.An interrupt or/ and a DMA request can be generated when the UIE bit or/and UDE bit areset in the DIER register.For more details on using the timer in this mode, refer to the examples provided in theSTM32xx standard peripheral libraries in the /Project/STM32xx_StdPeriph_Examples/TIM/TimeBase folder.2.3 Timer input capture modeThe timer can be used in input capture mode to measure an external signal. Depending ontimer clock, prescaler and timer resolution, the maximum measured period is deduced.To use the timer in this mode:1.Select the active input by setting the CCxS bits in CCMRx register. These bits shouldbe different from zero, otherwise the CCRx register will be read only.2. Program the filter by writing the IC1F[3:0] bits in the CCMRx register, and the prescalerby writing the IC1PSC[1:0] if needed.3. Program the polarity by writing the CCxNP/CCxP bits to select between rising, falling orboth edges.The input capture module is used to capture the value of the counter after a transition isdetected by the corresponding input channel. To get the external signal period, twoconsecutive captures are needed. The period is calculated by subtracting these two values.Period = Capture(1) /(TIMx_CLK *(PSC+1)*(ICxPSC)*polarity_index(2))The capture difference between two consecutive captures CCRx_tn and CCRx_tn+1:If CCRx_tn < CCRx_tn+1: capture = CCRx_tn+1 - CCRx_tnIf CCRx_tn > CCRx_tn+1: capture = (ARR_max - CCRx_tn) + CCRx_tn+1The polarity index is 1 if the rising or falling edge is used, and 2 if both edges are used.Particular caseTo facilitate the input capture measurement, the timer counter is reset after each rising edgedetected on the timer input channel by:selecting TIxFPx as the input trigger by setting the TS bits in the SMCR registerselecting the reset mode as the slave mode by configuring the SMS bits in the SMCR register12/36DocID022500 Rev 3Using this configuration, when an edge is detected, the counter is reset and the period of theexternal signal is automatically given by the value on the CCRx register. This method isused only with channel 1 or channel 2.In this case, the input capture prescaler (ICPSC) is not considered in the periodcomputation.The period is computed as follows:Period = CCRx /(TIMx_CLK *(PSC+1)* polarity_index(1))The polarity index is 1 if rising or falling edge is used, and 2 if both edges are used.For more details on using the timer in this mode, refer to the examples provided in theSTM32xx standard peripheral libraries in the /Project/STM32xx_StdPeriph_Examples/TIM/InputCapture folder.2.4 Timer output compare modeTo control an output waveform, or to indicate when a period of time has elapsed, the timer isused in one of the following output compare modes. The main difference between thesemodes is the output signal waveform.Output compare timing: The comparison between the output compare register CCRx and the counter CNT has no effect on the outputs. This mode is used to generate atiming base.Output compare active: Set the channel output to active level on match. The OCxRef signal is forced high when the counter (CNT) matches the capture/compare register(CCRx).Output compare inactive: Set channel to inactive level on match. The OCxRef signal is forced low when the counter (CNT) matches the capture/compare register (CCRx).Output compare toggle: OCxRef toggles when the counter (CNT) matches the capture/compare register (CCRx).Output compare forced active/inactive: OCREF is forced high (active mode) or low (inactive mode) independently from counter value.DocID022500 Rev 313/36To configure the timer in one of these modes:1.Select the clock source.2. Write the desired data in the ARR and CCRx registers.3. Configure the output mode:a) Select the output compare mode: timing / active / inactive / toggle.b) In case of active, inactive and toggle modes, select the polarity by writing CCxP in CCER register.c) Disable the preload feature for CCx by writing OCxPE in CCMRx register.d) Enable the capture / compare output by writing CCxE in CCMRx register.4. Enable the counter by setting the CEN bit in the TIMx_CR1 register.5. Set the CCxIE / CCxDE bit if an interrupt / DMA request is to be generated.Timer output compare timing / toggle update rate computationCCx update rate = TIMx_Counter_CLK / CCRxIf internal clock: TIMx_Counter_CLK = TIM_CLK / (PSC + 1)If external clock mode2: TIMx_Counter_CLK = ETR_CLK / ((ETR_PSC)*(PSC + 1)) If external clock mode1: TIMx_Counter_CLK = TRGI_CLK / (PSC + 1)–if ETRF used as clock source: TRGI_CLK = ETR_CLK / ETR_PSC–if TI1FP1 used as clock source: TRGI_CLK = TI1_CLK / TI1_PSC–if TI2FP2 used as clock source: TRGI_CLK = TI2_CLK / TI2_PSC–if TI1_ED used as clock source: TRGI_CLK = TI1_ED_CLK–if ITRx used as clock source: TRGI_CLK = ITRx_CLKTimer output compare active/inactive delay computationCCx_delay = CCRx /TIMx_Counter_CLKIf internal clock: TIMx_Counter_CLK = TIM_CLK / (PSC + 1)If external clock mode2: TIMx_Counter_CLK = ETR_CLK / ((ETR_PSC)*(PSC + 1)) If external clock mode1: TIMx_Counter_CLK = TRGI_CLK / (PSC + 1)–if ETRF used as clock source: TRGI_CLK = ETR_CLK / ETR_PSC–if TI1FP1 used as clock source: TRGI_CLK = TI1_CLK / TI1_PSC–if TI2FP2 used as clock source: TRGI_CLK = TI2_CLK / TI2_PSC–if TI1_ED used as clock source: TRGI_CLK = TI1_ED_CLK–if ITRx used as clock source: TRGI_CLK = ITRx_CLKFor more details on using the timer in this mode, refer to the examples provided in the STM32xx standard peripheral libraries, in the /Project/STM32xx_StdPeriph_Examples/ TIM/OC_Toggle, /OCActive and /OCInactive folders.14/36DocID022500 Rev 3modePWM2.5 TimerThe timer is able to generate PWM in edge-aligned mode or center-aligned modeindependently on each channel, with a frequency determined by the value of the TIMx_ARRregister, and a duty cycle determined by the value of the TIMx_CCRx register.PWM mode 1In up-counting, channelx is active as long as CNT< CCRx, otherwise it is inactive.In down-counting, channelx is inactive as long as CNT> CCRx, otherwise it is activePWM mode 2In up-counting, channelx is inactive as long as CNT < CCRx, otherwise it is active.In down-counting, channelx is active as long as CNT > CCRx, otherwise it is inactive. Note:Active when OCREF = 1, inactive when OCREF = 0.To configure the timer in this mode:1.Configure the output pin:a) Select the output mode by writing CCS bits in CCMRx register.b) Select the polarity by writing the CCxP bit in CCER register.2. Select the PWM mode (PWM1 or PWM2) by writing OCxM bits in CCMRx register.3. Program the period and the duty cycle respectively in ARR and CCRx registers.4. Set the preload bit in CCMRx register and the ARPE bit in the CR1 register.5. Select the counting mode:a) PWM edge-aligned mode: the counter must be configured up-counting or down-counting.b) PWM center aligned mode: the counter mode must be center aligned countingmode (CMS bits different from '00').6. Enable the capture compare.7. Enable the counter.For more details on using the timer in this mode, refer to the examples provided in theSTM32xx standard peripheral libraries, in the /Project/STM32xx_StdPeriph_Examples/TIM/PWM_Output and /7PWM_Output folders.DocID022500 Rev 315/362.6 Timer one pulse modeOne pulse mode (OPM) is a particular case of the input capture mode and the outputcompare mode. It allows the counter to be started in response to a stimulus and to generatea pulse with a programmable length after a programmable delay.To configure the timer this mode:1.Configure the input pin and mode:a) Select the TIxFPx trigger to be used by writing CCxS bits in CCMRx register.b) Select the polarity of the input pin by writing CCxP and CCxNP bits in CCERregister.c) Configure the TIxFPx trigger for the slave mode trigger by writing TS bits in SMCRregister.d) Select the trigger mode for the slave mode by writing SMS = 110 in SMCRregister.2. Configure the output pin and mode:a) Select the output polarity by writing CCyP bit in CCER register.b) Select the output compare mode by writing OCyM bits in CCMRy register (PWM1or PWM2 mode).c) Set the delay value by writing in CCRy register.d) Set the autoreload value to have the desired pulse: pulse = TIMy_ARR -TIMy_CCRy.3. Select the one pulse mode by setting the OPM bit in CR1 register, if only one pulse is tobe generated. Otherwise this bit should be reset.Delay = CCRy/(TIMx_CLK/(PSC + 1))Pulse-Length = (ARR - CCRy)/(TIMx_CLK/(PSC + 1))For more details on using the timer in this mode, refer to the examples provided in theSTM32xx standard peripheral libraries, in the /Project/STM32xx_StdPeriph_Examples/TIM/OnePulse folder.PWM mode available forAsymmetric2.7 TimerSTM32F30xC/Bx and STM32F358xCThe asymmetric mode allows generating a center-aligned PWM signals with aprogrammable phase shift. For a dedicated channel, the phase shift and the pulse lengthare programmed using the two TIMx_CCRx register (TIMx_CCR1 and TIMx_CCR2 orTIMx_CCR3 and TIMx_CCR4), the frequency is determined by the value of the TIMx_ARRregister. So the asymetric PWM mode can be selected independently on two channels byprogramming the OCxM bits in TIMx_CCMRx register:OCxM = 1110 to use the Asymetric PWM1, in this mode the output reference has the same behavior as in PWM1 mode. When the counter is counting up the outputreference is identical to OC1/3REF, when the counter is downcounting, the outputreference is identical to OC2/4REFOCxM = 1111 to use the Asymetric PWM2, in this mode the output reference has the same behavior as in PWM2 mode. When the counter is counting up the outputreference is identic to OC1/3REF, when the counter is downcounting, the outputreference is identic to OC2/4REF16/36DocID022500 Rev 3The following figure resumes the asymetric behavior versus the center aligned PWM modeTo configure the timer in this mode:1.Configure the output pin:a) Select the output mode by writing CCS bits in CCMRx register.b) Select the polarity by writing the CCxP bit in CCER register.2. Select the Asymetric PWM mode (Asymetric PWM1 or Asymetric PWM2) by writingOCxM bits in CCMRx register.3. Program the period, the pulse lenght and the phase shift respectively in ARR, CCRxand CCRy registers.4. Select the counting mode: the Asymetic PWM mode is working only with center alignedmode: the counter mode must be center aligned counting mode (CMS bits different from '00').5. Enable the capture compare.6. Enable the counter.For more details on using the timer in this mode, refer to the examples provided in the STM32F30x standard peripheral libraries, in the/Project/STM32F30x_StdPeriph_Examples/ TIM/Asymetric folders.DocID022500 Rev 317/362.8 Timer Combined PWM mode available forSTM32F30xC/Bx and STM32F358xCThe combined mode allows generating edge or center aligned PWM signals withprogrammable delay and phase shift between respective pulses. To generate a combinedsignals, the TIMx_CCRx and TIMx_CCRy must be used to program the delay and the phaseshift, the frequency is determined by the value of the TIMx_ARR register. The resultingsignal (combined signal) is made of an OR or AND logical combination of two referencePWMs. So the combined PWM mode can be selected independently on two channels byprogramming the the OCxM bits in TIMx_CCMRx register:OCxM = 1100 to use the Combined PWM1, in this case the combined output reference has the same behavior as in PWM mode 1. The combined output reference is thelogical OR between OC1/3REF and OC2/4REFOCxM = 1101 to use the Combined PWM2 ,in this case the combined output reference has the same behavior as in PWM mode 2. The combined output reference is thelogical AND between OC1/2REF and OC2/4REFThe following figures resume the combined mode18/36DocID022500 Rev 3To configure the timer in this mode:1.Configure the output pin:a) Select the output mode by writing CCS bits in CCMRx register.b) Select the polarity by writing the CCxP bit in CCER register.2. Select the Combined PWM mode (Combined PWM1 or Combined PWM2) by writingOCxM bits in CCMRx register.3. Program the period, the delay and the phase shift respectively in ARR, CCRx andCCRy registers.4. Select the counting mode:a) Edge-aligned mode: the counter must be configured up-counting or down-。

第六章STM32 定时器的使用

第六章STM32 定时器的使用

}
}
步骤五:配置main函数,实现定时器控制跑马灯。
volatile u32 time;
int i=0;
int main(void) { SystemInit(); //配置系统时钟为72控制跑马灯(P190)
1.理解STM32通用定时器的结构和基本工作原理; 2.掌握STM32通用定时器初始化和操作方法; 3.理解中断概念; 4.掌握STM3中断服务程序的写法。
硬件设计 硬件连接图如下,实验板上stm32f103x处理器
通过配置GPIO实现如下功能:D3~D6轮流点亮,点亮时 间持续1秒。
软件设计 步骤一:添加库函数,以及操作函数。 添加相应库函数:
操作函数有:USER/main.c ;stm32f10x_it.c ;led.h; led.c ;timer.h;timer.c;TIM2_IRQHandler()。 步骤二:在timer.h函数中设置宏定义和函数声明:
void TIM2_NVIC_Config(void); void TIM2_Config(void);
TIN_TimBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = (10000 - 1); //自动重装的计数值
TIM_TimeBaseStructure.TIM_Prescaler =7200-1 ; // 预分频系数
立即加载计数器(ARPE=0)
更新事件时加载计数器(ARPE=0)
6.2.2 计数器模式 1. 向上计数模式:计数器从0计数到设定的数值,然 后重新从0开始计数并且产生一个计数器溢出事件。
计数器时序图(内部时钟分频因子为1)

STM32通用定时器

STM32通用定时器

STM32的定时器功能很强大,学习起来也很费劲儿.其实手册讲的还是挺全面的,只是无奈TIMER的功能太复杂,所以显得手册很难懂,我就是通过这样看手册:while(!SUCCESS){看手册…}才搞明白的!所以接下来我以手册的顺序为主线,增加一些自己的理解,并通过11个例程对TIMER做个剖析。

实验环境是STM103V100的实验板,MDK3.2 +Library2.东西都不怎么新,凑合用……TIMER主要是由三部分组成:1、时基单元。

2、输入捕获。

3、输出比较。

还有两种模式控制功能:从模式控制和主模式控制。

一、框图让我们看下手册,一开始是定时器的框图,这里面几乎包含了所有定时器的信息,您要是能看明白,那么接下来就不用再看别的了…为了方便的看图,我对里面出现的名词和符号做个注解:TIMx_ETR:TIMER外部触发引脚 ETR:外部触发输入ETRP:分频后的外部触发输入 ETRF:滤波后的外部触发输入ITRx:内部触发x(由另外的定时器触发)TI1F_ED:TI1的边沿检测器。

TI1FP1/2:滤波后定时器1/2的输入TRGI:触发输入 TRGO:触发输出CK_PSC:应该叫分频器时钟输入CK_CNT:定时器时钟。

(定时周期的计算就靠它)TIMx_CHx:TIMER的输入脚 TIx:应该叫做定时器输入信号xICx:输入比较x ICxPS:分频后的ICxOCx:输出捕获x OCxREF:输出参考信号关于框图还有以下几点要注意:1、影子寄存器。

有阴影的寄存器,表示在物理上这个寄存器对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄存器,称为shadow register(影子寄存器);(详细请参考版主博客/STM32/401461/message.aspx)2、输入滤波机制在ETR何TIx输入端有个输入滤波器,它的作用是以采样频率Fdts来采样N次进行滤波的。

STM32定时器所支持的三种计数模式及计数过程

STM32定时器所支持的三种计数模式及计数过程

STM32定时器所支持的三种计数模式及计数过程STM32常规定时器主要包括基本定时器、通用定时器和高级定时器。

不论哪一类定时器,都有个共同的计数定时单元,我们把它称之为时基单元。

该单元主要由三部分组成:分频模块、计数模块、自动重装载模块。

分频模块用来对外来的计数时钟进行分频,这里有个分频计数器,通过它来实现对时钟的分频功能。

与之对应的有个分频器寄存器TIMx_PSC,用来配置和存放分频比、分频系数。

计数模块用来对来自分频器输出的计数脉冲进行计数。

相应的这里有个寄存器—计数器寄存器TIMx_CNT,为了把该计数器跟别的计数器区别开来,不妨称它为核心计数器。

自动重装载模块用来配合计数器溢出,当计数器溢出时为之赋予初始计数值的功能单元。

与之相应的有个自动重装载寄存器TIMx_ARR.当自动重装载寄存器TIMx_ARR修改生效后就可以自动地作为计数器的计数边界或重装值。

关于自动重装及自动重装载寄存器TIMx_ARR是个相对比较难理解的地方,尤其关于ARR寄存器数据的含义。

我们在看STM32参考手册时,很难一下子理解得很到位,往往需要结合上下文内容反复阅读后去领会。

关于计数器的溢出与重装,在手册里只有些零散且并不算清晰的介绍,这里尽力跟大家做些交流,以供参考。

当计数器溢出时,自动重装载器为计数器重装计数初始值。

自动重装寄存器【ARR】为计数器设置计数边界或初始值,决定计数脉冲的多少或计时周期长短。

比如:计数器向上计数时,计到多少发生溢出;向下计数时从多少开始往下计数。

平常我们泛泛地说ARR寄存器为计数器提供计数边界或重装值,但它的具体含义及使用需要结合计数器的计数模式才能确定。

那一起看看STM32定时器所支持的三种计数模式及计数过程。

【文中图片可以点击放大观看】。

STM32F103的11个定时器详解

STM32F103的11个定时器详解

STM32F103系列的单片机一共有11个定时器,其中:2个高级定时器4个普通定时器2个基本定时器2个看门狗定时器1个系统嘀嗒定时器出去看门狗定时器和系统滴答定时器的八个定时器列表;8个定时器分成3个组;TIM1和TIM8是高级定时器TIM2-TIM5是通用定时器TIM6和TIM7是基本的定时器这8个定时器都是16位的,它们的计数器的类型除了基本定时器TIM6和TIM7都支持向上,向下,向上/向下这3种计数模式计数器三种计数模式向上计数模式:从0开始,计到arr预设值,产生溢出事件,返回重新计时向下计数模式:从arr预设值开始,计到0,产生溢出事件,返回重新计时中央对齐模式:从0开始向上计数,计到arr产生溢出事件,然后向下计数,计数到1以后,又产生溢出,然后再从0开始向上计数。

(此种技术方法也可叫向上/向下计数)基本定时器(TIM6,TIM7)的主要功能:只有最基本的定时功能,。

基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动通用定时器(TIM2~TIM5)的主要功能:除了基本的定时器的功能外,还具有测量输入信号的脉冲长度( 输入捕获) 或者产生输出波形( 输出比较和PWM)高级定时器(TIM1,TIM8)的主要功能:高级定时器不但具有基本,通用定时器的所有的功能,还具有控制交直流电动机所有的功能,你比如它可以输出6路互补带死区的信号,刹车功能等等通用定时器的时钟来源;a:内部时钟(CK_INT)b:外部时钟模式1:外部输入脚(TIx)c:外部时钟模式2:外部触发输入(ETR)d:内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器通用定时期内部时钟的产生:从截图可以看到通用定时器(TIM2-7)的时钟不是直接来自APB1,而是通过APB1的预分频器以后才到达定时器模块。

当APB1的预分频器系数为1时,这个倍频器就不起作用了,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1时钟频率的两倍。

STM32l151中文手册

STM32l151中文手册

ADC 1 (12 位)24 个通道 DAC 2 DMA 1 个 USB2.0(48MHz 3 个串口 2 个 SPI 2 个 I2c 定时器(10 个) 2 个 16 位基础定时器 2 个看门狗定时器 锁相环) (12 位)
6 个通用定时器(PWM)
时钟挂载 AHB(32MHz): GPIOA B C D E(15-0) H(2-0); APB1:(32MHz) IWDG TIM 2 3 4 6 7 USART 2 3 SPI2 I2C 1 2 USB WWDG LCD DAC 1 2 APB2(32MHz): EXT IT WKUP SPI1 USART 1
Stm32L151 详细内容
Cortex-M3 CPU(32 位)、 频率 32kHz-32MHz 时钟源: 1-24MHz 的晶振; 32KHz 的 RTC 振荡源; 83 个 I/O 口 存储 : 128K 16K 4K 80B Flash RAM EEPROM Register (73 I/O 5V)



2 x spi 16 Mbit / s 2 x i2c(SMBus / PMBus)

10 x 计时器:6 x 16 位 4 IC / OC / PWM 通道,2 x 16 位基本定时器,2 x 看门狗定时器 (独立和窗口) 20 电容式感应通道支持 touchkey,线性和旋转触ห้องสมุดไป่ตู้传感器 CRC 计算单位,96 位的惟一 ID
ADC TIM 9 10 11
最后,集成 LCD 控制器(STM32L151x6/8 / B 设备除外)有一个内置的液晶电压发生器,允许开 车 8 多路复用与对比独立于电源电压的液晶显示器。 超低功耗 STM32L151x6/8 / B 和 STM32L152x6/8 / B 设备操作从 1.8 到 3.6 V 电源断电(降 至 1.65 V)和 BOR 从 1.65 到 3.6 V 电源没有 BOR 选项。它可在-40 + 85°C 的温度范围,扩 展到 105°C 在低功耗状态。一组全面的节电模式允许低功耗的设计应用程序。 关键特性
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

通用定时器的相关配置
1、预装入(Preload)
预装入实际上是设置TIMx_ARR寄存器有没有缓冲,根据“The auto-reload register is preloaded。

Writing to or reading from the auto-reload register accesses the preload register。

”可知:
1)如果预装入允许,则对自动重装寄存器的读写是对预装入寄存器的存取,自动重装寄存器的值在更新事件后更新;
2)如果预装入不允许,则对自动重装寄存器的读写是直接修改其本身,自动重装寄存器的值立刻更新;
3)设置方式:TIMx_CR1 →ARPE(1)
2、更新事件(UEV)
1)产生条件:①定时器溢出
②TIMx_CR1→ UDIS = 0
③或者:软件产生,TIMx_EGR→ UG = 1
2)更新事件产生后,所有寄存器都被“清零”,注意预分频器计数
器也被清零(但是预分频系数不变)。

若在中心对称模式下或DIR=0(向上计数)则计数器被清零;若DIR=1(向下计数)则计数器取TIMx_ARR的值。

3)注意URS(复位为0)位的选择,如下:
如果是软件产生更新,则URS→1,这样就不会产生更新请求
和DMA请求。

4)更新标志位(UIF)根据URS的选择置位。

5)可以通过软件来失能更新事件:
3、计数器(Counter)
计数器由预分频器的输出时钟(CK_CNT)驱动,TIMx_CR1→CEN = 1 使能,注意:真正的计数使能信号(CNT_EN)在 CEN 置位后一个周期开始有效。

4、预分频器(Prescaler)
预分频器用来对时钟进行分频,分频值由TIMx_PSC决定,计数器的时钟频率CK_CNT= fCK_PSC / (PSC[15:0] + 1)。

根据“It can be changed on the fly as this control register
is buffered。

The new prescaler ratio is taken into account at the next update event。

”分频值可以在任何时候更改,但是新的分频比只在下个更新事件时才起作用。

注意:预分频计数器、预分频系数是不同概念;
5、影子寄存器
可以发现预分频器寄存器、自动重载寄存器和捕捉/比较寄存器下面有一个阴影,其他的寄存器有些也有阴影。

这表示在物理上这个寄存器对应2个寄存器:一个是可以写入或读出的寄存器,称为预装载寄存器,另一个是我们看不见的、无法真正对其读写操作的,但在使用中真正起作用的寄存器,称为影子寄存器。

数据手册介绍预装载寄存器的内容可以随时传送到影子寄存器,即两者是连通的(permanently),或者在每一次更新事件(UEV)时才把预装载寄存器的内容传送到影子寄存器。

原文如下: The auto-reload register is preloaded。

Writing to or reading from the auto-reload register accesses the preload register。

The content of the preload register are transferred into the shadow register permanently or at each update event (UEV), depending on the auto-reload preload enable bit (ARPE) in TIMx_CR1 register。

在图中的,表示对应寄存器的影子寄存器可以在发生更新事件时,被更新为它的预装载寄存器的内容;而图中的部分,表示对应的
自动重载寄存器可以产生一个更新事件(U)或更新事件中断(UI)。

设计预装载寄存器和影子寄存器的好处是,所有真正需要起作用的寄存器(影子寄存器)可以在同一个时间(发生更新事件时)被更新为所对应的预装载寄存器的内容,这样可以保证多个通道的操作能够准确地同步。

如果没有影子寄存器,软件更新预装载寄存器时,则同时更新了真正操作的寄存器,因为软件不可能在一个相同的时刻同时更新多个寄存器,结果造成多个通道的时序不能同步,如果再加上例如中断等其它因素,多个通道的时序关系有可能会混乱,造成是不可预知的结果。

计数器的三种计数模式:
1)向上计数模式:0→TIMx_ARR→产生更新(上溢)事件
2)向下计数模式:TIMx_ARR→0→产生更新(下溢)事件
3)中央对齐模式(向上/向下计数):0→TIMx_ARR-1→产生更新(上
溢)事件→ TIMx_ARR→1→产生更新(下溢)事件
计数模式选择方式:IMx_CR1→CMS
如果使用中央对齐模式,CMS≠00,DIR位此时不能写入;如果不使用
中央对齐模式计数,CMS =00,通过选择DIR位来确定是向上/向下计数模式,如下:
时钟选择:
●内部时钟:CK_INT
●外部时钟引脚:TIx
●外部触发输入:ETR
●内部触发输入:ITR
时钟的选择要配合定时器模式:TIMx_SMCR→SMS
1、外部时钟引脚输入:TIx
根据框图配置时钟流程如下(以TI2为例):
1)配置定时器输入通道(CH0至CH4),TIMx_CCMR→CCxS[1:0],将通道映射到TI2上;
2)配置定时器输入滤波器周期,TIMx_CCMR→ICxF[3:0],这几位定义了TI输入的采样频率及数字滤波器长度,如果不需要滤波,ICF = 0000;
3)配置定时器计数边沿极性,TIMx_CCER→CCxP;
4)配置定时器为外部时钟模式,TIMx_SMCR→SMS = 111;
5)选择TI2作为时钟源,TIMx_SMCR→TS = 110;
6)使能计数器,开始计数,TIMx_CR1→CEN = 1
2、外部触发输入:ETR
1)配置计数器流程如下(在每2个ETR上升沿计数):
2)配置外部触发极性,TIMx_SMCR→ ETP = 0(ETR不反相,高
电平或上升沿有效);
3)配置外部触发预分频,外部触发信号的频率最多是内部时
(CK_INT)的1/4,若果外部触发信号较快,则需要预分频,TIMx_SMCR →ETPS,(此处ETPS = 01,每两个ETR上升沿计数一次)
4)配置外部触发滤波,TIMx_SMCR →ETF[3:0] = 0000(不需滤
波);
5)外部时钟使能,TIMx_SMCR→ ECE = 1,使能外部时钟模式2
(外部触发输入),注意事项如下:
6)使能计数器,开始计数,TIMx_CR1→CEN = 1。

相关文档
最新文档