Stm32学习笔记—TIM部分

1、通用定时器(TIM)

通用定时器是一个通过可编程预分频器驱动的16 位自动装载计数器构成。它适用于多种场合,包括测量输入信号的脉冲长度(输入采集)或者产生输出波形(输出比较和PWM)。使用定时器预分频器和RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。定时器是完全独立的,而且没有互相共享任何资源。

2、SCB是MDK库文件里面定义的一个结构体,subsystem control block子系统管理模块

3、TIMER主要是由三部分组成:时基单元、输入捕获、输出比较,还有两种模式控制功能:从模式控制和主模式控制。

4、定时器的计数模式:

向上计数模式,

向下计数模式,在向下模式中,计数器从自动装入的值(TIMx_ARR计数器的值)开始向下计数到0,然后从自动装入的值重新开始并且产生一个计数器向下溢出事件。

每次计数器溢出时可以产生更新事件,在TIMx_EGR寄存器中设置UG位(通过软件方式或者使用从模式控制器)也同样可以产生一个更新事件。

设置TIMx_CR1寄存器的UDIS位可以禁止UEV事件。这样可以避免向预装载寄存器中写入新值时更新影子寄存器。因此UDIS位被清为0之前不会产生更新事件。然而,计数器仍会从当前自动加载值重新开始计数,同时预分频器的计数器重新从0开始(但预分频器的速率不能被修改)。

此外,如果设置了TIMx_CR1寄存器中的URS位(选择更新请求) ,设置UG位将产生一个更新事件UEV但不设置UIF标志(因此不产生中断和DMA请求),这是为了避免在发生捕获事件并清除计数器时,同时产生更新和捕获中断。

当发生更新事件时,所有的寄存器都被更新,并且(根据URS位的设置)更新标志位(TIMx_SR寄存器中的UIF位)也被设置。

中央对齐模式,

5、时基单元包含:

计数器寄存器(TIMx_CNT)

预分频器寄存器 (TIMx_PSC),预分频器可以将计数器的时钟频率按1到65536之间的任意值分频。

自动装载寄存器 (TIMx_ARR),自动装载寄存器是预先装载的,写或读自动重装载寄存器将访问预装载寄存器。根据在TIMX_CR1寄存器中的自动装载预装载使能位(ARPE)的设置,预装载寄存器的内容被立即或在每次的更新事件UEV时传送到影子寄存器。

6.可设置时长的定时器的方法

设置计数器的时钟频率。

设置计数器的计数初值。

打开计数器开始计数。开启中断。

执行中断服务程序

7、通用定时器的时钟来源:

内部时钟(CK_INT)

外部时钟模式1:外部输入脚(TIx)

外部时钟模式2:外部触发输入(ETR)

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

8、计数器时钟频率的计算方法

outside_default.png

9、从库函数角度设置定时时间

(1)Timx时钟使能:通用定时器挂在APB1下,通过APB1总线的使能函数来使能,函数为RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,enable)

(2)初始化定时器参数:设置自动重装值、分频系数和计数方式等,函数原形为:

TIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)

功能描述:根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位,输入参数1,TIMx:x可以是2,3或者4,来选择TIM外设;输入参数2TIM-TimeBase_InitStruct:指向结构TIM_TimeBaseInitTypeDef的指针,包含了TIMx时间基数单位的配置信息。TIM_TimeBaseInitTypeDef定义于文件“stm32f10x_tim.h”:

typedef struct

{

u16 TIM_Period;

u16 TIM_Prescaler;

u8 TIM_ClockDivision;

u16 TIM_CounterMode;

} TIM_TimeBaseInitTypeDef;

TIM_Period设置了在下一个更新事件装入活动的自动重装载寄存器周期的值。它的取值必须在0x0000和0xFFFF之间。

TIM_Prescaler

TIM_Prescaler设置了用来作为TIMx时钟频率除数的预分频值。它的取值必须在0x0000和0xFFFF之间。

