STM32F3产品技术培训-06.定时器新增功能

合集下载

STM32定时器有什么功能?STM32的用法详解

STM32定时器有什么功能?STM32的用法详解

STM32定时器有什么功能?STM32的用法详解
2.2 计数器模式
TIM2-TIM5可以由向上计数、向下计数、向上向下双向计数。

向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR计数器内容),然后重新从0开始计数并且产生一个计数器溢出事件。

在向下模式中,计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。

而中央对齐模式(向上/向下计数)是计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。

2.3 编程步骤
1. 配置系统时钟;
2. 配置NVIC;
3. 配置GPIO;
4. 配置TIMER;
其中,前3项在前面的笔记中已经给出,在此就不再赘述了。

第4项配置TIMER有如下配置:
(1)利用TIM_DeInit()函数将Timer设置为默认缺省值;
(2)TIM_InternalClockConfig()选择TIMx来设置内部时钟源;
(3)TIM_Perscaler来设置预分频系数;
(4)TIM_ClockDivision来设置时钟分割;
(5)TIM_CounterMode来设置计数器模式;。

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的当前计数值进行比较,根据比较结果进行不同的电平输出定时器的时钟源从时钟源方面来说,通用定时器比基本定时器多了一个选择,它可以使用外部脉冲作为定时器的时钟源。

STM32F3产品技术培训-12.通用定时器模块

STM32F3产品技术培训-12.通用定时器模块
Master config
Slave config
3
TIM2
General purpose
32 bit
1...65536
YES
4
YES
YES
TIM3 and TIM4
Basic
16 bit
1…65536
YES
4
YES
YES
TIM6 and TIM7
1 channel, 1 complementary output
TIM2/5
TIM3/4/19
TIM12
TIM15
TIM13/14
TIM16/17
TIM6/7/18
Features overview (1/3)
ETR
5
• Up to 4 16-bit resolution Capture Compare channels (TIM3/4/19) • Up to 4 32-bit resolution Capture Compare channels (TIM2/5) • Inter-timers synchronization
TIM3/4/19
Counting Modes (2/2)
• There is only one counting mode:
• Up counting mode
9
Up counting
Update Event
TIM12
TIM15
TIM13/14
TIM16/17
TIM6/7/18
Update Event
Trigger Output
16-Bit Prescaler Auto Reload REG +/- 16/32-Bit Counter

STM32的定时器定时时间计算(计数时间和中断定时时间)

STM32的定时器定时时间计算(计数时间和中断定时时间)

STM32的定时器定时时间计算(计数时间和中断定时时间)时基单元可编程⾼级控制定时器的主要部分是⼀个16位计数器和与其相关的⾃动装载寄存器。

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

此计数器时钟由预分频器分频得到。

计数器、⾃动装载寄存器和预分频器寄存器可以由软件读写,即使计数器还在运⾏读写仍然有效。

时基单元包含:●计数器寄存器(TIMx_CNT)●预分频器寄存器 (TIMx_PSC)●⾃动装载寄存器 (TIMx_ARR)●重复次数寄存器 (TIMx_RCR)⾃动装载寄存器是预先装载的,写或读⾃动重装载寄存器将访问预装载寄存器。

根据在TIMx_CR1寄存器中的⾃动装载预装载使能位(ARPE)的设置,预装载寄存器的内容被⽴即或在每次的更新事件UEV时传送到影⼦寄存器。

当计数器达到溢出条件(向下计数时的下溢条件)并当TIMx_CR1寄存器中的UDIS位等于0时,产⽣更新事件。

更新事件也可以由软件产⽣。

随后会详细描述每⼀种配置下更新事件的产⽣。

计数器由预分频器的时钟输出CK_CNT驱动,仅当设置了计数器TIMx_CR1寄存器中的计数器使能位(CEN)时,CK_CNT才有效。

(更多有关使能计数器的细节,请参见控制器的从模式描述)。

注意,在设置了TIMx_CR寄存器的CEN位的⼀个时钟周期后,计数器开始计数。

预分频器描述预分频器可以将计数器的时钟频率按1到65536之间的任意值分频。

它是基于⼀个(在TIMx_PSC寄存器中的)16位寄存器控制的16位计数器。

因为这个控制寄存器带有缓冲器,它能够在运⾏时被改变。

新的预分频器的参数在下⼀次更新事件到来时被采⽤。

尤其注意的是当发⽣⼀个更新事件时,所有的寄存器都被更新,硬件同时(依据URS位)设置更新标志位(TIMx_SR寄存器中的UIF位)。

●重复计数器被重新加载为TIMx_RCR寄存器的内容。

