定时器中断跨文件使用变量
1.初始化定时器1定时器结构图2.步骤1.RCC开启时钟2.选择时基单元的时钟源定时中断选择内部时钟源3.配置时基单元包括预分频器自动重装器计数模式等用结构体配置4.配置中断输出控制允许更新中断输出到NVIC5.配置NVIC在NVIC中打开定时器中断的通道并分配一个优先级6.运行控制在整个模块配置完成后我们还需要使能计数器3.执行流程当定时器使能后计数器就开始计数计数器更新时触发中断在编写一个定时器的中断函数就可以达到中断函数每隔一段时间就能自动执行一次的效果2.定时器库函数1.TIM_DeInit恢复缺省配置2.TIM_TimeBaseInit时基单元初始化用于配置时基单元参数有TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct1.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其他定时器的时钟参数有TIMxTIM_InputTriggerSource1.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_ExtTRGPolarityExtTRGFilter极性和滤波器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_ExtTRGPolarityExtTRGFilter极性和滤波器注若不需要触发输入功能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_PSCReloadMode1.TIMx选择要配置的定时器2.Prescaler选择写入的预分频值3.TIM_PSCReloadMode写入的模式8.TIM_CounterModeConfig用于改变计数器的计数模式参数有TIM_TypeDef* TIMx, uint16_t TIM_CounterMode1.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_DIV1TIM_CKD_DIV2TIM_CKD_DIV4分别代表1分频不分频2分频4分频4.计数器模式1.分为向上计数TIM_CounterMode_Up向下计数TIM_CounterMode_Down和三种中央对齐模式TIM_CounterMode_CenterAligned1TIM_CounterMode_CenterAligned2TIM_CounterMode_CenterAligned35.剩余参数1.PeriodARR自动重装器的值2.PrescalerPSC预分频器的值3.RepetitionCounter重复计数器的值6.定时时间1.以定时1秒为例使用计数器溢出频率公式CK_CNT_OVCK_CNT/(ARR1)CK_PSC/(PSC1)/(ARR1)CK_PSC72MHz7.跨文件使用变量1.在使用变量的文件上面用extern声明要用的变量2.直接在主函数中复制中断函数