TIM模块

一、概述

时基单元,也就是决定了定时器的基本功能的模块包含:
1.计数器寄存器(Counter register,简写为TIMx_CNT)
2.预分频器寄存器 (Prescaler register,简写为TIMx_PSC)
3.自动装载寄存器 (Auto-reload register,简写为TIMx_ARR)
4.重复次数寄存器 (Repetition counter register,简写为TIMx_RCR),只有高级定时器有。

 

二、影子寄存器

图中有阴影的寄存器(PSC、ARR、CCRx、RCR)其实存在两个:一个是可读写的寄存器,称为预装载寄存器,另一个无法真正读写,但使用中真正起作用的寄存器,称为影子寄存器。

当更新事件产生是,影子寄存器被更新为预装载寄存器的内容,这样设计保障多个通道的时序同步。

更新事件(UEV)的产生:计数器溢出(如果使用了重复计数器功能,则重复计数器减一,直到为0,产生更新事件);设置事件产生寄存器TIMx_EGR 中的UG位;从模式控制器产生。

设置TIMx_CR1寄存器中的UDIS位,可以禁止更新事件,如果设置UG位或从模式控制器发出了一个硬件复位,则计数器和预分频器被重新初始化。

设置了TIMx_CR1寄存器中的URS位,则只有计数器溢出/下溢才产生更新中断或DMA请求。

三、寄存器配置

TIM_TimeBaseStructure.TIM_Period = 0xFFFF; //自动装载值
TIM_TimeBaseStructure.TIM_Prescaler = 0; //预分频
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //数字滤波器不分频 ①
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

①数字滤波器用的采样时钟tDTS 和定时器时钟tCK_INT的关系。假设数字滤波器的频率为1M,N=8,则频率大于1MHz/8=125KHz(持续时间小于8us)的脉冲都会被忽略,可消除毛刺。

输入捕获:

TIM_ICInitStructure.TIM_Channel = TIM_Channel_1; //IC1通道
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //TI1映射在IC1上
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //捕获不分频
TIM_ICInitStructure.TIM_ICFilter = 0x0; //无滤波器
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling; //捕获下降沿
TIM_ICInit(TIM1, &TIM_ICInitStructure);

TIM_ITConfig(TIM1, TIM_IT_Update|TIM_IT_CC1,ENABLE);

中断函数:

void TIM1_IRQHandler(void)
{
  if (TIM_GetITStatus(TIM1, TIM_IT_CC1) == SET)
  {
    TIM_ClearITPendingBit(TIM1, TIM_IT_CC1);

  }
  else if (TIM_GetITStatus(TIM1, TIM_IT_Update) == SET)
  {
    TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
  }
}

 

转载于:https://www.cnblogs.com/deuslibra/p/4538669.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值