void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState)
用于使能或禁用指定的定时器中断。
TIM_DeInit()
TIM_DeInit()
是 STM32 标准外设库(Standard Peripheral Library)中的一个函数,用于将定时器(TIM)寄存器恢复为复位默认值,相当于软件复位定时器。
void TIM_DeInit(TIM_TypeDef* TIMx);
参数:
TIMx
:定时器外设指针(如TIM2
,TIM3
等)。返回值:无。
功能作用
将指定定时器的所有寄存器重置为上电默认值。
关闭定时器的所有功能(计数器、中断、DMA等)。
通常用于:
定时器重新配置前的清理
错误恢复
低功耗模式下关闭定时器
TIM_OCInitTypeDef
TIM_OCInitTypeDef
是 STM32 标准外设库中用于配置定时器输出比较(Output Compare, OC)功能的结构体,主要用于 PWM 生成、单脉冲输出等场景。
typedef struct {
uint16_t TIM_OCMode; // 输出比较模式
uint16_t TIM_OutputState; // 输出使能状态
uint16_t TIM_OutputNState; // 互补输出使能(高级定时器)
uint16_t TIM_Pulse; // 比较值(CCRx 寄存器值)
uint16_t TIM_OCPolarity; // 输出极性
uint16_t TIM_OCNPolarity; // 互补输出极性(高级定时器)
uint16_t TIM_OCIdleState; // 空闲状态(高级定时器)
uint16_t TIM_OCNIdleState; // 互补输出空闲状态(高级定时器)
} TIM_OCInitTypeDef;
TIM_OCPolarity--极性选择
#define TIM_OCPolarity_High ((uint16_t)0x0000)
#define TIM_OCPolarity_Low ((uint16_t)0x0002)
High:走0接口,输出的波形不反转;
Low:走1接口,波形取反,输出的波形反转;
通道初始化函数
void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
需要使用哪个通道就调用哪个接口。
运行过程中修改占空比
void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1);
void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);
void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3);
void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4);
注意,上面的函数本质上是设置CCR的值,从而改变占空比的,并不是直接改变占空比。
设置通道CCR预装载功能
void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
这些函数用于配置定时器输出比较通道的预装载功能,主要控制CCRx
寄存器(捕获/比较寄存器)的更新方式。
TIMx:定时器外设指针(如TIM1, TIM2等)
TIM_OCPreload:
TIM_OCPreload_Enable
:启用预装载,新设置的CCR值下一个事件触发生效。TIM_OCPreload_Disable
:禁用预装载,新设置的CCR值立刻生效。
预装载状态 | 寄存器访问 | 生效时机 | 适用场景 |
---|---|---|---|
启用 | 写入预装载寄存器 | 下一个更新事件(UEV) | 需要同步更新的PWM |
禁用 | 直接写入活动寄存器 | 立即生效 | 需要即时响应的控制 |
设置ARR预装载功能
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState)
参数 | 类型 | 描述 |
---|---|---|
TIMx | TIM_TypeDef* |
定时器外设指针(如 TIM1 , TIM2 等) |
NewState | FunctionalState |
预装载状态:ENABLE (启用)或 DISABLE (禁用) |
此函数用于 启用或禁用自动重装载寄存器(ARR)的预装载功能,通过控制 TIMx->CR1
寄存器的 ARPE
位实现。
预装载作用:确保对
TIMx->ARR
的修改在 更新事件(UEV) 后才生效,避免写入时干扰当前周期。
启用预装载(ENABLE
):
TIMx->CR1 |= TIM_CR1_ARPE; // 设置 CR1 的 ARPE 位
效果:写入 TIMx->ARR
的值会先存入 预装载寄存器,在下一个更新事件时才会加载到 影子寄存器(实际生效)。
适用场景:需同步修改多个寄存器(如 ARR 和 CCRx)或避免 PWM 周期抖动。
禁用预装载(DISABLE
):
TIMx->CR1 &= ~TIM_CR1_ARPE; // 清除 CR1 的 ARPE 位
效果:写入
TIMx->ARR
的值 立即生效(直接更新到影子寄存器)。适用场景:需要快速响应 ARR 变化的场合(如动态调整频率)。
预装载机制示意图
写入 ARR 寄存器
│
├─ ARPE=1 ──┐
│ ▼
│ 预装载寄存器 ──(UEV)─→ 影子寄存器(实际生效)
│
└─ ARPE=0 ────→ 影子寄存器(直接生效)
更新PSC寄存器的值
void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);
TIM_PSCReloadMode:
* @param TIM_PSCReloadMode: specifies the TIM Prescaler Reload mode
* This parameter can be one of the following values:
* @arg TIM_PSCReloadMode_Update: The Prescaler is loaded at the update event.
* @arg TIM_PSCReloadMode_Immediate: The Prescaler is loaded immediately.
其实就是设置PSC预装载功能,新设置的PSC的值是立即生效,还是事件发生,即产生上升沿或者下降沿时生效。其实这两个值影响不大,除非需要极致要求。
PWMI配置
void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);