TIM定时器

定时器可以对输入的时钟进行计数,并在计数值到达设定值时触发中断。

16位计数器,预分频器,自动重装寄存器的时基单元,在72MHZ计数时钟下可以实现最大59.65s的定时。不仅具备基本的定时中断功能,而且还包含内外时钟源选择,输入,捕获,输出比较,编码器接口,主从触发模式等多种功能。

void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); //配置时基单元 TIMX选择定时器,TIM_TimeBaseInitStruct配置结构体参数

void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);//把结构体赋一个默认值

void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);//使能计数器 对应上图运行控制

void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);//使能中断输出

void TIM_InternalClockConfig(TIM_TypeDef* TIMx);//选择内部时钟源


void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);//其他定时器


void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
                                uint16_t TIM_ICPolarity, uint16_t ICFilter);//捕获通道


void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,  uint16_t ExtTRGFilter);//外部时钟模式1


void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler,   uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);//外部时钟模式2


void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);

void TIM_PrescalerConfig(TIM_TypeDef* TIMX ,uint16_t Prescler, uint16_t TIM_PSCReloadmode);

void TIM_CounterModeConfig(TIM_TypeDef* TIMx,uint16_t TIM_CounterMode);

第一步:RCC开启时钟,定时器的基准时钟和整个外设的工作时钟都会同时打开

第二步:选择时基单元的时钟源
第三步:配置时基单元,包括内分频器,自动重装器,计数器等
第四步:配置输出中断控制,允许更新中断输出到 NVIC

第五步:配置NVIC 在nvic中打开定时器中断通道并分配一个优先级

void Timer_Init(){

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//开启TMI2时钟

TIM_InternalClockConfig(TIM2);//开启内部时钟

TIM_ETRColckConfig(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;//        ARR

TIM_TimeBaseInitStructure.TIM_prescaler=7200-1;//分频

TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;//重复计数

TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure)

TIM_ITConfig(TIM2,TIM_IT_Updata,ENABLE);//使能中断 ,开启更新中断

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

NVIC_InitTypeDef  NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_InitStructure.NVIC_IRQChannelPreemtionPriority=2

NVIC_InitStructure.NVIC_IRQChannelSubPriority=1

NVIC_Cmd(TIM2,ENABLE);

}

void TIM2_IRQHandler(void){

if(TIM_GetITStatus(TIM2,TIM_IT_UPdata)==SET){

NUM++;

TIM_ClearITPendingBit(TIM2,TIM_IT_Update);

}

}

 

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值