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

第一步,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
    小恐龙
    花!
    上一篇
    下一篇