STM32 Timer(TIM)

TIM简介

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

16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s 的定时

不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能

分为高级定时器、通用定时器、基本定时器三种类型

定时器与计数器区别:

定时器是对周期固定的脉冲信号进行计数,如MCU内部的外设时钟(APB)

计数器是对周期不确定的脉冲信号进行计数,如MCU I/0引脚所引入的外部脉冲信号 

定时器类型

TIM基本定时功能

预分频器、CNT计数器和自动重装寄存器共同构成了最基本的计数计时电路,这一块叫做时基单元

基本定时器只能连接内部时钟,所以可以认为预分频器直接接收内部时钟的信号,内部时钟的来源是RCC_TIMxCLK,这里的频率值为72MHz。

传输到预分频器进行预分频,给预分频器写0,则不分频;写1,则2分频。最大可以写65535(16位寄存器),计数器可以给预分频后的值进行计数,每来一个上升沿,计数器的值就+1,直到语与自动重装载寄存器里的预设值相同,即计时时间到,此时产生一个更新中断和更新事件,CPU响应定时中断。

定时器输出比较功能

定时器输入捕获功能

定时器编码器接口

时基单元时钟源选择:

1. void TIM_InternalClockConfig(TIM_TypeDef* TIMx);   内部时钟模式RCC
2. void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);

    ITRx定时器
3. void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
                                uint16_t TIM_ICPolarity, uint16_t ICFilter);  TIx捕获通道
4. void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler,         uint16_t TIM_ExtTRGPolarity,
                             uint16_t ExtTRGFilter); 外部时钟模式ETR1
5. void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, 
                             uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);外部时钟模式ETR2
6. void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
                   uint16_t ExtTRGFilter);  配置ETR引脚的预分频器、极性、滤波器等

时基单元选择:

void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);

中断输出控制:
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);
 

NVIC:

即为进中断,相关函数见“STM32 EXTI外部中断”

其他几个比较重要的函数

void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);    写预分频值

void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode);  选择计数模式
 

void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);  自动重装器预装功能配置
 

void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter);  给计数器写入一个值
 

void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload);   给自动重装器写一个值
 

uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);   读取计数器的值

uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx);获取当前预分频器的值
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值