STM32通用定时器(TIM2-5)基本用法

合集下载

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通用定时器原理及应用

STM32通用定时器原理及应用

一、通用定时器原理STM32系列的CPU,有多达8个定时器,其中TIM1和TIM8是能够产生三对PWM 互补输出的高级定时器,常用于三相电机的驱动,它们的时钟由APB2的输出产生。

其它6个为普通定时器,时钟由APB1的输出产生。

下图是STM32参考手册上时钟分配图中,有关定时器时钟部分的截图:实际上STM32的CPU文档给出的图与这个图略有区别。

但是我们还是想研究这个图。

原因是这个图对我们思路的理解比较有帮助。

从图中可以看出,定时器的时钟不是直接来自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提供时钟,而且还要为其它外设提供时钟;设置这个倍频器可以在保证其它外设使用较低时钟频率时,TIM2~7仍能得到较高的时钟频率。

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

如果APB1的预分频系数=2,则因为这个倍频器,TIM2~7仍然能够得到72MHz 的时钟频率。

能够使用更高的时钟频率,无疑提高了定时器的分辨率,这也正是设计这个倍频器的初衷。

stm32 timer 用法

stm32 timer 用法

stm32 timer 用法摘要:1.引言2.STM32定时器简介3.STM32定时器工作原理4.STM32定时器配置与使用5.STM32定时器应用实例6.总结正文:1.引言STM32是一款广泛应用于嵌入式系统的微控制器,拥有丰富的外设资源。

其中,定时器(Timer)是STM32外设中非常关键的部分,它在系统时钟、输入捕捉、输出比较、PWM等功能中起着举足轻重的作用。

本文将详细介绍STM32定时器的用法。

2.STM32定时器简介STM32定时器主要包括基本定时器(Basic Timer)、高级定时器(Advanced Timer)和看门狗定时器(Watchdog Timer)。

其中,基本定时器主要用于系统时钟的生成和控制;高级定时器具有更多的功能,如输入捕捉、输出比较、PWM等;看门狗定时器用于检测系统的运行状态,防止系统崩溃。

3.STM32定时器工作原理STM32定时器的工作原理主要基于计数器、预分频器和比较器。

计数器用于记录定时器滴答(Tick)的数量;预分频器用于控制定时器滴答频率;比较器用于产生定时器溢出信号。

当定时器溢出时,定时器硬件会自动产生中断,通过编程可以设置相应的中断处理程序,实现特定功能。

4.STM32定时器配置与使用配置STM32定时器主要包括以下步骤:(1)使能定时器:通过设置相应寄存器位,使能定时器;(2)配置定时器工作模式:根据需求选择定时器工作模式,如计数模式、PWM模式等;(3)配置定时器时钟源:选择定时器时钟源,如内部时钟、外部时钟等;(4)配置定时器预分频器:设置定时器预分频器值,以满足定时器滴答频率要求;(5)配置比较器:设置比较器值,以产生定时器溢出信号;(6)配置中断:根据需求配置定时器中断,如使能中断、设置优先级等。

5.STM32定时器应用实例以下是一个简单的STM32定时器应用实例:使用STM32F103C8T6微控制器实现一个LED闪烁的程序。

(1)配置定时器:使能定时器TIM2,设置工作模式为计数模式,时钟源为内部时钟,预分频器值为72000,比较器值为65536。

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设置定时器TIM2

STM32设置定时器TIM2

STM32如何设置定时器STM32如何设置定时器下面以stm32的TIM2作为实例一步步配置成为定时器:第一种对定时器的基本配置TIM_TimeBaseStructure.TIM_Period = 1000;//设置自动装载寄存器TIM_TimeBaseStructure.TIM_Prescaler = 35999; //分频计数TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//选择向上计数TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_Cmd(TIM2, ENABLE); //是能定时器始能定时器的中断:TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);在开启时钟里一定要打开TIM2的时钟,函数表达式如下:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);4:中断向量函数的编写:void NVIC_Configuration(void){NVIC_InitTypeDef NVIC_InitStructure;#ifdef VECT_TAB_RAM //如果程序在ram中调试那么定义中断向量表在Ram 中否则在Flash中NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);#else /* VECT_TAB_FLASH *//* Set the Vector Table base location at 0x08000000 */NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);#endif/* Enable the TIM2 global Interrupt */NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}5:中断函数的编写:当有TIM2的无论哪个中断触发中断发生那么就会进入这个函数TIM2_IRQHandler(void)所以这个更新事件的中断判断要依靠以下语句:if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)按照以上步骤配置可以顺利进行定时器的基本定时应用第二种方法:/* Enable TIM2 Update interrupt [TIM2溢出中断允许]*/ TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE);中断中的设置为:if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)。

STM32CubeMX定时器的操作

