LIB2:TIM固件库

1. stm32f10x_tim.h

  * @file    stm32f10x_tim.h
  * @brief   本文件包含 TIM 固件库的所有函数原型。

1.1 变量声明

typedef struct
{
  uint16_t TIM_Prescaler;         /*!< 指定用于分频 TIM 时钟的预分频器值。
                                       此参数取值范围为 0x0000 至 0xFFFF */

  uint16_t TIM_CounterMode;       /*!< 指定计数器模式。
                                       此参数可以是 @ref TIM_Counter_Mode 中的值 */

  uint16_t TIM_Period;            /*!< 指定在下一次更新事件时,要加载到活动自动重载寄存器(ARR)中的周期值。
                                       此参数取值范围必须为 0x0000 至 0xFFFF。 */ 

  uint16_t TIM_ClockDivision;     /*!< 指定时钟分频系数。
                                      此参数可以是 @ref TIM_Clock_Division_CKD 中的值 */

  uint8_t TIM_RepetitionCounter;  /*!< 指定重复计数器值。每当重复计数器(RCR)递减至 0 时,
                                       会产生一个更新事件,且计数器将从 RCR 设定值(N)重新开始计数。
                                       这意味着在 PWM 模式下,(N+1) 对应:
                                          - 边沿对齐模式下的 PWM 周期数
                                          - 中央对齐模式下的 PWM 半周期数
                                       此参数取值范围必须为 0x00 至 0xFF。
                                       @note 此参数仅对 TIM1 和 TIM8 有效。 */
} TIM_TimeBaseInitTypeDef;

/*滤波时钟的分频配置*/
/** @defgroup TIM_Clock_Division_CKD 
  * @{
  */

#define TIM_CKD_DIV1                       ((uint16_t)0x0000)
#define TIM_CKD_DIV2                       ((uint16_t)0x0100)
#define TIM_CKD_DIV4                       ((uint16_t)0x0200)
#define IS_TIM_CKD_DIV(DIV) (((DIV) == TIM_CKD_DIV1) || \
                             ((DIV) == TIM_CKD_DIV2) || \
                             ((DIV) == TIM_CKD_DIV4))
/**
  * @}
  */
  
/*计数器模式*/
/** @defgroup TIM_Counter_Mode 
  * @{
  */

#define TIM_CounterMode_Up                 ((uint16_t)0x0000)
#define TIM_CounterMode_Down               ((uint16_t)0x0010)
#define TIM_CounterMode_CenterAligned1     ((uint16_t)0x0020)
#define TIM_CounterMode_CenterAligned2     ((uint16_t)0x0040)
#define TIM_CounterMode_CenterAligned3     ((uint16_t)0x0060)
#define IS_TIM_COUNTER_MODE(MODE) (((MODE) == TIM_CounterMode_Up) ||  \
                                   ((MODE) == TIM_CounterMode_Down) || \
                                   ((MODE) == TIM_CounterMode_CenterAligned1) || \
                                   ((MODE) == TIM_CounterMode_CenterAligned2) || \
                                   ((MODE) == TIM_CounterMode_CenterAligned3))
/**
  * @}
  */ 

1.2 函数声明

// 选择内部时钟
void TIM_InternalClockConfig(TIM_TypeDef* TIMx);
  
// 时基单元初始化
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);

// 使能TIM中断
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState)

// 使能定时器
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);
 
// 标志位 
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);

// 获得计数器当前值
uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);

2. stm32f10x_tim.c

* @file    stm32f10x_tim.c
* @brief   本文件提供所有 TIM 固件函数。
/**
  * @brief  配置 TIMx 的内部时钟。
  * @param  TIMx: x 可取值为 1、2、3、4、5、8、9、12 或 15,
  *         用于选择对应的 TIM 外设。
  * @retval 无
  */