●⾃动装载影⼦寄存器被重新置⼊预装载寄存器的值(TIMx_ARR)。

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)(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仍然可以得到较高的时钟频率。

stm32f103zet6定时器详解及应用

stm32f103zet6定时器详解及应用

stm32f103zet6定时器详解及应用
1、stm32f103zet6芯片及引脚图
2、stm32f103xx器件功能与配置
3、stm32f103zet6 定时器大容量的STM32F103XX增强型系列产品包含最多2个高级控制定时器、4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。

下表比较了高级控制定时器、普通定时器和基本定时器的功能:
定时器功能比较
1)计数器三种计数模式
向上计数模式:从0开始,计到arr预设值,产生溢出事件,返回重新计时
向下计数模式:从arr预设值开始,计到0,产生溢出事件,返回重新计时
中央对齐模式:从0开始向上计数,计到arr产生溢出事件,然后向下计数,计数到1以后,又产生溢出,然后再从0开始向上计数。

(此种技术方法也可叫向上/向下计数)
2)高级控制定时器(TIM1和TIM8)
两个高级控制定时器(TIM1和TIM8)可以被看成是分配到6个通的三三相PWM发生器,它具有带死区插入的互补PWM输出,还可以被当成完整的通用定时器。

四个独立的通道可以用于:
(1)输入捕获
(2)输出比较
(3)产生PWM(边缘或中心对齐模式)
(4)单脉冲输出
配置为16位标准定时器时,它与TIMX定时器具有相同的功能。

配置为16位PWM发生器时,它具有全调制能力(0~100%)。

在调试模式下,计数器可以被冻结,同时PWM输。

第6章 STM32通用定时器2

第6章 STM32通用定时器2

6.2 通用定时器相关寄存器
预分频器寄存器:TIMx_PSC
预分频器可以将计数器的时钟频率(CK_PSC)按1到 65536之间的任意值分频,它是一个16位寄存器。 这个寄存器带有缓冲区,它能够在工作时被改变。新的 预分频器参数在下一次更新事件到来时被采用。
什么是“更新事件(UEV)”?
“更新事件(UEV)” :当计数器溢出的时候产生一次 UEV事件,另外还可以在事件寄存器TMx_EGR中的UG 位软件写入产生一次事件更新; 当UEV事件来临时,所有影子寄存器载入寄存器中的值 ,从而实现所有带影子寄存器的同步更新;而不启用影 子寄存器的情况下,只能实现写那个寄存器更新那个寄 存器,这可能造成相关联的寄存器产生冲突矛盾。
嵌入式单片机原理及应用
电气工程学院仪器科学与工程系
退出
1 2 3 4 5 6 7 8 9 10 11
ARM嵌入式系统概述 STM32单片机结构和最小系统 基于标准外设库的C语言程序设计基础 STM32通用输入输出GPIO STM32外部中断 STM32通用定时器 STM32通用同步/异步收发器USART 直接存储器存取DMA STM32的模数转换器ADC STM32的集成电路总线I2C STM32的串行外设接口SPI
1. NVIC设置:NVIC用来完成中断分组、中断通道选择、中断优先 级设置及使能中断的功能
声明NVIC结构体 NVIC_InitTypeDef S
选择中断分组 NVIC_PriorityGroupConfig()
设置响应优先级 S.NVIC_IRQChannelSubPriori ty
选择中断通道 S.NVIC_IRQChannel
中断使能 S.NVIC_IRQChannelCmd

STM32通用定时器使用

STM32通用定时器使用

STM32通⽤定时器使⽤STM32中⼀共有11个定时器,其中2个⾼级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。

(TIM1和TIM8是能够产⽣3对PWM互补输出的⾼级登时其,常⽤于三相电机的驱动,时钟由APB2的输出产⽣;TIM2-TIM5是普通定时器;TIM6和TIM7是基本定时器,其时钟由APB1输出产⽣)本实验要实现的功能是:⽤普通定时器TIM2每⼀秒发⽣⼀次更新事件,进⼊中断服务程序翻转LED1的状态。

预备知识:① STM32通⽤定时器TIM2是16位⾃动重装载计数器。

② 向上计数模式:从0开始计数,计到⾃动装载寄存器(TIMx_ARR)中的数值时,清0,依次循环。

需要弄清楚的两个问题:1. 计数器的计数频率是什么?这个问题涉及到RCC时钟部分,如下图所⽰:定时器的时钟不是直接来⾃APB1或APB2,⽽是来⾃于输⼊为APB1或APB2的⼀个倍频器。