STM32CubeMX定时器的操作
/** * @brief This function handles TIM interrupts requests. * @param htim : TIM handle * @retval None */
void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim) {
这样算就很好。
为了加深印象,我们另外再选择一组参数来实现同样的效果。预分频器指定为 24000,而计数器指定为 2000,定时器完成一轮计数所花的时间也是 1 秒。
下面的图显示了如何配置参数
为什么要减 1 呢,0 到 999 不恰好就是 1000 个数么? 如果要产生中断的话,还要设置 NVIC,如下图
功能代码
好了,生成工程文件后,我们要加入让 TIM2 工作的代码了,毕竟 STM32CubeMX 只是一个初始化器。
在 main.c 里面添加如下代码:
/* USER CODE BEGIN 2 */
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); HAL_TIM_Base_Start_IT(&htim2);
{ if(__HAL_TIM_GET_ITSTATUS(htim, TIM_IT_CC4) !=RESET) { __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC4); htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; /* Input capture event */ if((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00) { HAL_TIM_IC_CaptureCallback(htim); } /* Output compare event */ else { HAL_TIM_OC_DelayElapsedCallback(htim); HAL_TIM_PWM_PulseFinishedCallback(htim); } htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

第八章 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 不为零,就是系统时钟的一半。

05_STM32F4通用定时器详细讲解

05_STM32F4通用定时器详细讲解

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)SYSCLK(最高AHB_Prescaler APBx_Prescaler作用:1使能自动重载TIM3_ARR2定时器的计数器递增或递减计数。

第六章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)

HAL库的学习——定时器的使用

HAL库的学习——定时器的使用

HAL库的学习——定时器的使用HAL库是ST公司为STM32系列单片机提供的一套软件开发工具,通过HAL库可以方便地使用STM32系列单片机的各种功能和外设。

其中,定时器是STM32系列单片机中非常重要的一个外设,它可以用于产生定时中断、计时等应用。

要使用STM32的定时器功能,首先需要选择一个合适的定时器,然后配置定时器的时钟源、分频系数和计数器的自动重载值等参数,最后使能定时器并设置相应的中断以及相关的回调函数。

在HAL库中,定时器的使用主要包括以下几个步骤:1.选择合适的定时器:STM32系列单片机中提供了多个定时器,根据实际需求选择一个合适的定时器。

例如,如果需要高精度的定时,可以选择TIM2或TIM5;如果需要简单的定时中断,可以选择TIM6或TIM72.配置定时器参数:配置定时器时钟源、分频系数和计数器的自动重载值等参数。

通常,定时器的时钟源可以选择内部时钟(晶振频率)或外部时钟(外部信号);分频系数用于设置定时器的工作频率,可以根据实际应用需要进行调整;计数器的自动重载值用于设置定时的时间长度。

3. 初始化定时器:通过调用HAL_TIM_Base_Init函数进行定时器的初始化。

在该函数中会根据配置的参数对定时器进行初始化,并将定时器的状态设置为READY。

4. 设置中断和回调函数:根据实际需求,可以选择使能定时器的中断,并设置相应的中断回调函数。

可以通过调用HAL_TIM_Base_Start_IT 函数来使能定时器的中断,并通过HAL_TIM_PeriodElapsedCallback函数来设置定时器中断的回调函数。

5. 启动定时器:通过调用HAL_TIM_Base_Start函数启动定时器。

在定时器启动后,计数器开始计数,当计数器达到自动重载值时,定时器将产生中断,并执行相应的中断回调函数。

6.处理定时中断:在定时器中断发生后,将会执行之前设置的中断回调函数。

可以在中断回调函数中编写相应的处理代码,例如更新定时器的自动重载值、改变定时的周期等。

定时器的使用方法

定时器的使用方法

定时器的使用方法定时器是一种常用的工具,它可以在特定的时间间隔内执行某个任务或者动作,比如定时关闭电脑、定时播放音乐等。

在日常生活和工作中,我们经常会用到定时器,因此掌握定时器的使用方法是非常重要的。

下面,我将为大家介绍定时器的使用方法,希望能够帮助大家更好地利用定时器。

首先,我们需要了解定时器的基本原理。

定时器是通过设定一个时间间隔,当时间到达设定的间隔时,就会触发相应的操作。

在计算机领域,定时器通常是通过编程语言或者操作系统提供的接口来实现的。

在其他领域,比如家用电器、手机应用等,定时器也是通过相应的设备或者软件来实现的。

在计算机编程中,定时器的使用方法通常包括以下几个步骤:1. 初始化定时器,首先,我们需要初始化定时器,设置时间间隔和触发的操作。

这通常包括设置定时器的周期、触发条件等参数。

2. 启动定时器,一旦定时器初始化完成,我们就可以启动定时器,让它开始工作。

在计算机编程中,通常是调用相应的函数或者方法来启动定时器。

3. 处理定时器触发事件,当定时器的时间间隔到达时,就会触发相应的事件。

在编程中,我们通常会编写相应的处理函数来处理定时器触发的事件。

4. 停止定时器,在某些情况下,我们可能需要停止定时器的工作。

这通常是通过调用相应的函数或者方法来实现的。

除了计算机编程中的定时器使用方法,我们在日常生活中也经常会用到定时器。

比如,定时器可以用来设置闹钟、定时关闭电视、定时煮饭等。

在手机应用中,定时器也经常被用来设置提醒、定时播放音乐等功能。

在家用电器中,定时器也被广泛应用,比如洗衣机的定时洗涤功能、空调的定时开关机功能等。

总的来说,定时器是一种非常实用的工具,它可以帮助我们在特定的时间间隔内执行某个任务或者动作。

掌握定时器的使用方法,可以让我们更好地利用定时器,提高工作和生活的效率。

希望通过本文的介绍,大家能够更加了解定时器的使用方法,从而更好地应用定时器。

stm32寄存器版学习笔记定时计数器中断

stm32寄存器版学习笔记定时计数器中断

stm32寄存器版学习笔记定时计数器中断STM32共有8个定时计数器,⾼级定时器: TIME1 TIME8是通⽤定时器:TIME2~TIME5基本定时器: TIME6和TIME7以TIME3通⽤定时器为例总结定时计数器的基本⽤法⼀:TIM3时钟使能APB1外设时钟使能寄存器(RCC_APB1ENR)Eg:RCC->APB1ENR|=1<<1; //使能TIM3时钟⼆:设置TIM3_ARR和TIM3_PSC的值通过这两个寄存器来设置⾃动重装的值以及分频系数⾃动重装载寄存器(TIMx_ARR)预分频器(TIMx_PSC)三:设置TIM3_DIER允许更新中断中断使能寄存器(TIMx_DIER)Eg: TIM3->DIER|=1<<0; //允许更新中断四:允许TIM3⼯作控制寄存器1(TIMx_CR1)CEN:使能计数器位0 0:禁⽌计数器; 1:使能计数器Eg: TIM3->CR1|=0x01; //使能定时器3 或 TIM3->CR1|=1<<0;五:TIM3中断分组设置直接调⽤MY_NVIC_Init()函数Eg:MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//抢占1,⼦优先级3,组2六:编写中断服务函数状态寄存器(TIMx_SR)Eg: if(TIM3->SR&0X0001)//溢出中断Eg: //定时器3中断服务程序 void TIM3_IRQHandler(void) //TIM3_Int_Init(5000,7199); //10Khz的计数频率,计数到5000为500ms//500ms中断⼀次 { if(TIM3->SR&0X0001) //溢出中断 { //add your code } TIM3->SR&=~(1<<0); //清除中断标志位 }六:关于溢出事件的计算因为Stm32_Clock_Init函数⾥⾯已经初始化APB1的时钟为2分频,所以APB1的时钟是32MHz(系统时钟72MHz)。

5-1 STM32F4的定时器

5-1 STM32F4的定时器
5.1 STM32F4的定时器
STM32F4的定时器
STM32F4共有14个定时器,功能十分强大。有以下3个类型定时器: 1. 高级定时器 TIM1和TIM8,这2个是32位的高级定时器。 2. 通用定时器 TIM2~TIM5、TIM9~TIM14,这10个是16位的通用定时器。 3. 基本定时器 TIM6和TIM7,这2个是基本定时器。
STM32F4的定时器
1. 基本定时器(TIM6和TIM7) 基本定时器有很多用途,包括测量输入信号的脉冲宽度(输入捕获)或生 成输出波形(输出比较和PWM)。 另外,基本定时器不仅可用作通用定时器以生成时基,还可以专门用于驱 动数模转换器(DAC)。
2. 通用定时器(TIM2~TIM5、TIM9~TIM14) 通用定时器可用于测量输入信号的脉冲长度(输入捕获)或者产生输出波 形(输出比较和PWM)等多种场合。
STM32F4的定时器
3. 高级定时器(TIM1和TIM8) 高级定时器可用于各种用途,包括测量输入信号的脉冲宽度(输入捕获); 或者生成输出波形(输出比较、PWM和带死区插入的互补PWM)等。
在实际应用中,可通过选用不同的定时器来实现相应功能。 比如要开பைடு நூலகம்一个直流无刷电机控制器,就可以选用高级定时器,利用其可 以产生带死区插入的互补PWM的功能,实现三相桥的控制。
感谢
谢谢,精品课件
资料搜集

stm32定时器原理

stm32定时器原理

stm32定时器原理STM32定时器是一种用于计时和计数的重要功能模块,广泛应用于各种嵌入式系统中。

本文将介绍STM32定时器的原理及其应用。

一、STM32定时器的基本原理STM32定时器是基于计数器的工作原理,通过内部时钟源的驱动,实现对计数器的计数和定时功能。

STM32定时器主要有以下几个核心组件:1.1 时钟源:STM32定时器可以选择多种时钟源,如内部时钟、外部时钟或外部时钟源经过分频后的时钟。

时钟源的选择取决于应用的需要和系统的设计。

1.2 预分频器:预分频器用于将时钟源的频率进行分频,以获得更低的计数频率。

预分频器的分频系数可以通过配置来设置,从而满足不同的计数需求。

1.3 自动重装载寄存器(ARR):ARR用于设置定时器的计数周期,即定时器从0开始计数到ARR的值时就会触发中断或产生某种事件。

通过设置ARR的值,可以实现不同的定时功能。

1.4 计数器:计数器是STM32定时器的核心部件,用于进行实际的计数操作。

计数器的位数根据不同型号的STM32芯片而有所不同,常见的有16位和32位两种。

1.5 输出比较单元(OCU):OCU用于产生定时器的输出信号。

可以通过配置OCU的工作模式、比较值和输出极性等参数,实现各种不同的输出功能。

二、STM32定时器的应用STM32定时器广泛应用于各种嵌入式系统中,常见的应用场景包括:2.1 定时中断:通过设置定时器的ARR值和使能中断,可以实现定时中断功能,用于周期性地执行某些任务或操作。

例如,可以利用定时中断来定时采样、定时发送数据或定时更新显示等。

2.2 脉冲计数:通过配置STM32定时器的输入捕获单元(ICU),可以实现对外部脉冲信号的计数。

这在一些需要测量脉冲频率或脉冲宽度的应用中非常有用,如测速仪、计时器等。

2.3 PWM输出:通过配置STM32定时器的输出比较单元,可以实现PWM信号的输出。

PWM信号广泛应用于电机控制、LED调光、音量控制等场景,具有调节精度高、功耗低的特点。

第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
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
由上图可知,当 APB1 的预分频系数为 1 时,这个倍频器不起作用,定时器的时钟频率等 于 APB1 的频率;当 APB1 的预分频系数为其它数值(即预分频系数为 2、4、8 或 16)时, 这个倍频器起作用,定时器的时钟频率等于 APB1 的频率两倍。也就是,当 APB1 不分频, TIM3 的时钟速度为 36MHz,当 2 分频是,APB1 变成 18MHz,但是 TIM 又会倍频,即 TIM 时钟等于 18*2=36MHz。这里我们用向上计数的方式,即 TIMx_CNT 中的计数值达到 TIMx_ARR 中的值时,产生中断,TIMx_CNT 又从 0 开始计。 按以下步骤编程: 1.系统初始化,主要初始化时钟等。 2.GPIO 初始化,用于 LED,有了灯就便于观察了。 3.TIM3 的配置。 4.NVIC 的配置。 5.编写中断服务函数。
if(TIM_GetITStatus(TIM3 , TIM_IT_Update) == SET) { TIM_ClearITPendingBit(TIM3 , TIM_FLAG_Update); if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8)) GPIO_ResetBits(GPIOA, GPIO_Pin_8); else GPIO_SetBits(GPIOA, GPIO_Pin_8); } } //注意使能定时器时钟
void TIMER3_Init() { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_DeInit(TIM3); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_TimeBaseStructure.TIM_Period=10000;//ARR 的值 TIM_TimeBaseStructure.TIM_Prescaler=7200-1; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); TIM_Cmd(TIM3, ENABLE); //开启时钟 }
void GPIO_PA_Init() {//PA8 管脚配置 GPIO_InitTypeDef GPIO_InitStructure; GPIO_DeInit(GPIOA); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP ;//推挽输出 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);//使能端口时钟 A GPIO_Init(GPIOA, &GPIO_InitStructure); }
void NVIC_Configuration() { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); // 抢占式优先级别 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel;//指定中断源 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;// 指定响应优先级别 1 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }
int main(void) { Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化 GPIO_PA_Init(); TIMER3_Init(); NVIC_Configuration(); while(1); }
void TIM3_er() {
STM32 通用定时器(TIM2-5)基本用法
STM32 的定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基 本的定时,还可以做 PWM 输出或者输入捕获功能。从系统框架图下看,名为 TIMx 的有八 个,其中 TIM1 和 TIM8 挂在 APB2 总线上,而 TIM2-TIM7 则挂在 APB1 总线上。其中 TIM1&TIM8 称为高级控制定时器(advanced control timer).他们所在的 APB2 总线也比 APB1 总线要好。APB2 可以工作在 72MHz 下,而 APB1 最大是 36MHz。
相关文档
最新文档