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的值,从而改变占空比的,并不是直接改变占空比。
设置通道预装载功能
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 |
禁用 | 直接写入活动寄存器 | 立即生效 | 需要即时响应的控制 |