下⾯以定时器2~7的时钟说明这个倍频器的作⽤:当APB1的预分频系数为1时,这个倍频器不起作⽤,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作⽤,定时器的时钟频率等于APB1的频率两倍。

假定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提供时钟,⽽且还要为其它外设提供时钟;设置这个倍频器可以在保证其它外设使⽤较低时钟频率时,TIM2~7仍能得到较⾼的时钟频率。

再举个例⼦:当AHB=72MHz时,APB1的预分频系数必须⼤于2,因为APB1的最⼤频率只能为36MHz。

STM32定时器定时时间配置总结

STM32定时器定时时间配置总结

STM32定时器定时时间配置总结STM32系列微控制器内置了多个定时器模块,它们可以用于各种定时功能,如延时、周期性触发、脉冲计数等。

在使用STM32定时器之前,我们需要进行定时时间配置,本文将总结一下STM32定时器定时时间配置的相关知识,包括定时器工作模式、定时器时钟源选择、定时器时钟分频、定时器计数器重载值以及定时器中断配置等内容。

首先,我们需要选择定时器的工作模式。

STM32定时器支持多种工作模式,包括基本定时器模式、高级定时器模式、输入捕获模式和输出比较模式等。

基本定时器模式适用于简单的定时和延时操作,输入捕获模式适用于捕获外部事件的时间参数,输出比较模式适用于产生精确的PWM波形。

根据具体的应用需求,选择合适的工作模式。

其次,我们需要选择定时器的时钟源。

STM32定时器的时钟源可以选择内部时钟源(如系统时钟、HCLK等)或外部时钟源(如外部晶体)。

内部时钟源的稳定性较差,适用于简单的定时操作,而外部时钟源的稳定性较好,适用于要求较高的定时操作。

然后,我们需要选择定时器的时钟分频系数。

定时器的时钟分频系数决定了定时器的时钟频率,从而影响了定时器的计数速度。

我们可以通过改变时钟分频系数来调整定时器的计数速度,从而实现不同的定时时间。

时钟分频系数的选择需要考虑定时器的最大计数周期和所需的定时精度。

接着,我们需要配置定时器的计数器重载值。

定时器的计数器从0开始计数,当计数器达到重载值时,定时器将重新开始计数。

通过改变计数器重载值,可以实现不同的定时时间。

计数器重载值的选择需要考虑定时器的时钟频率和所需的定时时间。

最后,我们需要配置定时器的中断。

定时器中断可以在定时器计数达到重载值时触发,用于通知CPU定时器已经计数完成。

在定时器中断中,我们可以执行相应的中断服务程序,比如改变一些IO口的状态,实现定时操作。

通过配置定时器的中断使能和中断优先级,可以实现不同的中断操作。

需要注意的是,不同型号的STM32微控制器的定时器模块可能略有不同,具体的配置方法和寄存器设置也可能不同,请参考相应的数据手册和参考手册进行具体操作。

STM32定时器详细讲解及应用

STM32定时器详细讲解及应用

TIM3->DIER|=1<<0; //允许更新中断 TIM3->DIER|=1<<6; //允许触发中断 TIM3->CR1|=0X01; //使能定时器 3(这里面包括计数方向为向上计数) } #if 0 void TIM4_Configuration(void) {
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; /* TIM4 clock enable */
/*使能预装载*/ TIM_ARRPreloadConfig(TIM4, ENABLE); /*预先清除所有中断位*/ TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
/* 允许 TIM2 开始计数 */ TIM_Cmd(TIM4, ENABLE); } #else void TIM_Configuration(u16 p,u16 psc) { RCC->APB1ENR|=1<<2;//TIM4 时钟使能 //自动装载寄存器 TIM4->ARR=p; //设定定时器自动重装值 //PSC 预分频寄存器 TIM4->PSC=psc; //设定定时器的分频系数 TIM4->DIER|=1<<0; //允许更新中断 TIM4->DIER|=1<<6; //允许触发中断 TIM4->CR1|=0X01; //使能定时器 3(这里面包括计数方向为向上计数)
***********
* Function Name : TIM2_IRQHandler TIM2 中断

STM32学习之定时器

STM32学习之定时器

STM32定时器一、STM32定时器概述STM32有8个16位定时器,根据功能分为三种:1)TIM6和TIM7是基本定时器,只具有基本定时功能,即计数值超过预设值后触发中断或DMA请求,与51单片机相似;2)TIM2,TIM3,TIM4,TIM5是通用定时器,除了基本定时器的功能外,还具有输入捕获和输出比较的功能,输入捕获可以用于测量输入脉冲的频率及脉冲宽度,输出比较可以输出PWM;3)TIM1和TIM8为高级定时器,该定时器内部结构相对复杂,比通用定时器多了BRK和DTG两个结构,即多了刹车和死区时间控制的功能,隐刺适用于电机控制。

