stm32f10x_tim
STM32F10x TIM 定时器外设标准库函数参考文档
数据类型定义
结构体类型
TIM_TimeBaseInitTypeDef - TIM 时基单元初始化结构体
typedef struct
{
uint16_t TIM_Prescaler; /* 预分频器值,范围:0x0000-0xFFFF */
uint16_t TIM_CounterMode; /* 计数器模式选择 */
uint16_t TIM_Period; /* 自动重装载值,范围:0x0000-0xFFFF */
uint16_t TIM_ClockDivision; /* 时钟分频因子 */
uint8_t TIM_RepetitionCounter; /* 重复计数器值(仅TIM1和TIM8有效)*/
} TIM_TimeBaseInitTypeDef;成员说明:
TIM_Prescaler:指定预分频器值,用于对TIM时钟进行分频TIM_CounterMode:指定计数器模式(向上、向下、中央对齐等)TIM_Period:指定要装载到自动重装载寄存器的周期值TIM_ClockDivision:指定时钟分频因子TIM_RepetitionCounter:指定重复计数器值,仅对TIM1和TIM8有效
TIM_OCInitTypeDef - TIM 输出比较初始化结构体
typedef struct
{
uint16_t TIM_OCMode; /* 输出比较模式 */
uint16_t TIM_OutputState; /* 输出比较状态 */
uint16_t TIM_OutputNState; /* 互补输出比较状态(仅TIM1和TIM8)*/
uint16_t TIM_Pulse; /* 脉冲值,范围:0x0000-0xFFFF */
uint16_t TIM_OCPolarity; /* 输出极性 */
uint16_t TIM_OCNPolarity; /* 互补输出极性(仅TIM1和TIM8)*/
uint16_t TIM_OCIdleState; /* 空闲状态下的输出状态(仅TIM1和TIM8)*/
uint16_t TIM_OCNIdleState; /* 空闲状态下的互补输出状态(仅TIM1和TIM8)*/
} TIM_OCInitTypeDef;成员说明:
TIM_OCMode:指定TIM模式(定时、主动、非活动、翻转、PWM1、PWM2)TIM_OutputState:指定TIM输出比较状态TIM_OutputNState:指定TIM互补输出比较状态TIM_Pulse:指定要装载到捕获比较寄存器的脉冲值TIM_OCPolarity:指定输出极性TIM_OCNPolarity:指定互补输出极性TIM_OCIdleState:指定空闲状态时TIM输出比较引脚状态TIM_OCNIdleState:指定空闲状态时TIM互补输出比较引脚状态
TIM_ICInitTypeDef - TIM 输入捕获初始化结构体
typedef struct
{
uint16_t TIM_Channel; /* TIM通道选择 */
uint16_t TIM_ICPolarity; /* 输入信号的有效边沿 */
uint16_t TIM_ICSelection; /* 输入选择 */
uint16_t TIM_ICPrescaler; /* 输入捕获预分频器 */
uint16_t TIM_ICFilter; /* 输入捕获滤波器,范围:0x0-0xF */
} TIM_ICInitTypeDef;成员说明:
TIM_Channel:指定TIM通道TIM_ICPolarity:指定输入信号的有效边沿TIM_ICSelection:指定输入TIM_ICPrescaler:指定输入捕获预分频器TIM_ICFilter:指定输入捕获滤波器
TIM_BDTRInitTypeDef - TIM 刹车和死区初始化结构体
typedef struct
{
uint16_t TIM_OSSRState; /* 运行模式下的关断状态选择 */
uint16_t TIM_OSSIState; /* 空闲模式下的关断状态选择 */
uint16_t TIM_LOCKLevel; /* 锁定级别参数 */
uint16_t TIM_DeadTime; /* 死区时间,范围:0x00-0xFF */
uint16_t TIM_Break; /* TIM刹车输入使能 */
uint16_t TIM_BreakPolarity; /* TIM刹车输入引脚极性 */
uint16_t TIM_AutomaticOutput; /* TIM自动输出功能 */
} TIM_BDTRInitTypeDef;成员说明:
TIM_OSSRState:指定运行模式下的关断状态选择TIM_OSSIState:指定空闲状态下使用的关断状态TIM_LOCKLevel:指定锁定级别参数TIM_DeadTime:指定开关关断和开关开启之间的延迟时间TIM_Break:指定TIM刹车输入是否使能TIM_BreakPolarity:指定TIM刹车输入引脚极性TIM_AutomaticOutput:指定TIM自动输出功能是否使能
TIM 外设定义
支持的TIM外设列表
/* 所有TIM外设 */
#define IS_TIM_ALL_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
((PERIPH) == TIM2) || \
((PERIPH) == TIM3) || \
((PERIPH) == TIM4) || \
((PERIPH) == TIM5) || \
((PERIPH) == TIM6) || \
((PERIPH) == TIM7) || \
((PERIPH) == TIM8) || \
((PERIPH) == TIM9) || \
((PERIPH) == TIM10)|| \
((PERIPH) == TIM11)|| \
((PERIPH) == TIM12)|| \
((PERIPH) == TIM13)|| \
((PERIPH) == TIM14)|| \
((PERIPH) == TIM15)|| \
((PERIPH) == TIM16)|| \
((PERIPH) == TIM17))说明:
- TIM1, TIM8:高级控制定时器,支持互补输出和死区控制
- TIM2-TIM5:通用定时器,支持输入捕获、输出比较、PWM等
- TIM6, TIM7:基本定时器,主要用于DAC触发和时基产生
- TIM9-TIM14:通用定时器(部分芯片支持)
- TIM15-TIM17:通用定时器(部分芯片支持)
TIM 模式定义
输出比较和PWM模式
#define TIM_OCMode_Timing ((uint16_t)0x0000) /* 定时模式 */
#define TIM_OCMode_Active ((uint16_t)0x0010) /* 主动模式 */
#define TIM_OCMode_Inactive ((uint16_t)0x0020) /* 非活动模式 */
#define TIM_OCMode_Toggle ((uint16_t)0x0030) /* 翻转模式 */
#define TIM_OCMode_PWM1 ((uint16_t)0x0060) /* PWM模式1 */
#define TIM_OCMode_PWM2 ((uint16_t)0x0070) /* PWM模式2 */单脉冲模式
#define TIM_OPMode_Single ((uint16_t)0x0008) /* 单脉冲模式 */
#define TIM_OPMode_Repetitive ((uint16_t)0x0000) /* 重复模式 */通道定义
#define TIM_Channel_1 ((uint16_t)0x0000) /* TIM通道1 */
#define TIM_Channel_2 ((uint16_t)0x0004) /* TIM通道2 */
#define TIM_Channel_3 ((uint16_t)0x0008) /* TIM通道3 */
#define TIM_Channel_4 ((uint16_t)0x000C) /* TIM通道4 */计数器模式
#define TIM_CounterMode_Up ((uint16_t)0x0000) /* 向上计数 */
#define TIM_CounterMode_Down ((uint16_t)0x0010) /* 向下计数 */
#define TIM_CounterMode_CenterAligned1 ((uint16_t)0x0020) /* 中央对齐模式1 */
#define TIM_CounterMode_CenterAligned2 ((uint16_t)0x0040) /* 中央对齐模式2 */
#define TIM_CounterMode_CenterAligned3 ((uint16_t)0x0060) /* 中央对齐模式3 */TIM 中断定义
中断源
#define TIM_IT_Update ((uint16_t)0x0001) /* 更新中断 */
#define TIM_IT_CC1 ((uint16_t)0x0002) /* 捕获/比较1中断 */
#define TIM_IT_CC2 ((uint16_t)0x0004) /* 捕获/比较2中断 */
#define TIM_IT_CC3 ((uint16_t)0x0008) /* 捕获/比较3中断 */
#define TIM_IT_CC4 ((uint16_t)0x0010) /* 捕获/比较4中断 */
#define TIM_IT_COM ((uint16_t)0x0020) /* COM中断 */
#define TIM_IT_Trigger ((uint16_t)0x0040) /* 触发器中断 */
#define TIM_IT_Break ((uint16_t)0x0080) /* 刹车中断 */DMA请求
#define TIM_DMA_Update ((uint16_t)0x0100) /* 更新DMA请求 */
#define TIM_DMA_CC1 ((uint16_t)0x0200) /* 捕获/比较1 DMA请求 */
#define TIM_DMA_CC2 ((uint16_t)0x0400) /* 捕获/比较2 DMA请求 */
#define TIM_DMA_CC3 ((uint16_t)0x0800) /* 捕获/比较3 DMA请求 */
#define TIM_DMA_CC4 ((uint16_t)0x1000) /* 捕获/比较4 DMA请求 */
#define TIM_DMA_COM ((uint16_t)0x2000) /* COM DMA请求 */
#define TIM_DMA_Trigger ((uint16_t)0x4000) /* 触发器DMA请求 */TIM 标志位定义
#define TIM_FLAG_Update ((uint16_t)0x0001) /* TIM更新标志 */
#define TIM_FLAG_CC1 ((uint16_t)0x0002) /* TIM捕获/比较1标志 */
#define TIM_FLAG_CC2 ((uint16_t)0x0004) /* TIM捕获/比较2标志 */
#define TIM_FLAG_CC3 ((uint16_t)0x0008) /* TIM捕获/比较3标志 */
#define TIM_FLAG_CC4 ((uint16_t)0x0010) /* TIM捕获/比较4标志 */
#define TIM_FLAG_COM ((uint16_t)0x0020) /* TIM COM标志 */
#define TIM_FLAG_Trigger ((uint16_t)0x0040) /* TIM触发器标志 */
#define TIM_FLAG_Break ((uint16_t)0x0080) /* TIM刹车标志 */
#define TIM_FLAG_CC1OF ((uint16_t)0x0200) /* TIM捕获/比较1过捕获标志 */
#define TIM_FLAG_CC2OF ((uint16_t)0x0400) /* TIM捕获/比较2过捕获标志 */
#define TIM_FLAG_CC3OF ((uint16_t)0x0800) /* TIM捕获/比较3过捕获标志 */
#define TIM_FLAG_CC4OF ((uint16_t)0x1000) /* TIM捕获/比较4过捕获标志 */标准库函数详解
1. TIM_DeInit
/**
* @brief 将 TIM 所有寄存器恢复为复位默认值,用于重新配置前清空旧状态
* @param TIMx: 选择要重置的定时器外设
* @retval 无
* @example
* TIM_DeInit(TIM2);
*/
void TIM_DeInit(TIM_TypeDef* TIMx);功能说明:
- 调用后 TIM 回到上电默认配置,计数器停止
- 切换定时器用途(如从 PWM 改为捕获)前可先 DeInit
2. TIM_TimeBaseInit
/**
* @brief 初始化时基单元(PSC/ARR/计数模式等),决定定时周期与计数频率,是定时/PWM/捕获的基础
* @param TIMx: 选择要配置的TIM外设
* @param TIM_TimeBaseInitStruct: 指向TIM_TimeBaseInitTypeDef结构体的指针
* @retval 无
* @example
* TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
* TIM_TimeBaseStructure.TIM_Period = 999;
* TIM_TimeBaseStructure.TIM_Prescaler = 71;
* TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
* TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
*/
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);功能说明:
- 一次性配置预分频、自动重装载、计数方向、时钟分频
- PWM 频率 = TIM_CLK / ((PSC+1)×(ARR+1))
- 需在 TIM_Cmd 之前调用
3. TIM_OC1Init
/**
* @brief 初始化通道 1 输出比较/PWM(模式、极性、初始占空比),配置 CH1 引脚波形如何产生
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCInitStruct: 指向TIM_OCInitTypeDef结构体的指针
* @retval 无
* @example
* TIM_OCInitTypeDef TIM_OCInitStructure;
* TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
* TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
* TIM_OCInitStructure.TIM_Pulse = 500;
* TIM_OC1Init(TIM2, &TIM_OCInitStructure);
*/
void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);功能说明:
- 可配置 PWM1/PWM2、翻转、强制输出等模式
- TIM_Pulse 写入 CCR1,决定初始占空比
- 高级定时器 TIM1/8 还可配置互补输出 OC1N
4. TIM_OC2Init
/**
* @brief 初始化通道 2 输出比较/PWM(模式、极性、初始占空比),配置 CH2 引脚波形如何产生
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCInitStruct: 指向TIM_OCInitTypeDef结构体的指针
* @retval 无
* @example
* TIM_OCInitTypeDef TIM_OCInitStructure;
* TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
* TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
* TIM_OCInitStructure.TIM_Pulse = 750;
* TIM_OC2Init(TIM2, &TIM_OCInitStructure);
*/
void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);功能说明:
- 参数含义同 TIM_OC1Init,作用于 CCR2/CH2
- 多路独立 PWM 时各通道分别 Init
5. TIM_OC3Init
/**
* @brief 初始化通道 3 输出比较/PWM(模式、极性、初始占空比),配置 CH3 引脚波形如何产生
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCInitStruct: 指向TIM_OCInitTypeDef结构体的指针
* @retval 无
* @example
* TIM_OCInitTypeDef TIM_OCInitStructure;
* TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
* TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
* TIM_OCInitStructure.TIM_Pulse = 250;
* TIM_OC3Init(TIM3, &TIM_OCInitStructure);
*/
void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);功能说明:
- 参数含义同 TIM_OC1Init,作用于 CCR3/CH3
- 常用于电机互补 PWM 的上桥或下桥驱动
6. TIM_OC4Init
/**
* @brief 初始化通道 4 输出比较/PWM(模式、极性、初始占空比),配置 CH4 引脚波形如何产生
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCInitStruct: 指向TIM_OCInitTypeDef结构体的指针
* @retval 无
* @example
* TIM_OCInitTypeDef TIM_OCInitStructure;
* TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
* TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
* TIM_OCInitStructure.TIM_Pulse = 100;
* TIM_OC4Init(TIM4, &TIM_OCInitStructure);
*/
void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);功能说明:
- 参数含义同 TIM_OC1Init,作用于 CCR4/CH4
- Toggle 模式可用于生成方波或 STEP 脉冲
7. TIM_ICInit
/**
* @brief 初始化输入捕获(边沿、通道映射、滤波),用于硬件锁存事件发生时刻的 CNT 值
* @param TIMx: 选择要配置的TIM外设
* @param TIM_ICInitStruct: 指向TIM_ICInitTypeDef结构体的指针
* @retval 无
* @example
* TIM_ICInitTypeDef TIM_ICInitStructure;
* TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
* TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
* TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
* TIM_ICInit(TIM2, &TIM_ICInitStructure);
*/
void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);功能说明:
- 上升/下降沿触发时将 CNT 写入 CCR
- 可测脉宽、周期、频率,无需 CPU 轮询引脚
- TIM_ICFilter 可滤除毛刺
8. TIM_PWMIConfig
/**
* @brief 配置 PWM 输入模式:CH1 测周期、CH2 自动测占空比,一次配置即可解码外部 PWM 信号
* @param TIMx: 选择要配置的TIM外设
* @param TIM_ICInitStruct: 指向TIM_ICInitTypeDef结构体的指针
* @retval 无
* @example
* TIM_ICInitTypeDef TIM_ICInitStructure;
* TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
* TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
* TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);
*/
void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);功能说明:
- 内部将 CH1 映射为周期测量、CH2 映射为脉宽测量
- 适合读取舵机、调速器等外部 PWM 输入
- 只需对 CH1 调用,CH2 由硬件自动关联
9. TIM_BDTRConfig
/**
* @brief 配置刹车与死区(仅 TIM1/8),防止互补 PWM 上下管直通,并支持故障时关断输出
* @param TIMx: 选择要配置的TIM外设,可以是TIM1或TIM8
* @param TIM_BDTRInitStruct: 指向TIM_BDTRInitTypeDef结构体的指针
* @retval 无
* @example
* TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
* TIM_BDTRInitStructure.TIM_DeadTime = 50;
* TIM_BDTRInitStructure.TIM_Break = TIM_Break_Enable;
* TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
*/
void TIM_BDTRConfig(TIM_TypeDef* TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct);功能说明:
- TIM_DeadTime 在 OCx 与 OCxN 切换间插入延迟,避免 shoot-through
- Break 引脚触发时可强制关断 MOE
- 电机/逆变等互补驱动场景必须配置
10. TIM_TimeBaseStructInit
/**
* @brief 将 TIM_TimeBaseInitTypeDef 成员填为安全默认值,避免未赋值字段导致随机配置
* @param TIM_TimeBaseInitStruct: 指向要初始化的TIM_TimeBaseInitTypeDef结构体的指针
* @retval 无
* @example
* TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
* TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
*/
void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);功能说明:
- 典型用法:先 StructInit,再按需修改 Period/Prescaler 等
- 推荐每次 Init 前调用
11. TIM_OCStructInit
/**
* @brief 将 TIM_OCInitTypeDef 成员填为安全默认值,避免未赋值字段导致随机配置
* @param TIM_OCInitStruct: 指向要初始化的TIM_OCInitTypeDef结构体的指针
* @retval 无
* @example
* TIM_OCInitTypeDef TIM_OCInitStructure;
* TIM_OCStructInit(&TIM_OCInitStructure);
*/
void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct);功能说明:
- 默认关闭输出、PWM 模式、零占空比
- 多通道共用同一结构体时,每通道 Init 前建议重新 StructInit
12. TIM_ICStructInit
/**
* @brief 将 TIM_ICInitTypeDef 成员填为安全默认值,避免未赋值字段导致随机配置
* @param TIM_ICInitStruct: 指向要初始化的TIM_ICInitTypeDef结构体的指针
* @retval 无
* @example
* TIM_ICInitTypeDef TIM_ICInitStructure;
* TIM_ICStructInit(&TIM_ICInitStructure);
*/
void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct);功能说明:
- 默认上升沿、无滤波、不分频
- Init 前调用可确保未设置的字段为已知值
13. TIM_BDTRStructInit
/**
* @brief 将 TIM_BDTRInitTypeDef 成员填为安全默认值,避免未赋值字段导致随机配置
* @param TIM_BDTRInitStruct: 指向要初始化的TIM_BDTRInitTypeDef结构体的指针
* @retval 无
* @example
* TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
* TIM_BDTRStructInit(&TIM_BDTRInitStructure);
*/
void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct);功能说明:
- 默认无死区、刹车关闭
- 仅 TIM1/8 使用
14. TIM_Cmd
/**
* @brief 启动或停止 TIM 计数器;ENABLE 后 CNT 开始计数,DISABLE 后停止
* @param TIMx: 选择要控制的TIM外设
* @param NewState: TIM外设的新状态,可以是ENABLE或DISABLE
* @retval 无
* @example
* TIM_Cmd(TIM2, ENABLE);
*/
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);功能说明:
- 仅控制计数器运行,不决定引脚是否输出 PWM
- 引脚输出还取决于 OC 配置、CC 使能及 TIM1/8 的 MOE
- 初始化完成后最后调用 ENABLE
15. TIM_CtrlPWMOutputs
/**
* @brief 打开/关闭高级定时器主输出 MOE(仅 TIM1/8);未 ENABLE 时 CHx/CHxN 引脚无 PWM
* @param TIMx: 选择要控制的TIM外设,可以是TIM1或TIM8
* @param NewState: 主输出的新状态,可以是ENABLE或DISABLE
* @retval 无
* @example
* TIM_CtrlPWMOutputs(TIM1, ENABLE);
*/
void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState);功能说明:
- 置位 BDTR 寄存器 MOE 位
- 互补 PWM、电机驱动必须调用 ENABLE
- 与 TIM_Cmd 独立:两者都 ENABLE 才有完整输出
16. TIM_ITConfig
/**
* @brief 使能/屏蔽指定 TIM 中断源(更新、捕获、比较等),配合 NVIC 实现周期任务或事件响应
* @param TIMx: 选择要控制的TIM外设
* @param TIM_IT: 指定要使能或失能的TIM中断源
* @param NewState: 指定TIM中断的新状态,可以是ENABLE或DISABLE
* @retval 无
* @example
* TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
*/
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);功能说明:
- 仅控制 TIM 内部中断使能,还需 NVIC_Init 配置优先级
- 可同时使能多个中断源(如 Update + CC1)
17. TIM_GenerateEvent
/**
* @brief 软件触发 TIM 事件(如更新、捕获),用于预装载同步、强制产生更新或调试从模式
* @param TIMx: 选择要产生事件的TIM外设
* @param TIM_EventSource: 指定要产生的事件源
* @retval 无
* @example
* TIM_GenerateEvent(TIM2, TIM_EventSource_Update);
*/
void TIM_GenerateEvent(TIM_TypeDef* TIMx, uint16_t TIM_EventSource);功能说明:
- 等效于硬件产生一次 UG/CC 事件
- 批量修改 ARR/CCR 后可发 Update 事件使预装载立即生效
- 调试主从级联时用于手动触发
18. TIM_DMAConfig
/**
* @brief 配置 DMA 突发传输的起始寄存器和连续传输长度,配合 DMA 批量读写 TIM 寄存器
* @param TIMx: 选择要配置的TIM外设
* @param TIM_DMABase: DMA基地址
* @param TIM_DMABurstLength: DMA突发长度
* @retval 无
* @example
* TIM_DMAConfig(TIM2, TIM_DMABase_ARR, TIM_DMABurstLength_1Transfer);
*/
void TIM_DMAConfig(TIM_TypeDef* TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength);功能说明:
- 指定从哪个 TIM 寄存器开始、连续读/写几个
- 需与 TIM_DMACmd 和 DMA 通道初始化配合使用
19. TIM_DMACmd
/**
* @brief 使能/关闭 TIM 的 DMA 请求(更新或 CC 事件触发 DMA),用于无 CPU 参与的连续搬运
* @param TIMx: 选择要控制的TIM外设
* @param TIM_DMASource: 指定DMA请求源
* @param NewState: DMA请求的新状态,可以是ENABLE或DISABLE
* @retval 无
* @example
* TIM_DMACmd(TIM2, TIM_DMA_Update, ENABLE);
*/
void TIM_DMACmd(TIM_TypeDef* TIMx, uint16_t TIM_DMASource, FunctionalState NewState);功能说明:
- Update DMA:每次溢出触发,适合周期性更新多个寄存器
- CC DMA:捕获事件触发,适合连续采样捕获值
20. TIM_InternalClockConfig
/**
* @brief 选择内部时钟作为 TIM 时钟源,最常见的定时/PWM 用法
* @param TIMx: 选择要配置的TIM外设
* @retval 无
* @example
* TIM_InternalClockConfig(TIM2);
*/
void TIM_InternalClockConfig(TIM_TypeDef* TIMx);功能说明:
- 默认模式,TIM 由 APB 总线时钟经倍频后驱动
- 绝大多数定时、PWM、捕获应用使用此配置
21. TIM_ITRxExternalClockConfig
/**
* @brief 用其他 TIM 的 TRGO(ITR 互联)作为时钟,实现定时器级联或同步计数
* @param TIMx: 选择要配置的TIM外设
* @param TIM_InputTriggerSource: 触发器输入源
* @retval 无
* @example
* TIM_ITRxExternalClockConfig(TIM2, TIM_TS_ITR0);
*/
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);功能说明:
- 从 TIM 每个 ITR 脉冲 CNT+1
- 典型:主 TIM 溢出触发从 TIM 计数,实现长定时
- ITR 映射关系见参考手册 Timer linking 表
22. TIM_TIxExternalClockConfig
/**
* @brief 用 TIx 引脚边沿作为外部时钟,每个有效边沿 CNT+1,适合脉冲计数或测频
* @param TIMx: 选择要配置的TIM外设
* @param TIM_TIxExternalCLKSource: 触发器输入源
* @param TIM_ICPolarity: 指定TIx触发器检测极性
* @param ICFilter: 指定输入捕获滤波器,范围0x0到0xF
* @retval 无
* @example
* TIM_TIxExternalClockConfig(TIM2, TIM_TIxExternalCLK1Source_TI1, TIM_ICPolarity_Rising, 0);
*/
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource, uint16_t TIM_ICPolarity, uint16_t ICFilter);功能说明:
- 可选 TI1/TI2 及边沿极性
- 配合 ICFilter 抗干扰
- 适合统计外部脉冲个数(如 STEP 脉冲计数)
23. TIM_ETRClockMode1Config
/**
* @brief 外部时钟模式 1:ETR 经滤波/分频后作为时钟,同时保留触发功能
* @param TIMx: 选择要配置的TIM外设
* @param TIM_ExtTRGPrescaler: 外部触发预分频器
* @param TIM_ExtTRGPolarity: 外部触发极性
* @param ExtTRGFilter: 外部触发滤波器,范围0x0到0xF
* @retval 无
* @example
* TIM_ETRClockMode1Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
*/
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);功能说明:
- ETR 引脚每个有效边沿驱动计数
- 比模式 2 多了触发/门控相关特性
- 适合外部高速脉冲计数
24. TIM_ETRClockMode2Config
/**
* @brief 外部时钟模式 2:ETR 直接作为时钟源,每个 ETR 边沿 CNT+1
* @param TIMx: 选择要配置的TIM外设
* @param TIM_ExtTRGPrescaler: 外部触发预分频器
* @param TIM_ExtTRGPolarity: 外部触发极性
* @param ExtTRGFilter: 外部触发滤波器,范围0x0到0xF
* @retval 无
* @example
* TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_DIV2, TIM_ExtTRGPolarity_Inverted, 0);
*/
void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);功能说明:
- 配置相对简单,ETR 仅作时钟
- 适合外部提供计数时钟的场景
25. TIM_ETRConfig
/**
* @brief 单独配置 ETR 引脚的预分频、极性与滤波,供外部时钟或触发使用
* @param TIMx: 选择要配置的TIM外设
* @param TIM_ExtTRGPrescaler: 外部触发预分频器
* @param TIM_ExtTRGPolarity: 外部触发极性
* @param ExtTRGFilter: 外部触发滤波器,范围0x0到0xF
* @retval 无
* @example
* TIM_ETRConfig(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
*/
void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);功能说明:
- 不切换从模式,仅设置 ETR 输入特性
- 可与从模式、外部时钟模式配合
26. TIM_PrescalerConfig
/**
* @brief 运行时修改预分频 PSC;可选立即生效或等更新事件生效,用于动态改变定时频率
* @param TIMx: 选择要配置的TIM外设
* @param Prescaler: 指定预分频器寄存器值
* @param TIM_PSCReloadMode: 指定TIM预分频器重载模式
* @retval 无
* @example
* TIM_PrescalerConfig(TIM2, 7199, TIM_PSCReloadMode_Immediate);
*/
void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);功能说明:
- Immediate:立刻改变计数频率
- UpdateEvent:下个溢出时生效,避免周期突变
- 动态调频时建议用 UpdateEvent 模式
27. TIM_CounterModeConfig
/**
* @brief 切换计数方向/对齐方式(向上、向下、中央对齐),影响 PWM 对称性与中断时机
* @param TIMx: 选择要配置的TIM外设
* @param TIM_CounterMode: 指定计数器模式
* @retval 无
* @example
* TIM_CounterModeConfig(TIM2, TIM_CounterMode_Up);
*/
void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode);功能说明:
- Up:常规递增计数
- Down:递减计数
- CenterAligned:中央对齐 PWM,电机控制常用
28. TIM_SelectInputTrigger
/**
* @brief 选择从模式/同步用的输入触发源 TRGI(ITR、TI、ETR 等)
* @param TIMx: 选择要配置的TIM外设
* @param TIM_InputTriggerSource: 输入触发器源
* @retval 无
* @example
* TIM_SelectInputTrigger(TIM2, TIM_TS_ITR0);
*/
void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);功能说明:
- 从模式必须先选好 TRGI 来源
- 主从级联、编码器、外部时钟等场景的前置步骤
29. TIM_EncoderInterfaceConfig
/**
* @brief 配置正交编码器接口,硬件根据 A/B 相自动增减 CNT,用于测位置/转速
* @param TIMx: 选择要配置的TIM外设
* @param TIM_EncoderMode: 指定编码器模式
* @param TIM_IC1Polarity: 指定IC1极性
* @param TIM_IC2Polarity: 指定IC2极性
* @retval 无
* @example
* TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
*/
void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode, uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity);功能说明:
- TI1/TI2 接编码器 A/B 相
- 模式 TI12 在双相边沿计数,分辨率最高
- CNT 值即累计脉冲位置,可读 TIM_GetCounter
30. TIM_ForcedOC1Config
/**
* @brief 强制 OC1 输出高/低电平,不受 PWM 比较影响;用于刹车、测试或静态置位
* @param TIMx: 选择要配置的TIM外设
* @param TIM_ForcedAction: 指定强制动作
* @retval 无
* @example
* TIM_ForcedOC1Config(TIM2, TIM_ForcedAction_Active);
*/
void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);功能说明:
- Active:强制有效电平
- InActive:强制无效电平
- 退出强制模式需重新配置 OC 模式
31. TIM_ForcedOC2Config
/**
* @brief 强制 OC2 输出高/低电平,不受 PWM 比较影响;用于刹车、测试或静态置位
* @param TIMx: 选择要配置的TIM外设
* @param TIM_ForcedAction: 指定强制动作
* @retval 无
* @example
* TIM_ForcedOC2Config(TIM2, TIM_ForcedAction_InActive);
*/
void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);功能说明:
- 含义同 TIM_ForcedOC1Config,作用于通道 2
32. TIM_ForcedOC3Config
/**
* @brief 强制 OC3 输出高/低电平,不受 PWM 比较影响;用于刹车、测试或静态置位
* @param TIMx: 选择要配置的TIM外设
* @param TIM_ForcedAction: 指定强制动作
* @retval 无
* @example
* TIM_ForcedOC3Config(TIM3, TIM_ForcedAction_Active);
*/
void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);功能说明:
- 含义同 TIM_ForcedOC1Config,作用于通道 3
33. TIM_ForcedOC4Config
/**
* @brief 强制 OC4 输出高/低电平,不受 PWM 比较影响;用于刹车、测试或静态置位
* @param TIMx: 选择要配置的TIM外设
* @param TIM_ForcedAction: 指定强制动作
* @retval 无
* @example
* TIM_ForcedOC4Config(TIM3, TIM_ForcedAction_InActive);
*/
void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);功能说明:
- 含义同 TIM_ForcedOC1Config,作用于通道 4
34. TIM_ARRPreloadConfig
/**
* @brief 配置 ARR 预装载:使能后新周期值在下个更新事件生效,运行时改频率不产生半周期截断
* @param TIMx: 选择要配置的TIM外设
* @param NewState: ARR预装载寄存器的新状态,可以是ENABLE或DISABLE
* @retval 无
* @example
* TIM_ARRPreloadConfig(TIM2, ENABLE);
*/
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);功能说明:
- 对应 ARPE 位
- 与 CCR 预装载配合实现 ARR/CCR 同步更新
- PWM 运行时动态调频建议 ENABLE
35. TIM_SelectCOM
/**
* @brief 使能 COM 事件(仅 TIM1/8):在更新时同步加载 OC 预装载,互补 PWM 换相时常用
* @param TIMx: 选择要配置的TIM外设,可以是TIM1或TIM8
* @param NewState: COM事件选择的新状态,可以是ENABLE或DISABLE
* @retval 无
* @example
* TIM_SelectCOM(TIM1, ENABLE);
*/
void TIM_SelectCOM(TIM_TypeDef* TIMx, FunctionalState NewState);功能说明:
- COM 事件将所有 OC 影子寄存器同时加载
- 多路互补 PWM 需同步更新占空比时使用
36. TIM_SelectCCDMA
/**
* @brief 选择 CC 事件是否作为 DMA 请求源(相对 Update DMA),用于捕获值批量搬运
* @param TIMx: 选择要配置的TIM外设
* @param NewState: 捕获比较DMA源选择的新状态,可以是ENABLE或DISABLE
* @retval 无
* @example
* TIM_SelectCCDMA(TIM2, ENABLE);
*/
void TIM_SelectCCDMA(TIM_TypeDef* TIMx, FunctionalState NewState);功能说明:
- ENABLE:CC1~4 事件可触发 CC DMA
- 适合连续捕获多个通道数据
37. TIM_CCPreloadControl
/**
* @brief 控制 CC 预装载更新时机:可强制所有 CC 预装载在同一更新事件一起生效
* @param TIMx: 选择要配置的TIM外设
* @param NewState: 捕获比较预装载控制位的新状态,可以是ENABLE或DISABLE
* @retval 无
* @example
* TIM_CCPreloadControl(TIM2, ENABLE);
*/
void TIM_CCPreloadControl(TIM_TypeDef* TIMx, FunctionalState NewState);功能说明:
- 配合 COM 事件实现多通道同步更新
- 高级定时器多路 PWM 同步换相时使用
38. TIM_OC1PreloadConfig
/**
* @brief 配置 CCR1 预装载:使能后 TIM_SetCompare1 写入值在下个更新事件生效,避免 PWM 毛刺
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCPreload: TIM输出比较预装载状态
* @retval 无
* @example
* TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
*/
void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);功能说明:
- 对应 OC1PE 位
- 运行时调占空比建议 TIM_OCPreload_Enable
- 失能则 CCR 立即参与比较,可能产生异常脉宽
39. TIM_OC2PreloadConfig
/**
* @brief 配置 CCR2 预装载:使能后 TIM_SetCompare2 写入值在下个更新事件生效,避免 PWM 毛刺
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCPreload: TIM输出比较预装载状态
* @retval 无
* @example
* TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
*/
void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);功能说明:
- 含义同 TIM_OC1PreloadConfig,作用于 CCR2
40. TIM_OC3PreloadConfig
/**
* @brief 配置 CCR3 预装载:使能后 TIM_SetCompare3 写入值在下个更新事件生效,避免 PWM 毛刺
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCPreload: TIM输出比较预装载状态
* @retval 无
* @example
* TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
*/
void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);功能说明:
- 含义同 TIM_OC1PreloadConfig,作用于 CCR3
- 电机调速等运行时改占空比场景建议开启
41. TIM_OC4PreloadConfig
/**
* @brief 配置 CCR4 预装载:使能后 TIM_SetCompare4 写入值在下个更新事件生效,避免 PWM 毛刺
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCPreload: TIM输出比较预装载状态
* @retval 无
* @example
* TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Disable);
*/
void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);功能说明:
- 含义同 TIM_OC1PreloadConfig,作用于 CCR4
42. TIM_OC1FastConfig
/**
* @brief 配置 OC1 快速模式:使能后触发事件时立即输出,不等待下一更新;单脉冲/快速响应场景使用
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCFast: TIM输出比较快速特性状态
* @retval 无
* @example
* TIM_OC1FastConfig(TIM2, TIM_OCFast_Enable);
*/
void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);功能说明:
- Enable:比较匹配立即生效
- Disable:等更新事件(默认,波形更规整)
- 单脉冲输出通常 Enable
43. TIM_OC2FastConfig
/**
* @brief 配置 OC2 快速模式:使能后触发事件时立即输出,不等待下一更新
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCFast: TIM输出比较快速特性状态
* @retval 无
* @example
* TIM_OC2FastConfig(TIM2, TIM_OCFast_Disable);
*/
void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);功能说明:
- 含义同 TIM_OC1FastConfig,作用于通道 2
44. TIM_OC3FastConfig
/**
* @brief 配置 OC3 快速模式:使能后触发事件时立即输出,不等待下一更新
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCFast: TIM输出比较快速特性状态
* @retval 无
* @example
* TIM_OC3FastConfig(TIM3, TIM_OCFast_Enable);
*/
void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);功能说明:
- 含义同 TIM_OC1FastConfig,作用于通道 3
45. TIM_OC4FastConfig
/**
* @brief 配置 OC4 快速模式:使能后触发事件时立即输出,不等待下一更新
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCFast: TIM输出比较快速特性状态
* @retval 无
* @example
* TIM_OC4FastConfig(TIM3, TIM_OCFast_Disable);
*/
void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);功能说明:
- 含义同 TIM_OC1FastConfig,作用于通道 4
46. TIM_ClearOC1Ref
/**
* @brief 配置 ETR 触发时是否清零 OC1REF 内部信号,用于外部同步关断 PWM 输出
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCClear: TIM输出比较清除状态
* @retval 无
* @example
* TIM_ClearOC1Ref(TIM2, TIM_OCClear_Enable);
*/
void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);功能说明:
- Enable:ETR 有效时强制 OC1REF 为低
- Disable:不受 ETR 清除影响
- 高级定时器同步控制场景使用
47. TIM_ClearOC2Ref
/**
* @brief 配置 ETR 触发时是否清零 OC2REF 内部信号,用于外部同步关断 PWM 输出
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCClear: TIM输出比较清除状态
* @retval 无
* @example
* TIM_ClearOC2Ref(TIM2, TIM_OCClear_Disable);
*/
void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);功能说明:
- 含义同 TIM_ClearOC1Ref,作用于通道 2
48. TIM_ClearOC3Ref
/**
* @brief 配置 ETR 触发时是否清零 OC3REF 内部信号,用于外部同步关断 PWM 输出
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCClear: TIM输出比较清除状态
* @retval 无
* @example
* TIM_ClearOC3Ref(TIM3, TIM_OCClear_Enable);
*/
void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);功能说明:
- 含义同 TIM_ClearOC1Ref,作用于通道 3
49. TIM_ClearOC4Ref
/**
* @brief 配置 ETR 触发时是否清零 OC4REF 内部信号,用于外部同步关断 PWM 输出
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCClear: TIM输出比较清除状态
* @retval 无
* @example
* TIM_ClearOC4Ref(TIM3, TIM_OCClear_Disable);
*/
void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);功能说明:
- 含义同 TIM_ClearOC1Ref,作用于通道 4
50. TIM_OC1PolarityConfig
/**
* @brief 设置 OC1 有效电平极性(高有效/低有效),决定 PWM 高电平对应引脚的实际电平
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCPolarity: 指定OC1极性
* @retval 无
* @example
* TIM_OC1PolarityConfig(TIM2, TIM_OCPolarity_High);
*/
void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);功能说明:
- High:当 CNT 小于 CCR 时输出高(PWM1 模式下)
- Low:反相输出
- 需与 TIM_OCPolarity 初始配置一致或运行时动态切换
51. TIM_OC1NPolarityConfig
/**
* @brief 设置互补通道 OC1N 极性(仅 TIM1/8),需与 OC1 配合并考虑死区
* @param TIMx: 选择要配置的TIM外设,可以是TIM1或TIM8
* @param TIM_OCNPolarity: 指定OC1N极性
* @retval 无
* @example
* TIM_OC1NPolarityConfig(TIM1, TIM_OCNPolarity_High);
*/
void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);功能说明:
- 互补输出极性通常与主通道相反或相同,取决于驱动电路
- 错误极性可能导致上下管同时导通
52. TIM_OC2PolarityConfig
/**
* @brief 设置 OC2 有效电平极性(高有效/低有效),决定 PWM 高电平对应引脚的实际电平
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCPolarity: 指定OC2极性
* @retval 无
* @example
* TIM_OC2PolarityConfig(TIM2, TIM_OCPolarity_Low);
*/
void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);功能说明:
- 含义同 TIM_OC1PolarityConfig,作用于通道 2
53. TIM_OC2NPolarityConfig
/**
* @brief 设置互补通道 OC2N 极性(仅 TIM1/8),需与 OC2 配合并考虑死区
* @param TIMx: 选择要配置的TIM外设,可以是TIM1或TIM8
* @param TIM_OCNPolarity: 指定OC2N极性
* @retval 无
* @example
* TIM_OC2NPolarityConfig(TIM1, TIM_OCNPolarity_Low);
*/
void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);功能说明:
- 含义同 TIM_OC1NPolarityConfig,作用于通道 2
54. TIM_OC3PolarityConfig
/**
* @brief 设置 OC3 有效电平极性(高有效/低有效),决定 PWM 高电平对应引脚的实际电平
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCPolarity: 指定OC3极性
* @retval 无
* @example
* TIM_OC3PolarityConfig(TIM3, TIM_OCPolarity_High);
*/
void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);功能说明:
- 含义同 TIM_OC1PolarityConfig,作用于通道 3
55. TIM_OC3NPolarityConfig
/**
* @brief 设置互补通道 OC3N 极性(仅 TIM1/8),需与 OC3 配合并考虑死区
* @param TIMx: 选择要配置的TIM外设,可以是TIM1或TIM8
* @param TIM_OCNPolarity: 指定OC3N极性
* @retval 无
* @example
* TIM_OC3NPolarityConfig(TIM1, TIM_OCNPolarity_High);
*/
void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);功能说明:
- 含义同 TIM_OC1NPolarityConfig,作用于通道 3
56. TIM_OC4PolarityConfig
/**
* @brief 设置 OC4 有效电平极性(高有效/低有效),决定 PWM 高电平对应引脚的实际电平
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OCPolarity: 指定OC4极性
* @retval 无
* @example
* TIM_OC4PolarityConfig(TIM3, TIM_OCPolarity_Low);
*/
void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);功能说明:
- 含义同 TIM_OC1PolarityConfig,作用于通道 4
57. TIM_CCxCmd
/**
* @brief 使能/关闭指定 CC 通道输出到引脚,运行时动态开关某路 PWM 而不改其他配置
* @param TIMx: 选择要配置的TIM外设
* @param TIM_Channel: 指定TIM通道
* @param TIM_CCx: 指定TIM通道状态
* @retval 无
* @example
* TIM_CCxCmd(TIM2, TIM_Channel_1, TIM_CCx_Enable);
*/
void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx);功能说明:
- Enable:OC 结果输出到 GPIO
- Disable:通道输出关闭(高阻或空闲态)
- 适合运行时选择性启停某路 PWM
58. TIM_CCxNCmd
/**
* @brief 使能/关闭互补通道 OCxN 输出(仅 TIM1/8),控制下桥臂是否工作
* @param TIMx: 选择要配置的TIM外设,可以是TIM1或TIM8
* @param TIM_Channel: 指定TIM通道
* @param TIM_CCxN: 指定TIM通道状态
* @retval 无
* @example
* TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Enable);
*/
void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN);功能说明:
- Enable:互补输出有效
- Disable:OCxN 关闭
- 电机驱动中可单独控制上下桥
59. TIM_SelectOCxM
/**
* @brief 运行时切换指定通道 OC 模式(PWM1/翻转/强制等),无需重新 Init 整个通道
* @param TIMx: 选择要配置的TIM外设
* @param TIM_Channel: 指定TIM通道
* @param TIM_OCMode: 指定TIM输出比较模式
* @retval 无
* @example
* TIM_SelectOCxM(TIM2, TIM_Channel_1, TIM_OCMode_PWM1);
*/
void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode);功能说明:
- 适合动态切换 PWM 与 Toggle 等模式
- 比重新 OCxInit 更轻量
60. TIM_UpdateDisableConfig
/**
* @brief 禁止/允许更新事件:DISABLE 时写 ARR/CCR 不触发更新,可批量改寄存器后一次性生效
* @param TIMx: 选择要配置的TIM外设
* @param NewState: TIM更新事件的新状态,可以是ENABLE或DISABLE
* @retval 无
* @example
* TIM_UpdateDisableConfig(TIM2, DISABLE);
*/
void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, FunctionalState NewState);功能说明:
- DISABLE:UG 被屏蔽,预装载暂存
- ENABLE:恢复正常更新
- 需配合 TIM_GenerateEvent 手动触发更新
61. TIM_UpdateRequestConfig
/**
* @brief 选择更新中断/DMA 由溢出触发还是仅由软件 UG 触发,用于精细控制更新时机
* @param TIMx: 选择要配置的TIM外设
* @param TIM_UpdateSource: 指定更新源
* @retval 无
* @example
* TIM_UpdateRequestConfig(TIM2, TIM_UpdateSource_Regular);
*/
void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, uint16_t TIM_UpdateSource);功能说明:
- Regular:溢出或 UG 均产生更新请求
- Global:仅 UG 和从模式复位产生
- 批量改寄存器时用 Global 避免多次中断
62. TIM_SelectHallSensor
/**
* @brief 使能霍尔传感器接口,配合 TIM1/8 实现无刷电机三相换相
* @param TIMx: 选择要配置的TIM外设
* @param NewState: TIMx霍尔传感器接口的新状态,可以是ENABLE或DISABLE
* @retval 无
* @example
* TIM_SelectHallSensor(TIM2, ENABLE);
*/
void TIM_SelectHallSensor(TIM_TypeDef* TIMx, FunctionalState NewState);功能说明:
- Enable:TI1/TI2/TI3 接霍尔信号,硬件辅助换相
- Disable:普通定时器模式
- BLDC 电机控制专用
63. TIM_SelectOnePulseMode
/**
* @brief 选择单脉冲模式:计数一次后自动停止,适合产生固定宽度脉冲(如 STEP 脉冲)
* @param TIMx: 选择要配置的TIM外设
* @param TIM_OPMode: 指定单脉冲模式
* @retval 无
* @example
* TIM_SelectOnePulseMode(TIM2, TIM_OPMode_Single);
*/
void TIM_SelectOnePulseMode(TIM_TypeDef* TIMx, uint16_t TIM_OPMode);功能说明:
- Single:一个 PWM 周期后 CNT 停止
- Repetitive:连续输出(默认)
- 配合 TIM_OCxFastConfig 使用效果更佳
64. TIM_SelectOutputTrigger
/**
* @brief 选择 TRGO 输出源(更新、比较、使能等),供 ADC/DAC 或其他 TIM 同步触发
* @param TIMx: 选择要配置的TIM外设
* @param TIM_TRGOSource: 指定触发器输出源
* @retval 无
* @example
* TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);
*/
void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource);功能说明:
- Update:溢出时输出 TRGO,常用于 ADC 同步采样
- OCxRef:比较匹配时触发
- 主从级联时从 TIM 的 TRGI 接主 TIM 的 TRGO
65. TIM_SelectSlaveMode
/**
* @brief 配置从模式(复位、门控、外部时钟等),使 TIM 受 TRGI 控制
* @param TIMx: 选择要配置的TIM外设
* @param TIM_SlaveMode: 指定定时器从模式
* @retval 无
* @example
* TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);
*/
void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode);功能说明:
- Reset:TRGI 上升沿复位 CNT
- Gated:TRGI 高电平期间计数
- External1:TRGI 作为外部时钟
- 需先 TIM_SelectMasterSlaveMode(Enable)
66. TIM_SelectMasterSlaveMode
/**
* @brief 总开关:使能后从模式才响应 TRGI;主从级联必须先 ENABLE
* @param TIMx: 选择要配置的TIM外设
* @param TIM_MasterSlaveMode: 指定定时器主从模式
* @retval 无
* @example
* TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);
*/
void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode);功能说明:
- Enable:从模式配置生效
- Disable:忽略 TRGI(默认)
- 使用 TIM_SelectSlaveMode 前必须 Enable
67. TIM_SetCounter
/**
* @brief 写入 CNT 当前值,用于复位计数、设置起始相位或同步多个 TIM
* @param TIMx: 选择要配置的TIM外设
* @param Counter: 指定计数器寄存器新值
* @retval 无
* @example
* TIM_SetCounter(TIM2, 500);
*/
void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter);功能说明:
- 设为 0 等效于软件复位计数器
- 编码器模式下可清零位置
- 多 TIM 同步时可统一设 CNT
68. TIM_SetAutoreload
/**
* @brief 运行时修改 ARR,改变 PWM 频率/定时周期(配合预装载决定何时生效)
* @param TIMx: 选择要配置的TIM外设
* @param Autoreload: 指定自动重装载寄存器新值
* @retval 无
* @example
* TIM_SetAutoreload(TIM2, 999);
*/
void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload);功能说明:
- 已开 ARR 预装载时下周期生效
- 未开预装载则立即改变当前周期长度
- 频率 = TIM_CLK / ((PSC+1)×(ARR+1))
69. TIM_SetCompare1
/**
* @brief 运行时修改 CCR1,改变 PWM 占空比或比较时刻(配合 OC 预装载决定何时生效)
* @param TIMx: 选择要配置的TIM外设
* @param Compare1: 指定捕获比较1寄存器新值
* @retval 无
* @example
* TIM_SetCompare1(TIM2, 250);
*/
void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1);功能说明:
- PWM 模式:占空比 ≈ CCR1 / (ARR+1)
- 已开 OC 预装载时下周期生效
- 电机调速、LED 调光等运行时调参常用
70. TIM_SetCompare2
/**
* @brief 运行时修改 CCR2,改变 PWM 占空比或比较时刻
* @param TIMx: 选择要配置的TIM外设
* @param Compare2: 指定捕获比较2寄存器新值
* @retval 无
* @example
* TIM_SetCompare2(TIM2, 500);
*/
void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);功能说明:
- 含义同 TIM_SetCompare1,作用于 CCR2
71. TIM_SetCompare3
/**
* @brief 运行时修改 CCR3,改变 PWM 占空比或比较时刻
* @param TIMx: 选择要配置的TIM外设
* @param Compare3: 指定捕获比较3寄存器新值
* @retval 无
* @example
* TIM_SetCompare3(TIM3, 750);
*/
void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3);功能说明:
- 含义同 TIM_SetCompare1,作用于 CCR3
72. TIM_SetCompare4
/**
* @brief 运行时修改 CCR4,改变 PWM 占空比或比较时刻
* @param TIMx: 选择要配置的TIM外设
* @param Compare4: 指定捕获比较4寄存器新值
* @retval 无
* @example
* TIM_SetCompare4(TIM3, 100);
*/
void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4);功能说明:
- 含义同 TIM_SetCompare1,作用于 CCR4
73. TIM_SetIC1Prescaler
/**
* @brief 设置 IC1 捕获分频(每 N 个边沿捕获一次),降低高频信号的中断频率
* @param TIMx: 选择要配置的TIM外设
* @param TIM_ICPSC: 指定输入捕获1预分频器新值
* @retval 无
* @example
* TIM_SetIC1Prescaler(TIM2, TIM_ICPSC_DIV4);
*/
void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);功能说明:
- DIV1:每个边沿捕获
- DIV2/4/8:每 2/4/8 个边沿捕获一次
- 信号频率过高时可分频减轻 CPU 负担
74. TIM_SetIC2Prescaler
/**
* @brief 设置 IC2 捕获分频(每 N 个边沿捕获一次),降低高频信号的中断频率
* @param TIMx: 选择要配置的TIM外设
* @param TIM_ICPSC: 指定输入捕获2预分频器新值
* @retval 无
* @example
* TIM_SetIC2Prescaler(TIM2, TIM_ICPSC_DIV2);
*/
void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);功能说明:
- 含义同 TIM_SetIC1Prescaler,作用于通道 2
75. TIM_SetIC3Prescaler
/**
* @brief 设置 IC3 捕获分频(每 N 个边沿捕获一次),降低高频信号的中断频率
* @param TIMx: 选择要配置的TIM外设
* @param TIM_ICPSC: 指定输入捕获3预分频器新值
* @retval 无
* @example
* TIM_SetIC3Prescaler(TIM3, TIM_ICPSC_DIV8);
*/
void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);功能说明:
- 含义同 TIM_SetIC1Prescaler,作用于通道 3
76. TIM_SetIC4Prescaler
/**
* @brief 设置 IC4 捕获分频(每 N 个边沿捕获一次),降低高频信号的中断频率
* @param TIMx: 选择要配置的TIM外设
* @param TIM_ICPSC: 指定输入捕获4预分频器新值
* @retval 无
* @example
* TIM_SetIC4Prescaler(TIM3, TIM_ICPSC_DIV1);
*/
void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);功能说明:
- 含义同 TIM_SetIC1Prescaler,作用于通道 4
77. TIM_SetClockDivision
/**
* @brief 设置 DT 采样时钟分频(TIM_CKD),影响死区时间和输入滤波的时间基准
* @param TIMx: 选择要配置的TIM外设
* @param TIM_CKD: 指定时钟分割值
* @retval 无
* @example
* TIM_SetClockDivision(TIM2, TIM_CKD_DIV2);
*/
void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD);功能说明:
- DIV1/2/4:tDTS = tCK_INT × 分频系数
- 死区时间计算依赖 tDTS
- 运行时修改较少,多在 TimeBaseInit 中配置
78. TIM_GetCapture1
/**
* @brief 读取 CCR1 锁存的捕获值,用于计算脉宽、周期、频率(通常在捕获中断中读取)
* @param TIMx: 选择要读取的TIM外设
* @retval 捕获比较1寄存器值
* @example
* uint16_t capture1 = TIM_GetCapture1(TIM2);
*/
uint16_t TIM_GetCapture1(TIM_TypeDef* TIMx);功能说明:
- 返回最近一次捕获边沿时的 CNT 值
- 两次捕获差值即为脉宽或周期
- 过捕获时需检查 CC1OF 标志
79. TIM_GetCapture2
/**
* @brief 读取 CCR2 锁存的捕获值,用于计算脉宽、周期、频率
* @param TIMx: 选择要读取的TIM外设
* @retval 捕获比较2寄存器值
* @example
* uint16_t capture2 = TIM_GetCapture2(TIM2);
*/
uint16_t TIM_GetCapture2(TIM_TypeDef* TIMx);功能说明:
- 含义同 TIM_GetCapture1,作用于通道 2
80. TIM_GetCapture3
/**
* @brief 读取 CCR3 锁存的捕获值,用于计算脉宽、周期、频率
* @param TIMx: 选择要读取的TIM外设
* @retval 捕获比较3寄存器值
* @example
* uint16_t capture3 = TIM_GetCapture3(TIM3);
*/
uint16_t TIM_GetCapture3(TIM_TypeDef* TIMx);功能说明:
- 含义同 TIM_GetCapture1,作用于通道 3
81. TIM_GetCapture4
/**
* @brief 读取 CCR4 锁存的捕获值,用于计算脉宽、周期、频率
* @param TIMx: 选择要读取的TIM外设
* @retval 捕获比较4寄存器值
* @example
* uint16_t capture4 = TIM_GetCapture4(TIM3);
*/
uint16_t TIM_GetCapture4(TIM_TypeDef* TIMx);功能说明:
- 含义同 TIM_GetCapture1,作用于通道 4
82. TIM_GetCounter
/**
* @brief 读取 CNT 当前值,用于读剩余时间、编码器位置或调试
* @param TIMx: 选择要读取的TIM外设
* @retval 计数器寄存器值
* @example
* uint16_t counterValue = TIM_GetCounter(TIM2);
*/
uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);功能说明:
- 编码器模式下 CNT 即累计位置
- 可计算定时器已运行时间
- 16 位 TIM 范围 0~65535
83. TIM_GetPrescaler
/**
* @brief 读取当前生效的 PSC 值,用于动态频率计算或状态诊断
* @param TIMx: 选择要读取的TIM外设
* @retval 预分频器寄存器值
* @example
* uint16_t prescaler = TIM_GetPrescaler(TIM2);
*/
uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx);功能说明:
- 返回实际参与分频的预分频器值
- 动态改频后可用于验证配置是否生效
84. TIM_GetFlagStatus
/**
* @brief 查询硬件标志位(更新、捕获、刹车等),可用于轮询方式检测事件
* @param TIMx: 选择要检查的TIM外设
* @param TIM_FLAG: 指定要检查的标志
* @retval 标志的新状态(SET或RESET)
* @example
* if(TIM_GetFlagStatus(TIM2, TIM_FLAG_Update) == SET)
* {
* // 更新标志被设置
* }
*/
FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);功能说明:
- 返回 SET 或 RESET
- 不自动清除标志,需 TIM_ClearFlag
- 无中断时使用;有中断时更常用 GetITStatus
85. TIM_ClearFlag
/**
* @brief 清除硬件标志位,轮询模式下检测到事件后必须清除以免重复处理
* @param TIMx: 选择要清除标志的TIM外设
* @param TIM_FLAG: 指定要清除的标志
* @retval 无
* @example
* TIM_ClearFlag(TIM2, TIM_FLAG_Update);
*/
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);功能说明:
- 写 0 清除对应 SR 标志位
- 可同时清除多个标志(按位或)
- 中断模式下通常用 ClearITPendingBit
86. TIM_GetITStatus
/**
* @brief 查询中断挂起位,中断服务函数中判断具体中断源
* @param TIMx: 选择要检查的TIM外设
* @param TIM_IT: 指定要检查的TIM中断源
* @retval 中断状态(SET或RESET)
* @example
* if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
* {
* // 更新中断发生
* }
*/
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);功能说明:
- 检查中断是否发生且已使能
- ISR 开头用于区分 Update/CC/Break 等中断
- 返回 SET 表示该中断源触发了
87. TIM_ClearITPendingBit
/**
* @brief 清除中断挂起位,ISR 末尾必须调用,否则会重复进入中断
* @param TIMx: 选择要清除中断的TIM外设
* @param TIM_IT: 指定要清除的TIM中断
* @retval 无
* @example
* TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
*/
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);功能说明:
- 清除 SR 中对应标志
- 必须在 ISR 中调用,否则中断持续挂起
- 处理完业务逻辑后立即清除
使用示例
基本定时器配置示例
void TIM_BasicConfig(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// 使能TIM2时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
// 配置时基单元 - 1秒定时
TIM_TimeBaseStructure.TIM_Period = 9999; // 自动重装载值
TIM_TimeBaseStructure.TIM_Prescaler = 7199; // 预分频器
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
// 使能更新中断
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
// 启动定时器
TIM_Cmd(TIM2, ENABLE);
}PWM输出配置示例
void TIM_PWMConfig(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
// 使能TIM3时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
// 时基单元配置 - PWM频率1kHz
TIM_TimeBaseStructure.TIM_Period = 999; // ARR = 999
TIM_TimeBaseStructure.TIM_Prescaler = 71; // PSC = 71
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
// PWM模式配置
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 500; // 占空比50%
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3, ENABLE);
TIM_Cmd(TIM3, ENABLE);
}输入捕获配置示例
void TIM_InputCaptureConfig(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM_ICInitStructure;
// 使能TIM4时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
// 时基单元配置
TIM_TimeBaseStructure.TIM_Period = 0xFFFF; // 最大计数值
TIM_TimeBaseStructure.TIM_Prescaler = 71; // 1MHz计数频率
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
// 输入捕获配置
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 0x0;
TIM_ICInit(TIM4, &TIM_ICInitStructure);
// 使能捕获中断
TIM_ITConfig(TIM4, TIM_IT_CC1, ENABLE);
TIM_Cmd(TIM4, ENABLE);
}编码器接口配置示例
void TIM_EncoderConfig(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// 使能TIM2时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
// 时基单元配置
TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
// 编码器接口配置
TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12,
TIM_ICPolarity_Rising,
TIM_ICPolarity_Rising);
TIM_Cmd(TIM2, ENABLE);
}中断服务程序示例
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
{
// 清除中断标志
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
// 用户代码
// 1秒定时到达
}
}
void TIM4_IRQHandler(void)
{
if(TIM_GetITStatus(TIM4, TIM_IT_CC1) == SET)
{
// 清除中断标志
TIM_ClearITPendingBit(TIM4, TIM_IT_CC1);
// 获取捕获值
uint16_t captureValue = TIM_GetCapture1(TIM4);
// 处理捕获数据
}
}注意事项
-
时钟配置:使用TIM前需要使能相应的APB时钟(TIM2-7、TIM12-14使用APB1,TIM1、TIM8-11、TIM15-17使用APB2)
-
GPIO配置:使用PWM输出或输入捕获时,需要将对应的GPIO引脚配置为复用功能
-
频率计算:
- 定时器频率 = APB时钟频率 / (预分频器 + 1) / (自动重装载值 + 1)
- PWM频率 = 定时器频率 / (ARR + 1)
-
高级定时器特殊功能:TIM1和TIM8支持互补输出、死区控制、刹车功能等高级特性
-
中断优先级:在使用中断时,需要在NVIC中配置中断优先级
-
DMA配置:使用DMA传输时,需要配置相应的DMA通道
-
寄存器访问顺序:某些操作需要按特定顺序访问寄存器,特别是清除中断标志时
总结
STM32F10x TIM标准库提供了全面的定时器配置和控制功能。通过合理使用这些API函数,可以实现精确的时基产生、PWM输出、输入捕获、编码器接口等功能。掌握TIM库的使用对于开发高性能的嵌入式应用具有重要意义。定时器作为STM32最重要的外设之一,在电机控制、信号测量、通信协议等领域都有广泛应用。