赞
踩
一、定时中断有关的函数
void TIM_DeInit(TIM_TypeDef* TIMx);
//恢复缺省配置
void TIM_TimeBaseInit(TIM_TypeDef* TIMx,
TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
//时基单元初始化,比较重要,用来配置上图的时基单元,第一个参数TIMx选择某个定时器,
//第二个是结构体,包含配置时基单元的一些参数,
void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
//可把结构体变量赋一个默认值,
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);
//用来使能计数器,对应上图的运行控制,第一个参数选择定时器,第二个NewState新的状态
//即使能还是失能,对应计数器是否运行
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT,
FunctionalState NewState);
//用来使能中断输出信号,对应上图中断输出控制,第一个参数选择定时器,第二个选择要
//配置哪个中断输出,第三个新的状态即使能还是失能,ITConfig函数会经常遇到使能外设的中断输出
//以下六个函数对应时基单元的**时钟选择**部分,可选择RCC内部时钟、ETR外部时钟等四个 void TIM_InternalClockConfig(TIM_TypeDef* TIMx); //选择内部时钟,参数只有一个 void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); //选择ITRx其他定时器时钟,第一个参数选择要配置的定时器,第二个选择要接入 //哪个其他的定时器 void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource, uint16_t TIM_ICPolarity, uint16_t ICFilter); //选择TIx捕获通道的时钟,第一个选择定时器,第二个选择TIx具体的某个引脚, //第三个和第四个,输出的极性和滤波器,对于外部引脚的波形一般都会有这两个选择,更灵活 void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter); //选择ETR通过外部时钟模式1输入的时钟,第一个略,第二个外部触发预分频器,可对ETR的 //外部时钟再提前做一个分频,后两个同样是极性和滤波器 void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter); //同上 void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter); //这个不是用来选择时钟,单独用来配置ETR引脚的预分频器、极性、滤波器这些参数,
时钟源选择就用上面六个函数!!时基单元用TIM_TimeBaseInit函数,中断输出控制用TIM_ITConfig函数,NVIC用外部中断讲过的NVIC_Init函数,运行控制用TIM_Cmd函数,这样初始化基本就可以了!!
下面再来看几个,因为初始化结构体里有很多关键的参数,比如自动重传值和预分频值等,这些参数可能在初始化之后还需要进行修改,如果因为这个还要再调用一次初始化函数太过麻烦!
void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode); //用来单独写预分频值,第二个prescaler就是要写入的预分频值,第三个参数写入模式 //预分频器有一个缓冲器,写入的值是在更新事件发生后才有效的,写入模式可选择是 //听从安排在更新事件生效、或者再写入后手动产生一个更新事件,让这个值立刻生效 void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode); //用来改变计数器的计数模式,参数countermode选择新的计数器模式 void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState); //自动重装器预装功能配置,有预装还是无预装是可以自己选择的,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); //获取当前预分频器的值 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); //这四个函数用来获取标志位和清楚位的
二、下面的函数与通用/高级定时器的输出比较功能有关:(运用PWM实操用到了)
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);
//这四个函数是用结构体来配置输出比较单元的,OC就是Output Compare,可参考输出比较单元博客(4路),第一个TMx选择定时器
//第二个结构体,就是输出比较的那些参数
void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct);
//这个用来给输出比较结构体赋一个默认值的
void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState);
//补充:这个函数仅高级定时器使用,在使用高级定时器输出PWM时需要调用该函数,使能主输出,否则PWM不可正常输出。
以上几个就基本可以配置输出比较了很重要,下面还有一些小功能和运行时更改参数的函数,大多数用的不多了解即可,有兴趣可参考手册,最后一个比较重要:
void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); //用来配置强制输出模式,如果在运行中想要暂停输出波形并且强制输出高/低电平可用到,用的不多了解一下! void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); //用来配置CCR寄存器的预装功能,即影子寄存器,就是写入的值不会立即生效,而是在更新事件后才会生效,用的不多! void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); //用来配置快速使能,手册中单脉冲模式小节其中一段有介绍,用的不多! void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); //手册中外部事件时清除REF信号小节有介绍,用的不多! void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity); void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity); void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity); void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); //可用来单独设置输出比较的极性的,带N的就是高级定时器里互补通道的配置,OC4没有互补通道,单独设置极性(多用于修改) //在结构体初始化的函数里也可以设置极性。一般来说结构体里的参数都会有一个单独的函数可对其修改 void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx); void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN); //可用来单独修改输出使能参数 void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode); //可用来单独更改输出比较模式 void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1); void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2); void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3); void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4); //可用来单独更改CCR寄存器值,这四个比较重要更改占空比需要用到!!!!!!!!!
持续更新中…
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。