定时器的相关配置

Posted Tryhardering

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定时器的相关配置相关的知识,希望对你有一定的参考价值。

STM32F1的通用定时器TIMx(TIM2-TIM5)具有如下功能:

(1)16位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。

(2)16位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的

分频系数为1~65535之间的任意数值。

(3)4个独立通道(TIMx_CH1-4),这些通道可以用来作为:

A.输入捕获

B.输出比较

C.PWM生成(边缘或中间对齐模式)

D.单脉冲模式输出

(4)可使用外部信号(TIMx_ETR)控制定时器,且可实现多个定时器互连(可以用1个定时器控制另外一个定时器)的同步电路。

(5)发生如下事件时产生中断/DMA请求:

A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)

B.触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)

C.输入捕获

D.输出比较

(6)支持针对定位的增量(正交)编码器和霍尔传感器电路

(7)触发输入作为外部时钟或者按周期的电流管理

通用定时器配置步骤

(1)使能定时器时钟

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

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

VoidTIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef*

TIM_TimeBaseInitStruct);//第一个参数选择那个定时器,第二个参数结构体地址

typedefstruct

uint16_tTIM_Prescaler;//定时器预分频器,设置值范围为1-65536

uint16_tTIM_CounterMode;//计数模式,向上UP,向下Down

uint32_tTIM_Period;//定时器周期,设置范围为0-65535

uint16_tTIM_ClockDivision;//时钟分频,设置定时器CK_INT频率与数字滤波采用时钟频率分频比

uint8_tTIM_RepetitionCounter;//重复计数器,用来控制PWM输出个数

TIM_TimeBaseInitTypeDef;

TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure;//定义结构体名

TIM_TimeBaseInitStructure.TIM_Period=1000;//自动装载值

TIM_TimeBaseInitStructure.TIM_Prescaler=35999;//分频系数

TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;

TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);//初始化完成

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

VoidTIM_ITConfig(TIM_TypeDef*TIMx,uint16_tTIM_IT,FunctionalStateNewState);//第一个参数是选择那个定时器,第二个是设置中断类型(更新,捕获,触发),第三个是开启或关闭定时器中断

TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);//开启定时器中断

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

在上一步我们已经使能了定时器的更新中断,只要使用到中断,就必需对

NVIC初始化,NVIC初始化库函数是NVIC_Init()

(5)开启定时器

前面只是对定时器进行参数的配置,只有开启定时器才能正常工作

voidTIM_Cmd(TIM_TypeDef*TIMx,FunctionalStateNewState);//选择定时器,开启或关闭定时器功能。

(6)编写定时器中断服务

定时器中断服务函数名在STM32F1启动文件内就有

ITStatusTIM_GetITStatus(TIM_TypeDef*TIMx,uint16_tTIM_IT);//读取中断状态标志位

voidTIM_ClearITPendingBit(TIM_TypeDef*TIMx,uint16_tTIM_IT);//清除中断标志位函数。

TIM_GetFlagStatus(TIM_TypeDef*TIMx,uint16_tTIM_FLAG);和TIM_GetITStatus(TIM_TypeDef*TIMx,uint16_tTIM_IT);都是获取中断标志位的,区别在于第一个是直接获取,第二个是先判断是否开始定时器中断,然后在获取中断标志位。

定时器定时间计算公式如下:

T=((pre)*(psc+1)/Tclk)

Tclk是定时器的时钟频率值,72M。定时器产生中断的时间,单位是us。

通道函数

void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);

void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);

void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);

void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);

以上是关于定时器的相关配置的主要内容,如果未能解决你的问题,请参考以下文章

STM32定时器触发ADC怎么配置

添加相关功能

2019 8 8 STM32F407DAC DMA通道生成周期1msSIN波(1um一个点)相关配置

Spring使用@Scheduled注解配置定时任务

selenium学习高级篇 -31Jenkins中Project的相关配置

STM32CubeMX笔记--定时器生成PWM特定波形,控制舵机转动