STM32--PWM--函数

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
禁用 直接写入活动寄存器 立即生效 需要即时响应的控制
相关推荐
思考的味道3 小时前
系统的从零开始学习电子的相关知识,该如何规划?
嵌入式硬件
学习噢学个屁5 小时前
基于51单片机步进电机控制—9个等级
c语言·单片机·嵌入式硬件·51单片机
GXSC7 小时前
国芯思辰| 医疗AED可使用2通道24位模拟前端SC2946(ADS1292)
嵌入式硬件
LaoZhangGong1237 小时前
分析rand()和srand()函数的功能
c语言·经验分享·stm32·单片机
国科安芯7 小时前
自研MCU芯片闪存驱动的实现:OpenOCD详细过程记录与操作指南
单片机·嵌入式硬件·架构
qq_401700417 小时前
通用外设驱动模型(四步法)
stm32
Sandman6z10 小时前
STM32CubeMX安装及使用分享
stm32·嵌入式硬件
Nice__J10 小时前
智芯Z20K144x MCU开发之时钟架构
单片机·嵌入式硬件·架构
DIY机器人工房12 小时前
[6-1] TIM定时中断 江协科技学习笔记(45个知识点)
笔记·科技·stm32·单片机·学习