TIM(Timer)定时器二
本文最后更新于64天前,其中的信息可能已经有所发展或是发生改变。

第一步,RCC开启时钟,定时器的基准时钟和整个外设的工作时钟就都会同时打开了

第二步,选择时基单元的时钟源,对于定时中断,选择内部时钟源

第三步,配置时基单元,包括这里的预分频器(PSC)、自动重装器(ARR)、计数模式(CNT)等等

第四步,配置输出中断控制,允许更新中断输出到NVIC

第五步,配置NVIC,在NVIC中打开定时器中断的通道,并分配一个优先级

第六步,运行控制,整个模块配置完成后,我们还需要使能一下计数器,当定时器使能后,计数器就会开始计数了,当计数器更新时,触发中断, 最后写一个定时器的中断函数,这个中断函数每隔一段时间就能自动执行一次了

TIM的相关库函数

 void TIM_DeInit(TIM_TypeDef* TIMx);
 @brief: 恢复缺省配置
 @param TIMx:选择某个定时器

 void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
 @brief:时基单元初始化。它就是用来配置图里(定时中断基本结构)的时基单元的
 ​
 @param TIMx: 选择某个定时器 can be 1 to 17 to select the TIM peripheral.
 @param TIM_TimeBaseInitStruct: 结构体,里面包含了配置时基单元的一些参数
 ​
 void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
 @brief: 可以把结构体变量赋一个默认值
 @param TIM_TimeBaseInitStruct: 配置值的结构体
 ​
 void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);
 @brief: 使能计数器,对应图里的运行控制
 @param TIMx: 选择定时器
 @param NewState: 新的状态,也就是使能还是失能。使能,计数器就可以运行,失能,计数器就不运行
 ​
 void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);
 @brief: 使能中断输出信号,对应图中中断输出控制
 @param TIMx: 选择定时器
 @param TIM_IT: 选择要配置哪个中断输出
 @param NewState: 新的状态,也就是使能还是失能。使能,计数器就可以运行,失能,计数器就不运行

以下六个函数对应时基单元的时钟选择部分 可以选择RCC内部时钟、ETR外部时钟、ITRx其他定时器、TIx捕获通道这些 

void TIM_InternalClockConfig(TIM_TypeDef* TIMx);
 @brief: 选择内部时钟
 @param TIMx: 选择定时器
 @retval None
 ​
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);
 @brief:
 @param
 @retval None
 ​
 void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,uint16_t TIM_ICPolarity, uint16_t ICFilter);
 @brief:
 @param
 @retval None
 ​
 void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter);
 @brief:选择ETR通过外部时钟模式1输入的时钟
 @param TIMx: 选择定时器
 @param TIM_ExtTRGPrescaler: 外部触发预分频器,可以对ETR的外部时钟再提前做一个分频
 @param ExtTRGFilter: 极性
 @param ExtTRGFilter: 滤波器
 @retval None
 ​
 void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);
 @brief:通过ETR引脚的外部时钟模式2配置
 @param
 @retval None
 ​
 void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter);
 @brief:
 @param
 @retval None
 ​
 void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);
 @brief: 单独写预分频值,原因:如果为了改某个参数还要再调用一次初始化函数,所以这里有一些单独的函数,可以方便地更改这些关键参数,
 @param Prescaler: 预分频值
 @param TIM_PSCReloadMode: 写入模式。预分频器有一个缓冲器,写入的值是在更新事件发生后才有效的,所以这里有个写入的模式,可以选择是听从安排,在更新事件生效,或者是,在写入后,手动产生一个更新事件,让这个值立刻生效
 @retval None
 ​
 void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode);
 @brief:用来改变计数器的计数模式
 @param TIMx: 选择定时器
 @param TIM_CounterMode: 选择新的计数器模式
 @retval None
 ​
 void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
 @brief:自动重装器预装功能配置,计数器的预装功能
 @param TIMx:
 @param NewState:新的状态,也就是使能还是失能。
 @retval None
 ​
 void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter);
 @brief:给计数器写入一个值
 @param TIMx: 选择定时器
 @param Counter:手动给一个计数值
 @retval None
 ​
 void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload);
 @brief:给自动重装器写入一个值
 @param TIMx:选择定时器
 @param Autoreload:手动给一个自动重装值
 @retval None
 ​
 uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);
 @brief:获取当前计数器的值,查看当前计数器计到哪里
 @param TIMx:选择定时器
 @retval: 当前的计数器的值
 ​
 uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx);
 @brief:获取当前的预分频器的值
 @param TIMx:选择定时器
 @retval :当前的预分频值
 ​
 ​

下面四个函数是用来获取标志位和清除标志位 ​

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);

点击数:0

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