void TIM_InternalClockConfig(TIM_TypeDef* TIMx)
/**
  * @brief  根据TIM_TimeBaseInitStruct结构体中的指定参数,初始化TIMx定时器的时间基数单元。
  * @param  TIMx:定时器外设选择参数,x的取值范围为1至17,用于选定对应的TIM定时器外设。
  * @param  TIM_TimeBaseInitStruct:指向TIM_TimeBaseInitTypeDef类型结构体的指针,
  *         该结构体中存储了待初始化TIM定时器外设的各项配置信息。
  * @retval 无
  */
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)
/**
  * @brief  使能或禁用指定的 TIM 中断。
  * @param  TIMx: x 可取值为 1 至 17,用于选择对应的 TIM 外设。
  * @param  TIM_IT: 指定要使能或禁用的 TIM 中断源。
  *   此参数可以是以下值的任意组合:
  *     @arg TIM_IT_Update: TIM 更新中断源
  *     @arg TIM_IT_CC1: TIM 捕获比较 1 中断源
  *     @arg TIM_IT_CC2: TIM 捕获比较 2 中断源
  *     @arg TIM_IT_CC3: TIM 捕获比较 3 中断源
  *     @arg TIM_IT_CC4: TIM 捕获比较 4 中断源
  *     @arg TIM_IT_COM: TIM 换向中断源(COM: Commutation)
  *     @arg TIM_IT_Trigger: TIM 触发中断源
  *     @arg TIM_IT_Break: TIM 刹车中断源(Break: 紧急停止相关)
  * @note 
  *   - TIM6 和 TIM7 仅能产生更新中断。
  *   - TIM9、TIM12 和 TIM15 仅支持 TIM_IT_Update、TIM_IT_CC1、
  *     TIM_IT_CC2 或 TIM_IT_Trigger 中断。
  *   - TIM10、TIM11、TIM13、TIM14、TIM16 和 TIM17 支持 TIM_IT_Update 或 TIM_IT_CC1 中断。
  *   - TIM_IT_Break 仅适用于 TIM1、TIM8 和 TIM15。
  *   - TIM_IT_COM 仅适用于 TIM1、TIM8、TIM15、TIM16 和 TIM17。
  * @param  NewState: 指定 TIM 中断的新状态。
  *   此参数可以是:ENABLE(使能)或 DISABLE(禁用)。
  * @retval 无
  */
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState)
/**
  * @brief  使能或禁用指定的 TIM 外设。
  * @param  TIMx: x 可取值为 1 至 17,用于选择对应的 TIM 外设。
  * @param  NewState: 指定 TIM 外设的新状态。
  *   此参数可以是:ENABLE(使能)或 DISABLE(禁用)。
  * @retval 无
  */
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState)
/**
  * @brief  检查指定的 TIM 标志位是否已置位。
  * @param  TIMx: x 可取值为 1 至 17,用于选择对应的 TIM 外设。
  * @param  TIM_FLAG: 指定要检查的标志位。
  *   此参数可以是以下值之一:
  *     @arg TIM_FLAG_Update: TIM 更新标志位
  *     @arg TIM_FLAG_CC1: TIM 捕获比较 1 标志位
  *     @arg TIM_FLAG_CC2: TIM 捕获比较 2 标志位
  *     @arg TIM_FLAG_CC3: TIM 捕获比较 3 标志位
  *     @arg TIM_FLAG_CC4: TIM 捕获比较 4 标志位
  *     @arg TIM_FLAG_COM: TIM 换向标志位(COM: Commutation)
  *     @arg TIM_FLAG_Trigger: TIM 触发标志位
  *     @arg TIM_FLAG_Break: TIM 刹车标志位(Break: 紧急停止相关)
  *     @arg TIM_FLAG_CC1OF: TIM 捕获比较 1 溢出捕获标志位(OF: Overcapture)
  *     @arg TIM_FLAG_CC2OF: TIM 捕获比较 2 溢出捕获标志位(OF: Overcapture)
  *     @arg TIM_FLAG_CC3OF: TIM 捕获比较 3 溢出捕获标志位(OF: Overcapture)
  *     @arg TIM_FLAG_CC4OF: TIM 捕获比较 4 溢出捕获标志位(OF: Overcapture)
  * @note
  *   - TIM6 和 TIM7 仅支持更新标志位。
  *   - TIM9、TIM12 和 TIM15 仅支持 TIM_FLAG_Update、TIM_FLAG_CC1、
  *     TIM_FLAG_CC2 或 TIM_FLAG_Trigger 标志位。
  *   - TIM10、TIM11、TIM13、TIM14、TIM16 和 TIM17 支持 TIM_FLAG_Update 或 TIM_FLAG_CC1 标志位。
  *   - TIM_FLAG_Break 仅适用于 TIM1、TIM8 和 TIM15。
  *   - TIM_FLAG_COM 仅适用于 TIM1、TIM8、TIM15、TIM16 和 TIM17。
  * @retval TIM_FLAG 的新状态(SET:已置位 / RESET:未置位)。
  */
FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG)