二、基础/通用定时器TIMx_CNT为计数器,当累加或递减到重载寄存器TIMx_ARR的值时,产生溢出事件,但通用定时器比基本定时器多了一个捕获/比较寄存器TIMx_CCR才具有输入捕获和输出比较的功能,当用于输入时,该寄存器为捕获寄存器,当用于输出时,该寄存器为比较寄存器。

下面简介两种模式下的工作过程分析。

1.输入功能首先将定时器配置为向上计数,并设定好重载值,若被测量信号足够长,应当把重载寄存器TIMx_ARR中的值设得大一点。

此时TIMx_CCR是作为捕获寄存器,测量脉冲信号的过程分为以下三个过程:1)待测量的信号通过GPIO引脚输入到脉冲测量通道,当信号的上升沿来临时,脉冲计数器TIMx_CNT的值清零;2)TIMx_CNT开始累加,直到被测信号的下降沿来临,捕获寄存器TIMx_CCR2将TIMx_CNT中的值x存储下来;3)当被测信号的上升沿再次来临时,TIMx_CCR1将TIMx_CNT中的值y存储下来,然后TIMx_CNT清零,到此被测信号的一个周期结束。

由上可知,被测信号的周期为y+1个定时器周期,占空比为(x+1)/(y+1)。

2.输出功能此模式下TIMx_CCR 为比较寄存器,先将定时器配置为向上/向下计数,重载寄存器TIMx_ARR 的值为N ,比较寄存器TIMx_CCR 值为M ,计数器不断累加/递减,计数值与M 比较,比它大/小时输出高电平,反之低电平,也就生成了PWM 波,占空比Duty=M/(N+1),这些模式可以在定时器PWM 结构体中的相应值配置。

【话说定时器系列】之四:STM32定时器更新事件及案例分享

【话说定时器系列】之四:STM32定时器更新事件及案例分享

【话说定时器系列】之四:STM32定时器更新事件及案例分享我们知道,STM32定时器中的四个带影子特性的寄存器组,每组寄存器分别由影子寄存器【即实际控制寄存器】和预装寄存器组成。

其中,影子寄存器是真正起作用的控制寄存器,用户访问不到它。

而预装寄存器是用户访问的为实际影子寄存器准备数据或指令的寄存器。

