定时器复习入口:
目录
[1. 使能APB1总线定时器时钟(通用/基本定时器)](#1. 使能APB1总线定时器时钟(通用/基本定时器))
[2. 使能APB2总线定时器时钟(高级定时器)](#2. 使能APB2总线定时器时钟(高级定时器))
[1. 时基结构体初始化](#1. 时基结构体初始化)
[1. PWM模式初始化](#1. PWM模式初始化)
[2. 预装载寄存器控制](#2. 预装载寄存器控制)
[3. 自动重载寄存器预装载控制](#3. 自动重载寄存器预装载控制)
[4. 动态修改PWM占空比](#4. 动态修改PWM占空比)
[1. 输入捕获初始化](#1. 输入捕获初始化)
[2. 读取捕获值](#2. 读取捕获值)
[1. 中断使能/禁用](#1. 中断使能/禁用)
[2. 中断标志位检查](#2. 中断标志位检查)
[3. 清除中断标志位](#3. 清除中断标志位)
[1. 定时器使能/禁用](#1. 定时器使能/禁用)
[2. 计数器值设置](#2. 计数器值设置)
[3. 计数器值读取](#3. 计数器值读取)
[4. 自动重载值设置](#4. 自动重载值设置)
[1. 互补输出死区配置](#1. 互补输出死区配置)
[2. 主从模式配置](#2. 主从模式配置)
STM32标准库(StdPeriph)为定时器操作提供了丰富的函数接口,涵盖时钟使能、初始化、配置、控制等各个环节。以下按功能分类介绍核心函数及其使用方法。
一、时钟使能函数
定时器的时钟由APB总线提供,使用前需先使能对应总线时钟。
1. 使能APB1总线定时器时钟(通用/基本定时器)
cpp
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
参数 :
RCC_APB1Periph :指定要使能的APB1外设,RCC_APB1Periph_TIM2,RCC_APB1Periph_TIM6 等。
NewState :使能状态, ENABLE 或 DISABLE 。
使用场景 :用于TIM2-TIM7等挂载在APB1总线上的定时器。
2. 使能APB2总线定时器时钟(高级定时器)
cpp
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
参数 :
RCC_APB2Periph :指定要使能的APB2外设,如 RCC_APB2Periph_TIM1, RCC_APB2Periph_TIM8 等。
NewState :使能状态, ENABLE 或 DISABLE 。
使用场景 :用于TIM1、TIM8等挂载在APB2总线上的高级定时器。
二、时基初始化函数
用于配置定时器的核心参数,如预分频器、自动重载值、计数模式等。
1. 时基结构体初始化
cpp
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
参数 :
TIMx :定时器实例,如 TIM2 、 TIM6 等。
TIM_TimeBaseInitStruct :时基配置结构体,包含以下成员:
TIM_Prescaler :预分频器值(0-65535),实际分频系数为 TIM_Prescaler + 1 。
TIM_CounterMode :计数模式( TIM_CounterMode_Up / Down / CenterAligned1/2/3 )。
TIM_Period :自动重载值(0-65535),决定计数周期。
TIM_ClockDivision :时钟分割(通常设为0)。
TIM_RepetitionCounter :重复计数器(仅高级定时器使用)。
使用场景 :所有定时器使用前必须调用,配置核心计时参数。
三、PWM输出相关函数
用于配置和控制PWM输出功能。
1. PWM模式初始化
cpp
void TIM_OCxInit(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
参数 :
TIMx :定时器实例。
TIM_OCInitStruct :PWM配置结构体,包含以下成员:
TIM_OCMode :PWM模式( TIM_OCMode_PWM1 / PWM2 )。
TIM_OutputState :输出使能( TIM_OutputState_Enable / Disable )。
TIM_OutputNState :互补输出使能(仅高级定时器)。
TIM_Pulse :比较值(决定占空比)。
TIM_OCPolarity :输出极性( TIM_OCPolarity_High / Low )。
TIM_OCNPolarity :互补输出极性(仅高级定时器)。
TIM_OCIdleState :空闲状态输出(仅高级定时器)。
TIM_OCNIdleState :互补输出空闲状态(仅高级定时器)。
使用场景 :配置定时器的PWM输出通道(如 TIM_OC1Init 对应通道1)。
2. 预装载寄存器控制
cpp
void TIM_OCxPreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
参数 :
TIMx :定时器实例。
TIM_OCPreload :预装载使能( TIM_OCPreload_Enable / Disable )。
作用 :使能PWM通道的预装载寄存器,确保占空比修改在更新事件时生效。
使用场景 :PWM配置中,通常与 TIM_ARRPreloadConfig 配合使用。
3. 自动重载寄存器预装载控制
cpp
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
参数 :
TIMx :定时器实例。
NewState :使能状态( ENABLE / DISABLE )。
作用 :使能自动重载寄存器的预装载,确保ARR修改在更新事件时生效。
使用场景 :PWM或定时任务中,需要平滑更新周期时使用。
4. 动态修改PWM占空比
cpp
void TIM_SetComparex(TIM_TypeDef* TIMx, uint16_t Compare);
参数 :
TIMx :定时器实例。
Compare :新的比较值(0到ARR之间)。
作用 :实时修改PWM通道的占空比(如 TIM_SetCompare1 对应通道1)。
使用场景 :需要动态调整PWM占空比的场景(如电机调速、亮度调节)。
四、输入捕获相关函数
用于配置和读取输入捕获功能,测量外部信号的频率或脉宽。
1. 输入捕获初始化
cpp
void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);
参数 :
TIMx :定时器实例。
TIM_ICInitStruct :输入捕获配置结构体,包含以下成员:
TIM_Channel :捕获通道( TIM_Channel_1 - 4 )。
TIM_ICPolarity :捕获触发极性( TIM_ICPolarity_Rising / Falling / BothEdge )。
TIM_ICSelection :输入选择( TIM_ICSelection_DirectTI / IndirectTI / TRC )。
TIM_ICPrescaler :捕获预分频( TIM_ICPSC_DIV1 / 2 / 4 / 8 )。
TIM_ICFilter :输入滤波器(0-15,值越大滤波效果越强)。
使用场景 :配置定时器为输入捕获模式,用于信号测量。
2. 读取捕获值
cpp
uint16_t TIM_GetCapturex(TIM_TypeDef* TIMx);
参数 : TIMx :定时器实例。
返回值 :捕获寄存器的值(16位)。
作用 :读取指定通道的捕获值(如 TIM_GetCapture1 对应通道1)。
使用场景 :输入捕获中断中读取捕获值,计算频率或脉宽。
五、中断控制函数
用于配置和管理定时器中断。
1. 中断使能/禁用
cpp
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);
参数 :
TIMx :定时器实例。
TIM_IT :中断类型(如 TIM_IT_Update / CC1 / Trigger 等)。
NewState :使能状态( ENABLE / DISABLE )。
作用 :使能或禁用指定的定时器中断。
使用场景 :需要定时器中断时调用(如定时任务、输入捕获触发)。
2. 中断标志位检查
cpp
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
参数 :
TIMx :定时器实例。
TIM_IT :中断类型。
返回值 :中断标志位状态( SET / RESET )。
作用 :检查指定中断是否触发。
使用场景 :中断服务函数中判断中断来源。
3. 清除中断标志位
cpp
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);
参数 :
TIMx :定时器实例。
TIM_IT :中断类型。
作用 :清除指定的中断标志位。
使用场景 :中断服务函数末尾调用,避免重复触发中断。
六、计数器控制函数
用于直接操作定时器计数器。
1. 定时器使能/禁用
cpp
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);
参数 :
TIMx :定时器实例。
NewState :使能状态( ENABLE / DISABLE )。
作用 :启动或停止定时器计数。
使用场景 :所有定时器配置完成后调用,启动计数。
2. 计数器值设置
cpp
void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter);
参数 :
TIMx :定时器实例。
Counter :要设置的计数器值。
作用 :手动设置计数器的当前值。
使用场景 :需要从特定值开始计数时使用。
3. 计数器值读取
cpp
uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);
参数 : TIMx :定时器实例。
返回值 :当前计数器值(16位)。
作用 :读取计数器的实时值。
使用场景 :需要获取当前计数值时使用(如计算时间差)。
4. 自动重载值设置
cpp
void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload);
参数 :
TIMx :定时器实例。
Autoreload :新的自动重载值。
作用 :动态修改自动重载值(需配合预装载使能)。
使用场景 :需要动态调整定时周期时使用。
七、高级定时器特殊函数
高级定时器(TIM1/TIM8)特有的功能函数。
1. 互补输出死区配置
cpp
void TIM_BDTRConfig(TIM_TypeDef* TIMx, uint16_t TIM_OSSRState, uint16_t TIM_OSSIState,
uint16_t TIM_LOCKLevel, uint16_t TIM_DeadTime,
uint16_t TIM_Break, uint16_t TIM_BreakPolarity,
uint16_t TIM_AutomaticOutput);
参数 :
TIMx :高级定时器实例( TIM1 / TIM8 )。
TIM_DeadTime :死区时间(0-255),单位与定时器时钟有关。
其他参数:刹车、锁定级别等配置。
作用 :配置高级定时器的死区时间和刹车功能,用于电机控制等场景。
使用场景 :需要互补PWM输出时调用(如三相电机驱动)。
2. 主从模式配置
cpp
void TIM_MasterConfigSynchronization(TIM_TypeDef* TIMx, TIM_MasterInitTypeDef* TIM_MasterInitStruct);
参数 :
TIMx :定时器实例。
TIM_MasterInitStruct :主从模式配置结构体。
作用 :配置定时器为主模式,向其他定时器输出触发信号。
使用场景 :多定时器同步或级联时使用。
八、函数使用流程示例
以通用定时器PWM输出为例,完整流程如下:
cpp
1.使能时钟 :
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // 使能TIM3时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIOA时钟
2.配置GPIO :
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6; // TIM3_CH1
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
3.初始化时基 :
TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
TIM_TimeBaseStructInit(&TIM_TimeBaseStruct); // 复位结构体
TIM_TimeBaseStruct.TIM_Prescaler = 71; // 72MHz / 72 = 1MHz
TIM_TimeBaseStruct.TIM_Period = 999; // 1MHz / 1000 = 1kHz PWM
TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStruct);
4.配置PWM模式 :
TIM_OCInitTypeDef TIM_OCStruct;
TIM_OCStruct.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCStruct.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCStruct.TIM_Pulse = 500; // 50%占空比
TIM_OCStruct.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM3, &TIM_OCStruct); // 配置通道1
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); // 使能预装载
TIM_ARRPreloadConfig(TIM3, ENABLE); // 使能自动重载预装载
5.启动定时器 :
TIM_Cmd(TIM3, ENABLE); // 启动TIM3
6.动态调整占空比 :
TIM_SetCompare1(TIM3, 750); // 修改为75%占空比
九、总结summarize
STM32标准库定时器函数按功能分类清晰,使用时需遵循以下步骤:
使能对应总线时钟。
配置GPIO(如需输出/输入)。
初始化定时器时基参数。
配置具体功能(PWM/输入捕获等)。
使能中断(如需)。
启动定时器。
按需动态调整参数(如占空比、周期)。