/**
  * @brief  清除 TIMx 的挂起标志位。
  * @param  TIMx: x 可取值为 1 至 17,用于选择对应的 TIM 外设。
  * @param  TIM_FLAG: 指定要清除的标志位。
  *   此参数可以是以下值的任意组合:
  *     @arg TIM_FLAG_Update: TIM 更新标志位
  *     @arg TIM_FLAG_CC1: TIM 捕获比较 1 标志位
  *     @arg TIM_FLAG_CC2: TIM 捕获比较 2 标志位
  *     @arg TIM_FLAG_CC3: TIM 捕获比较 3 标志位
  *     @arg TIM_FLAG_CC4: TIM 捕获比较 4 标志位
  *     @arg TIM_FLAG_COM: TIM 换向标志位(COM: Commutation)
  *     @arg TIM_FLAG_Trigger: TIM 触发标志位
  *     @arg TIM_FLAG_Break: TIM 刹车标志位(Break: 紧急停止相关)
  *     @arg TIM_FLAG_CC1OF: TIM 捕获比较 1 溢出捕获标志位(OF: Overcapture)
  *     @arg TIM_FLAG_CC2OF: TIM 捕获比较 2 溢出捕获标志位(OF: Overcapture)
  *     @arg TIM_FLAG_CC3OF: TIM 捕获比较 3 溢出捕获标志位(OF: Overcapture)
  *     @arg TIM_FLAG_CC4OF: TIM 捕获比较 4 溢出捕获标志位(OF: Overcapture)
  * @note
  *   - TIM6 和 TIM7 仅支持更新标志位。
  *   - TIM9、TIM12 和 TIM15 仅支持 TIM_FLAG_Update、TIM_FLAG_CC1、
  *     TIM_FLAG_CC2 或 TIM_FLAG_Trigger 标志位。
  *   - TIM10、TIM11、TIM13、TIM14、TIM16 和 TIM17 支持 TIM_FLAG_Update 或 TIM_FLAG_CC1 标志位。
  *   - TIM_FLAG_Break 仅适用于 TIM1、TIM8 和 TIM15。
  *   - TIM_FLAG_COM 仅适用于 TIM1、TIM8、TIM15、TIM16 和 TIM17。
  * @retval 无
  */
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG)

/**
  * @brief  检查指定的 TIM 中断是否已发生。
  * @param  TIMx: x 可取值为 1 至 17,用于选择对应的 TIM 外设。
  * @param  TIM_IT: 指定要检查的 TIM 中断源。
  *   此参数可以是以下值之一:
  *     @arg TIM_IT_Update: TIM 更新中断源
  *     @arg TIM_IT_CC1: TIM 捕获比较 1 中断源
  *     @arg TIM_IT_CC2: TIM 捕获比较 2 中断源
  *     @arg TIM_IT_CC3: TIM 捕获比较 3 中断源
  *     @arg TIM_IT_CC4: TIM 捕获比较 4 中断源
  *     @arg TIM_IT_COM: TIM 换向中断源(COM: Commutation)
  *     @arg TIM_IT_Trigger: TIM 触发中断源
  *     @arg TIM_IT_Break: TIM 刹车中断源(Break: 紧急停止相关)
  * @note
  *   - TIM6 和 TIM7 仅能产生更新中断。
  *   - TIM9、TIM12 和 TIM15 仅支持 TIM_IT_Update、TIM_IT_CC1、
  *     TIM_IT_CC2 或 TIM_IT_Trigger 中断。
  *   - TIM10、TIM11、TIM13、TIM14、TIM16 和 TIM17 支持 TIM_IT_Update 或 TIM_IT_CC1 中断。
  *   - TIM_IT_Break 仅适用于 TIM1、TIM8 和 TIM15。
  *   - TIM_IT_COM 仅适用于 TIM1、TIM8、TIM15、TIM16 和 TIM17。
  * @retval TIM_IT 的状态(SET:已发生 / RESET:未发生)。
  */
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT)

/**
  * @brief  清除 TIMx 的中断挂起位。
  * @param  TIMx: x 可取值为 1 至 17,用于选择对应的 TIM 外设。
  * @param  TIM_IT: 指定要清除的中断挂起位。
  *   此参数可以是以下值的任意组合:
  *     @arg TIM_IT_Update: TIM 更新中断源
  *     @arg TIM_IT_CC1: TIM 捕获比较 1 中断源
  *     @arg TIM_IT_CC2: TIM 捕获比较 2 中断源
  *     @arg TIM_IT_CC3: TIM 捕获比较 3 中断源
  *     @arg TIM_IT_CC4: TIM 捕获比较 4 中断源
  *     @arg TIM_IT_COM: TIM 换向中断源(COM: Commutation)
  *     @arg TIM_IT_Trigger: TIM 触发中断源
  *     @arg TIM_IT_Break: TIM 刹车中断源(Break: 紧急停止相关)
  * @note
  *   - TIM6 和 TIM7 仅能产生更新中断。
  *   - TIM9、TIM12 和 TIM15 仅支持 TIM_IT_Update、TIM_IT_CC1、
  *     TIM_IT_CC2 或 TIM_IT_Trigger 中断。
  *   - TIM10、TIM11、TIM13、TIM14、TIM16 和 TIM17 支持 TIM_IT_Update 或 TIM_IT_CC1 中断。
  *   - TIM_IT_Break 仅适用于 TIM1、TIM8 和 TIM15。
  *   - TIM_IT_COM 仅适用于 TIM1、TIM8、TIM15、TIM16 和 TIM17。
  * @retval 无
  */
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT)
/**
  * @brief  获取 TIMx 的计数器值。
  * @param  TIMx: x 可取值为 1 至 17,用于选择对应的 TIM 外设。
  * @retval 计数器寄存器的值。
  */
uint16_t TIM_GetCounter(TIM_TypeDef* TIMx)
posted @ 2025-11-20 19:01  LI,Yi-han  阅读(7)  评论(0)    收藏  举报