1.初始化定时器
1,定时器结构图
2.步骤
1.RCC开启时钟
2.选择时基单元的时钟源(定时中断选择内部时钟源)
3.配置时基单元(包括预分频器,自动重装器,计数模式等(用结构体配置))
4.配置中断输出控制,允许更新中断输出到NVIC
5.配置NVIC,在NVIC中打开定时器中断的通道,并分配一个优先级
6.运行控制:在整个模块配置完成后,我们还需要使能计数器
3.执行流程:当定时器使能后,计数器就开始计数,计数器更新时,触发中断,在编写一个定时器的中断函数,就可以达到中断函数每隔一段时间就能自动执行一次的效果
2.定时器库函数
1.TIM_DeInit:恢复缺省配置
2.TIM_TimeBaseInit:时基单元初始化,用于配置时基单元,参数有(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)
1.TIMx:选择某个定时器
2.TIM_TimeBaseInitStruct:结构体,包含了配置时基单元的一些参数
3.TIM_TimeBaseStructInit:把结构体变量赋予一个默认值
4.TIM_Cmd:用于使能计数器,运行控制,参数有(TIM_TypeDef* TIMx, FunctionalState NewState)
1.TIMx:选择定时器
2.FunctionalState NewState:新的状态,也就是使能或失能(使能-计数器可以运行,失能-计数器不能运行)
5.TIM_ITConfig:用于使能中断输出信号,中断输出控制,参数有(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState)
1.TIMx:选择定时器
2.TIM_IT:选择要配置哪个中断输出
3. NewState:新的状态,即使能还是失能
6.时钟源选择部分(可以选择RCC内部时钟,ETR外部时钟,ITRx其他定时器,TIx捕获通道)
1.void TIM_InternalClockConfig(TIM_TypeDef* TIMx);:选择内部时钟
2.void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);:选择ITRx其他定时器的时钟,参数有TIMx,TIM_InputTriggerSource
1.TIMx:选择要配置的定时器
2.TIM_InputTriggerSource:选择要接入的其他定时器
3.void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
uint16_t TIM_ICPolarity, uint16_t ICFilter);:选择TIx捕获通道的时钟,
参数含义
1.TIMx:选择要配置的定时器
2.TIM_TIxExternalCLKSource:选择TIx具体的某个引脚
3.TIM_ICPolarity,:输入的极性
4.ICFilter:输入的滤波器
4.void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter);:选择ETR通过外部模式1输入的时钟
参数含义
1.TIMx:选择要配置的定时器
2.TIM_ExtTRGPrescaler:外部触发预分频器,可以对ETR的外部时钟再提前做一个分频
3.TIM_ExtTRGPolarity,ExtTRGFilter:极性和滤波器
5.void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);:选择ETR通过外部模式2输入的时钟
参数含义
1.TIMx:选择要配置的定时器
2.TIM_ExtTRGPrescaler:外部触发预分频器,可以对ETR的外部时钟再提前做一个分频
3.TIM_ExtTRGPolarity,ExtTRGFilter:极性和滤波器
注:若不需要触发输入功能void TIM_ETRClockMode1Config和.void TIM_ETRClockMode2Config可以互换
6.void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter);:单独用来配置ETR引脚的预分频器,极性,滤波器等参数
7.TIM_PrescalerConfig:用于单独写预分频值,参数有TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode
1.TIMx:选择要配置的定时器
2.Prescaler:选择写入的预分频值
3.TIM_PSCReloadMode:写入的模式
8.TIM_CounterModeConfig:用于改变计数器的计数模式,参数有TIM_TypeDef* TIMx, uint16_t TIM_CounterMode
1.TIMx:选择要配置的定时器
2.TIM_CounterMode:选择新的计数器模式
9.TIM_ARRPreloadConfig:用于自动重装器功能配置,这个参数的失能或失能可以选择是否有预装
10.TIM_SetCounter:给计数器写入一个值
11.TIM_SetAutoreload:给自动重装器写入一个值
12.TIM_GetCounter:获取当前计数器的值
13.TIM_GetPrescaler:获取当前预分频器的值
14.FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);
1,作用:上述四个函数用于获取和清除标志位
3.时钟分频
1.作用:在定时器外部信号输入引脚,一般都会有一个滤波器,可以过滤掉信号的抖动干扰
2.工作原理:在一个固定的时钟频率f下进行采样,如果N个采样点均为相同电平,则输入信号稳定,输出采样值,若出现不相同电平,说明信号有抖动,保持上一次输出,或直接输出低电平,这样就能保证输出信号在一定程度上的滤波(采样频率f和采样点数N都是滤波器的参数,频率越低,采样点数越多,滤波效果越好,信号延迟越大)
3.采样频率f从内部时钟或内部时钟外挂一个外部时钟分频而来,分频多少就是由参数clock division决定)
4.clock division:参数有TIM_CKD_DIV1,TIM_CKD_DIV2,TIM_CKD_DIV4,分别代表1分频(不分频),2分频,4分频
4.计数器模式
1.分为向上计数(TIM_CounterMode_Up),向下计数(TIM_CounterMode_Down),和三种中央对齐模式(TIM_CounterMode_CenterAligned1,TIM_CounterMode_CenterAligned2,TIM_CounterMode_CenterAligned3)
5.剩余参数
1.Period:ARR自动重装器的值
2.Prescaler:PSC预分频器的值
3.RepetitionCounter:重复计数器的值
6.定时时间
1.以定时1秒为例:使用计数器溢出频率公式CK_CNT_OV=CK_CNT/(ARR+1)=CK_PSC/(PSC+1)/(ARR+1)(CK_PSC=72MHz)
7.跨文件使用变量
1.在使用变量的文件上面用extern声明要用的变量
2.直接在主函数中复制中断函数