TIM_ClockDivision

TIM_ClockDivision设置了时钟分割

(3)设置timx-dier允许更新中断:函数原形void TIM_ITConfig(TIM_TypeDef* TIMx, u16 TIM_IT, FunctionalState NewState)功能描述,使能或者失能指定的TIM中断,输入参数1TIMx:x可以是2,3或者4,来选择TIM外设;输入参数2,TIM_IT:待使能或者失能的TIM中断源,输入参数3NewState:TIMx中断的新状态,这个参数可以取:ENABLE或者DISABLE

输入参数TIM_IT使能或者失能TIM的中断。可以取下表的一个或者多个取值的组合作为该参数的值。TIM_IT_Update TIM中断源,TIM_IT_CC1 TIM捕获/比较1中断源,TIM_IT_CC2 TIM捕获/比较2中断源,TIM_IT_CC3,TIM捕获/比较3中断源TIM_IT_CC4 TIM捕获/比较4中断源,TIM_IT_Trigger TIM触发中断源

(4) 设置中断优先级,在nvic的寄存器中设置

(5)使能timx

(6)编写中断服务函数

10、TIM_ClearFlag 函数原形void TIM_ClearFlag(TIM_TypeDef* TIMx, u32 TIM_FLAG)

功能描述,清除TIMx的待处理标志位,输入参数1,TIMx:x可以是2,3或者4,来选择TIM外设,输入参数2,TIM_FLAG:待清除的TIM标志位

TIM_FLAG值:

TIM_FLAG_Update TIM更新标志位

TIM_FLAG_CC1 TIM捕获/比较1标志位

TIM_FLAG_CC2 TIM捕获/比较2标志位

TIM_FLAG_CC3 TIM捕获/比较3标志位

TIM_FLAG_CC4 TIM捕获/比较4标志位

TIM_FLAG_Trigger TIM触发标志位

TIM_FLAG_CC1OF TIM捕获/比较1溢出标志位

TIM_FLAG_CC2OF TIM捕获/比较2溢出标志位

TIM_FLAG_CC3OF TIM捕获/比较3溢出标志位

TIM_FLAG_CC4OF TIM捕获/比较4溢出标志位

11、函数名:TIM_GetCounter

函数原形:u16 TIM_GetCounter(TIM_TypeDef* TIMx)

功能描述:获得TIMx计数器的值

输入参数:TIMx:x可以是2,3或者4,来选择TIM外设

12、函数名TIM_ GetITStatus

函数原形TIM_GetITStatus(TIM_TypeDef* TIMx, u16 TIM_IT)

功能描述检查指定的TIM中断发生与否

输入参数1TIMx:x可以是2,3或者4,来选择TIM外设

输入参数2TIM_IT:待检查的TIM中断源

13、函数名TIM_ITConfig

函数原形void TIM_ITConfig(TIM_TypeDef* TIMx, u16 TIM_IT, FunctionalState NewState)

功能描述使能或者失能指定的TIM中断

输入参数1TIMx:x可以是2,3或者4,来选择TIM外设

输入参数2TIM_IT:待使能或者失能的TIM中断源

输入参数3NewState:TIMx中断的新状态

这个参数可以取:ENABLE或者DISABLE

TIM_IT

TIM_IT_UpdateTIM中断源

TIM_IT_CC1TIM捕获/比较1中断源

TIM_IT_CC2TIM捕获/比较2中断源

TIM_IT_CC3TIM捕获/比较3中断源

TIM_IT_CC4TIM捕获/比较4中断源

TIM_IT_TriggerTIM触发中断源

14、函数名TIM_ ClearITPendingBit

函数原形void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, u16 TIM_IT)

功能描述清除TIMx的中断待处理位

输入参数1TIMx:x可以是2,3或者4,来选择TIM外设

输入参数2TIM_IT:待检查的TIM中断待处理位

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值