通用定时器的介绍

1、STM32F1的定时器非常多,由2个基本定时器(TIM6、TIM7)、4个通 用定时器(TIM2-TIM5)和 2个高级定时器(TIM1、TIM8)组成。

2、通用定时器是在基本定时器的基础上扩展而来,增加了输入捕获与输出比较等功能通用定时器主要由计数部分、触发控制器、捕获/比较模块组成

计数部分的核心是计数器,受预分频器输出的信号(CK_CNT)驱动,实现向上、向下、对齐模式的自动装载计数。

预分频器输入由触发控制器控制,可选内部时钟、外部触发输入、内部触发接口、外部输入,这是实现各种从模式的关键部分。

捕获/比较模块是实现通用定时器各种输入输出的功能部分,主要分为输入部分、输出部分和模式控制部分。

3、下图是通用定时器的框图:
通用定时器的介绍_第1张图片

 

通用定时器的时钟源有四种:

内部时钟(CK_INT):挂在APB1总线上(36M),为最常用的时钟,一般经2分频后为72M

外部触发输入(ETR),可对外部引脚ETR的上升/下降沿数进行计数。(外部时钟模式2

内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。

外部输入脚(TIx):来源于TIx映射的GPIO,可对该口的上升/下降沿数进行计数。(外部时钟模式1

计数模式

向上模式:计数器(CNT)0计到ARR,产生溢出事件;

向下模式:计数器(CNT)ARR计到0,产生下溢事件;

对齐模式:计数器(CNT)0计到ARR-1,产生溢出事件;再从ARR计到1,产生下溢事件。


4、通用定时器的功能

通用定时器的介绍_第2张图片

5、通用定时器配置步骤

1)使能定时器时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能TIM4时钟

2)初始化定时器参数,包含自动重装值,分频系数,计数方式等

voidTIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef*TIM_TimeBaseInitStruct);

typedef struct

{

  uint16_tTIM_Prescaler;  //定时器预分频器(06553516位)

 uint16_t TIM_CounterMode; //计数模式(向上、向下、对齐)

 uint32_t TIM_Period;    //定时器周期

 uint16_t TIM_ClockDivision; //时钟分频

 uint8_t TIM_RepetitionCounter;  //重复计数器(只针对高级定时器)

} TIM_TimeBaseInitTypeDef;


 (3)设置定时器中断类型,并使能

void TIM_ITConfig(TIM_TypeDef* TIMx,uint16_t TIM_IT, FunctionalState NewState)

4)设置定时器中断优先级,使能定时器中断通道

NVIC初始化库函数是NVIC_Init()

5)开启定时器

void TIM_Cmd(TIM_TypeDef* TIMx,FunctionalState NewState);

6)编写定时器中断服务函数

TIM4_IRQHandler  //通过启动文件查找

ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx,uint16_t TIM_IT);

if(TIM_GetITStatus(TIMx,TIM_IT_Update))  

       {

              ...//执行TIMx更新中断内控制

       }

void TIM_ClearITPendingBit(TIM_TypeDef*TIMx, uint16_t TIM_IT);

其中TIM_GetFlagStatusTIM_ClearFlag这两个函数是用来读取状态标志位以及清除中断标志位,可以通过固件库查找。

你可能感兴趣的:(STM32F1)