它们分别是:TIMx_PSC 分频寄存器TIMx_ARR 自动重装载寄存器TIMx_CCR 捕捉寄存器TIMx_RCR 重复计数寄存器[高级定时器有】其中,ARR、CCR寄存器带预装载使能控制位,即它们的预装功能可以软件开启或关闭。

TIMx_ARR 带预装载使能控制位ARPE@TIMx_CR1TIMx_CCR 带预装载使能控制位OCxPE@TIMx_CCMR当相应预装使能位置1时,即开启预装功能时,此时影子寄存器的数据更新必须且只能通过更新事件实现从预装寄存器到影子寄存器的数据拷贝。

当相应预装使能位置0时,即关闭预装功能时,用户修改预装寄存器的数据后会立即被拷贝进影子寄存器【实际寄存器】。

也就是说,此时我们用户操作预装寄存器就相当于访问实际影子寄存器。

那另外的PSC、RCR寄存器是不带预装使能控制位的,也就是说,二者的影子寄存器的预装功能始终开启,所以对于PSC/RCR影子寄存器的数据更新就只能通过更新事件唯一途径实现从预装寄存器到影子寄存器的数据拷贝更新。

那么有哪些操作可以产生更新事件呢?或者有哪些更新事件源呢?这里把更新操作跟更新事件区别开来,以便于概念上的理解。

更新操作是一种动作,是更新事件的源头,即事件源;更新事件是基于更新操作所导致的后续影响或结果。

可能的更新操作【事件源】有3类:1、核心计数器的溢出【上溢或下溢】2、软件复位操作【对UG@TIMX_EGR置位】3、工作在复位模式下的定时器收到触发信号【即复位触发信号】【特别提醒,对于高级定时器必须发生RCR+1次溢出动作后才可以产生更新事件。

STM32的定时器

STM32的定时器

STM32的定时器调试STM32的定时器好几天了,也算是对STM32的定时器有了点清楚的认识了。

我需要测量4路信号的频率然后通过DMA将信号的频率传输到存储器区域,手册说的很明白每个定时器有4个独立通道。

然后我就想能不能将这4路信号都连接到一个定时器的4个通道上去。

理论上应该是行的通的。

刚开始俺使用的是TIM2的1 2 3通道,TIM4的2通道来进行频率的测量。

由于没有频率发生器,所以我用tim3作为信号源,用TIM2,TIM4来进行测量就ok了。

请看一开始的程序,以TIM2的1,3通道为例子:TIM_ICInitStructure.TIM_ICMode = TIM_ICMode_ICAP; //配置为输入捕获模式TIM_ICInitStructure.TIM_Channel = TIM_Channel_1; //选择通道1TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //输入上升沿捕获TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_Dire ctTI; // 通道方向选择TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //每次检测到捕获输入就触发一次捕获TIM_ICInitStructure.TIM_ICFilter = 0x0; //TIM_ICInit(TIM2, &TIM_ICInitStructure);TIM_ICInitStructure.TIM_ICMode = TIM_ICMode_ICAP; //配置为输入捕获模式TIM_ICInitStructure.TIM_Channel = TIM_Channel_3; //选择通道3TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //输入上升沿捕获TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_Dire ctTI; //TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //每次检测到捕获输入就触发一次捕获TIM_ICInitStructure.TIM_ICFilter = 0x0; //TIM_ICInit(TIM2, &TIM_ICInitStructure);这个是输入捕获配置还需要做的工作就是(参考stm32参考手册的TIM的结构框图):/* Select the TIM2 Input Trigger: TI2FP2 【输入触发源选择】*/TIM_SelectInputTrigger(TIM2, TIM_TS_TI1FP1); //参考TIM结构图选择滤波后的TI1输入作为触发源,触发下面程序的复位/* Select the slave Mode: Reset Mode */TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset); / /复位模式-选中的触发输入(TRGI)的上升沿初始化计数器,并且产生一个更新线号/* Enable the Master/Slave Mode */TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_ Enable);//主从模式选择这样我们就可以很轻松的就得到了连接在TIM2的通道1上的信号的频率,但是3通道的频率的值永远都是跳动的不准,测试了半天也没有找到根本原因,请看TIM的结构框图的一部分红色箭头所指,这才找到原因,触发的信号源只有这四种,而通道3上的计数器的值不可能在接受到信号的上升沿时候,有复位这个动作,找到原因了。

STM32定时器-职业教育-

STM32定时器-职业教育-

1
IRS UDIS
0 CEN
位 15:10 保留,始终读为0,
rw rw rw rw rw rw rw rw rw rw
位9:3
CKD[1:O]利钟分频闪子(Clock division) 定义在定时器时钟(CKJNT)赖率与數宁滤波器(ETR. T1x>使用的采样频率之间的分频比佛^
00: tDTS - tcKJWT
F5 』
z
5 入餌数伎〒 TlMx_ARR 寄存F狀5 /
36 K 36
控制寄存器 TIMx CR1
14.4.1 控制寄存器 1 (TIMx_CR1)
偏移地址:0x00 复位位:0x0000
15 14 13 12 11 10 9 8
保留
CKD[1:O]
1
ARPE
65 C_:0]
4
3
DIR 0PM
2
-中央对齐模式(向上/向下计数):计数器从 0开始计数到设定的数值-1,产生一个计数 器 溢出事件,然后向下计数到1并且产生一 个计数器下溢事件;再从0开始重新计数。
CK_INT
_______________________________
______
CNT_EN
____ _nLrurLrLRmLrLRTLrLrLrm
CK_PSC
CNT_EN ____ 定口寸狀时钟-CK CNT 汁数杈奇//然
汁数器洫出 史新率件(UEV)
山新屮断标志(UIF)
n r n ..n .n .n .n n n .n n nnnn厂 厂
ruumjuvuirLiuuLrui
____._______________
TL
n
IM动加级影了寄77器

第六章STM32 定时器的使用

第六章STM32 定时器的使用
}
6.4 定时器实训
定时器控制跑马灯(P190)
1.理解STM32通ห้องสมุดไป่ตู้定时器的结构和基本工作原理; 2.掌握STM32通用定时器初始化和操作方法; 3.理解中断概念; 4.掌握STM3中断服务程序的写法。
硬件设计 硬件连接图如下,实验板上stm32f103x处理器
通过配置GPIO实现如下功能:D3~D6轮流点亮,点亮时 间持续1秒。
TIM2定时器中断配置:
void TIM2_Config(void) //TIM2定时器配置 { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); TIM_DeInit(TIM2); //重设TIM2寄存器默认值 TIM_TimeBaseInitStructure.TIM_Period = 1000-1;//自动重装载计数值; TIM_TimeBaseInitStructure.TIM_Prescaler = (72-1);//时钟分频系数 // TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//采样分频 TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;// TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
预分频器寄存器在事件更新时采用
3)自动装载寄存器:TIMx_ARR
自动装载寄存器是预先装载的(要在使能定时器之前设定好) ,根据在TIMx_CR1寄存器中自动装载使能位(ARPE)的设 置,预装载寄存器的内容立即或者在每次更新事件时传送到

