STM32--TIM--函数

发布于:2025-05-11 ⋅ 阅读:(24) ⋅ 点赞:(0)

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:定时器外设指针(如 TIM2TIM3 等)。

  • 返回值:无。

功能作用

  • 将指定定时器的所有寄存器重置为上电默认值

  • 关闭定时器的所有功能(计数器、中断、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* 定时器外设指针(如 TIM1TIM2 等)
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);