概述
本篇主要介绍STM32的一个重要的外设——TIM定时器,如果把一个芯片比作一个人的话,那么定时器就好比人的心脏,可见TIM对于STM32的重要性!
TIM简介:
·定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断。
·16位计数器CNT、预分频器PSC、自动重装寄存器ARR的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时。
·定时器不仅具备基本的定时中断功能,而且还包含内外时钟源选择,输入捕获、输出比较、编码器接口、主从触发模式等多种功能。
·定时器分为基本定时器(TIM6,TIM7)、通用定时器(TIM2,TIM3,TIM4,TIM5)、高级定时器(TIM1,TIM8)。
在进行定时器初始化配置的时候需要知道你的芯片具备哪些定时器资源,例如STM32F103C8T6定时器资源:TIM1,TIM2,TIM3,TIM4
基本定时器
可以这么理解,定时器通过选择内部时钟(72MHz),经过一个触发控制器,再经过PSC预分频器得到CK_CNT,每多少频率记一次数,当达到自动重装载寄存器(ARR)的值时,就可以触发一个中断或者一个事件。但是基本定时器不具备输入捕获和输出比较等功能。
通用定时器
通用定时器的时钟源的选择就很多了,可以选择内部时钟也可以选择外部时钟或者其他定时器等,同样是经过一个触发控制器,在这个触发控制器里面可以选择计数模式,复位,使能等功能,然后通过PSC分频和CNT计数来控制中断和事件的产生,另外通用定时器可以输入捕获和输出比较的功能,在后续的文章中会向大家说明。
高级定时器
高级定时器有通用定时器的所有功能,还有其他功能这里不再进行叙述。
定时中断基本结构
首先需要就是时钟源的选择,可以选择RCC内部时钟,或者如果是通用定时器,高级定时器,还可以选择ETR外部时钟,ITRx其他定时器,TIx捕获通道等,接下来就是配置时基单元(PSC,CNT,ARR寄存器),然后就是到达ARR设定的值之后,产生一个中断或者事件,如果是一个中断的话,需要对中断输出控制,然后NVIC的配置,最后不要忘了对定时器使能。具体的配置结构图如下:
具体的初始化代码如下:
#include "stm32f10x.h" // Device header
void Timer_Init(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_InternalClockConfig(TIM2);
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1;
TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
TIM_ClearFlag(TIM2, TIM_FLAG_Update);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM2, ENABLE);
}
具体的中断服务函数如下:
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
{
//这里面写中断要执行的代码
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
}
}
以上就是定时器中断
最后
以上就是儒雅咖啡豆为你收集整理的STM32F103系列之定时器TIM的全部内容,希望文章能够帮你解决STM32F103系列之定时器TIM所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复