STM32定时器

STM32定时器
void {
TIM6_IRQHandler(void)
if(TIM_GetITStatus(TIM6,TIM_IT_Update)==SET)
{ TIM_ClearITPendingBit(TIM6,TIM_IT_Update); //... } }
Page 15
课堂练习
设计程序,实现定时功能。
Page 7
相关库函数
中断使能
TIM1 TIM2 ... TIM8
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState)
Page 8
常用库函数
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState)
Page 22
typedef struct { uint16_t TIM_Prescaler; uint16_t TIM_CounterMode; uint16_t TIM_Period; uint16_t TIM_ClockDivision; uint8_t TIM_RepetitionCounter;
STM32 定时器
TIMER模块的位置
STM32中一共有8个定时器,其中2 个高级控制定时器,4个普通定时 器和2个基本定时器。
Page 2
定时器时钟来源
72MHz
72MHz
定时器的时钟不是直接来自APB1或APB2 ,而是来自于输入为APB1或APB2的一个倍频 器。 当APB的预分频系数为1时,这个倍频器不 起作用,定时器的时钟频率等于APB的频率; 当APB的预分频系数为其它数值(即预分频系 数为2、4、8或16)时,这个倍频器起作用,定 时器的时钟频率等于APB的频率两倍。

STM32 定时器基本用法TIMer

STM32 定时器基本用法TIMer

STM32 定时器基本用法TIMer2011-03-16 21:20知道STM32定时器很强大,一直没有用,最近学习了一下STM32的定时器,用的都是基本用法,感觉很不错,哈哈哈……PWM 输入捕获等功能暂时还没有使用,等等好好学习学习。

基本定时,定时1S,贴出部分代码,用的中文注释void NVIC_Configuration(void){NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;//更新事件NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;//响应优先级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//允许中断NVIC_Init(&NVIC_InitStructure);}void Timer_Init_My(void){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);TIM_TimeBaseStructure.TIM_Period = 7200;//计数到7200产生更新事件TIM_TimeBaseStructure.TIM_Prescaler = 9999;//APB2 进行10000分频TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseStructure.TIM_RepetitionCounter =0;//重复计价次数TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);TIM_ClearFlag(TIM1,TIM_FLAG_Update);//清除中断,以免一启用就中断TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);//使能TIM1总中断TIM_Cmd(TIM1,ENABLE);//TIM1总中断,开启}void TIM1_UP_IRQHandler(void){GPIO_WriteBit(GPIOE,GPIO_Pin_2,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOE,GPIO_Pin_ 2)));TIM_ClearITPendingBit(TIM1,TIM_FLAG_Update);}然后又试验了定时器的输出比较功能,理解就是计数器一直计数,技术到比较计数器的数值后,就会产生一次中断,然后比较寄存器要加相应的周期,所以TIM_Period 的值设置0xffff,或者把ARR寄存器清零,这样按理说也行,但是我发现必须把TIM_Period 设置为比较寄存器的值,不然我没有成功,两种方法要对应。

STM32通用定时器使用详解

STM32通用定时器使用详解

STM32通用定时器使用详解1.通用定时器基本介绍•通用定时器包括TIM2、TIM3、TIM4和TIM5•STM32通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。

•每个定时器都是完全独立的,没有互相共享任何资源。

它们可以一起同步操作。

•定时器可以进行定时器基本定时,输出4路PWM,输入捕获o本文详细介绍这三个功能并且利用定时器3并且示例代码使用2.开发环境开发平台:keil5单片机:STM32F103ZET63.基本定时功能3.1定时器时钟来源分析STM32部分时钟树:3.1.1 首先我们我们的系统时钟(SYSCLK 72MHz)经过AHB分频器给APB1外设,但是APB1外设最大的只能到36Mhz,所以必须要系统时钟的二分频。

下面又规定了如果APB1预分频系数为1则频率不变,否则频率X2至定时器2~7,所以定时器2~7的时钟频率为还是72MHz3.1.2 分配给我们定时器的时钟是72MHz,我们可以根据自己的需求再设置定时器的分频,设置它的定时值/** 初始化定时器的时候指定我们分频系数psc,这里是将我们的系统时钟(72MHz)进行分频* 然后指定重装载值arr,这个重装载值的意思就是当我们的定时器的计数值达到这个arr时,定时器就会重新装载其他值.例如当我们设置定时器为向上计数时,定时器计数的值等于arr之后就会被清0重新计数* 定时器计数的值被重装载一次被就是一个更新(Update)* 计算Update时间公式Tout = ((arr+1)*(psc+1))/T clk公式推导详解:Tclk是定时器时钟源,在这里就是72Mhz我们将分配的时钟进行分频,指定分频值为psc,就将我们的T clk分了psc+1,我们定时器的最终频率就是T clk/(psc+1) MHz 这里的频率的意思就是1s中记T clk/(psc+1)M个数(1M=10的6次方) ,每记一个数的时间为(psc+1)/Tclk ,很好理解频率的倒数是周期,这里每一个数的周期就是(psc+1)/T clk 秒然后我们从0记到arr 就是 (arr+1)*(psc+1)/T clk举例:比如我们设置arr=7199,psc=9999我们将72MHz (1M等于10的6次方) 分成了(9999+1)等于7200Hz就是一秒钟记录9000数,每记录一个数就是1/7200秒我们这里记录9000个数进入定时器更新(7199+1)*(1/7200)=1s,也就是1s进入一次更新Update*///简单进行定时器初始化,设置预装载值和分频系数void MY_TIM3_Init(u16 arr,u16 psc){//初始化结构体TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//1.分配时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//2.初始化定时器相关配置TIM_TimeBaseStructure.TIM_Period = arr;TIM_TimeBaseStructure.TIM_Prescaler = psc;/*在这里说一下这个TIM_ClockDivision 是设置与进行输入捕获相关的分频设置的这个值不会影响定时器的时钟频率,我们一般设置为TIM_CKD_DIV1,也就是不分频*/TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);//3.打开定时器TIM_Cmd(TIM3,ENABLE);}/****************** 主函数 ********************///在主函数中我们可以调用初始化int main(){//定时器初始化MY_TIM3_Init(7199,9999);while(1){//检测更新标志位if(TIM_GetFlagStatus(TIM3,TIM_IT_Update)){//清除标志位TIM_ClearFlag(TIM3,TIM_IT_Update);//....(每隔一秒执行任务)}}}4.定时器输出PWM4.1基本介绍4.1.1 PWM是脉冲宽度调制,我们是通过改变脉冲的宽度来达到改变输出电压的效果,本质上就是调节占空比实现的,STM32除了基本定时器(TIM6,TIM7)不能输出PWM以外,其它的定时器都具有输出PWM,其中高级定时器(TIM1和TIM8)还能输出7路PWM,基本定时器(TIM2,TIM3,TIM4,TIM5)也可以输出4路PWM输出PWM是很有用的,比如我们可以通过控制电机来玩小车,或者通过输出PWM改变LED的亮度,制造呼吸灯等等4.1.2 我们通用定时器能输出PWM的IO口是固定的,虽然我们可以通过重映射可以改变引脚,具体是哪一些IO口我们要通过查阅STM32的参考手册这里涉及到一个重映射的概念,重映射就是管脚的外设功能映射到另一个管脚,但是不是可以随便映射的,具体对应关系参考手册上的管脚说明。

stm32 timer 用法

stm32 timer 用法

stm32 timer 用法在STM32中使用定时器(Timer)可以实现各种定时、计数、PWM生成等功能。

以下是使用STM32定时器的一般步骤:1. 定义和初始化定时器:```c/* 定义定时器句柄 */TIM_HandleTypeDef htim;/* 初始化定时器 */htim.Instance = TIMx; /* TIMx为对应的定时器 */htim.Init.Prescaler = /* 预分频值 */;htim.Init.CounterMode = /* 计数模式:向上计数、向下计数或双边计数 */;htim.Init.Period = /* 计数周期 */;htim.Init.ClockDivision = /* 输出时钟分频 */;htim.Init.RepetitionCounter = /* 重复计数次数 */;HAL_TIM_Base_Init(&htim);```2. 配置定时器中断:```c/* 配置中断优先级等,并使能对应的中断 */HAL_NVIC_SetPriority(TIMx_IRQn, /* 优先级 */, 0);HAL_NVIC_EnableIRQ(TIMx_IRQn);```3. 启动定时器:```cHAL_TIM_Base_Start_IT(&htim); /* 以中断方式启动 */```4. 编写定时器中断处理函数:```cvoid TIMx_IRQHandler(void){HAL_TIM_IRQHandler(&htim);}void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){if (htim->Instance == TIMx) {/* 定时器周期到达后的处理 */}}```以上是基本的定时器使用方法,具体使用时可以根据实际需求进行配置和处理。

需要注意的是,不同型号的STM32可能存在一些微小的差异,具体使用时可以参考相应型号的参考手册和库函数文档。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Combined PWM mode (5/5)
(Not available in TIM16/17) • Configuration sequence
• Configure the two coupled channels on different PWM modes
• Configure one channel or both coupled channels to output a logical combination of the channels’ waveforms
• Retriggerable OPM mode 1 • Retriggerable OPM mode 2
Channels Coupling (1/2)
• Two coupling schemes:
• Adjacent channels coupling:
• Channel1 and Channel2 coupling • Channel3 and channel4 coupling
7
• Enhanced channels coupling (feature used by Motor Control applications)
• Channel5 and Channel1 • Channel5 and Channel2 • Channel5 and Channel3
• Flexible coupling mechanism on adjacent channels
Coupling between channels is activated
Asymmetric PWM mode (1/3)
(Not available in TIM15/16/17) • Output waveform shape
Up-counting
CCR1 CCR2
9
Down-counting
• Logical And
• Logical Or
15
• Two Combined PWM mode are available
• Combined PWM1 mode
• Combined PWM2 mode
• Different PWM mode on each channel
• In order to get the desired output, the two coupled channels has to be configured with different PWM modes: PWM1 and PWM2
• Pulse length is set using the ARR register
• For Up-counting mode, CCRx register has to be set to zero • For Down-counting mode, CCRx register has to be set to ARR value
Retriggerable One Pulse Mode (1/2)
(Not available in TIM16/17)
5
• Generated waveforms shape
TRGI
Counter
Output
Retriggerable One Pulse Mode (2/2)
(Not available on TIM16/17)
Output Control
OCyREFC
TIM_CHy
Channely
OCyREF
Output Control
OCyM[3:0]
Combined PWM mode (4/5)
(Not available in TIM16/17) • Two logical operators coupling modes:
OC1REF (PWM2)
OC2REF (PWM2)
OC1REFC or OC2REFC
Asymmetric PWM mode (2/3)
(Not available in TIM15/16/17) • Operation mechanism (1/2)
OCxM[3:0]
OCxREF
10
TIM_CHx
Channels Coupling (2/2)
• Available PWM modes
• Each channel among the first four channels can be configured in one of the following PWM modes
• Asymmetric and Combined PWM modes are applicable on coupled channels only
• Configuration sequence
• Set the timer to slave mode: the Combined Reset+Trigger mode shall be used • Select the Retriggerable One Pulse mode through the OCxM[3:0] bit field
• Internal channels
• Not wired to GPIOs • Used within the Timer itself for complex waveform generation • Routed to the ADC triggering logic (via Timer’s TRGO output)
Channel-level enhancements
• Up to 6 channels on Advanced control timers:
• Up to 4 channels with input/output stages (as in TIM2/3/4)
• Channels remain compatible with those on existing products’ timers • New features:
• Channels coupling output can be directed to one channel or to both of them
• Generated Waveforms’ shape
• Frequency control through TIMx_ARR register value • Phase-shift (delay) control through one of the two channels’ TIMx_CCR register • Pulse-length (duty-cycle) control through the second channels’ TIMx_CCR register
• The counting direction selects which channel output to be directed to OCxREFC
• Coupled channel has to be configured in the same PWM mode
11
• Center-aligned counting mode required
• Asymmetric mode is effective only when the timer is configured to count in centeraligned mode
• Available on the following channel couples:
• (Channel1, Channel2) • (Channel3, Channel4)
STM32F3 Technical Training
For reference only
Refer to the latest documents for details
STM32F30x Specific features/peripherals
Timers’ enhancements in STM32F30X
• Compare-and-PWM-modes-only channels
• No capture modes • No DMA channels nor Interrupt request lines
• High coupling with channels 1,2,3 and4
• Enhance waveform generation on those channel: More complex waveforms can be generated • Enhanced triggering mechanism: ADC oriented triggering mechanism • Designed to meet many Motor Control applications’ requirements
• If the same PWM mode is configured on both channels, the output signal waveform is similar to one of the two channels waveforms depending on the Logical Operator applied
6
• Available on Channel 1, 2, 3 and 4
• Different from the existing One Pulse mode:
• The outputted pulse starts as soon as a trigger active edge is detected • The pulse length is extended if a new active edge is detected
相关文档
最新文档