生成工程
我们选择定时器来进行配置PWM
我们选择内部定时器触发,然后选择CH1引脚触发

然后进行PWM的配置

前面有关定时器都有提到的
基本的配置
| 配置项 | 中文说明 | 可选值 / 含义 |
|---|---|---|
| Prescaler (PSC) | 预分频器 | 0~65535,定时器时钟分频系数 |
| Counter Mode | 计数模式 | Up:向上计数 Down:向下计数 Center-aligned mode1— mode3:中心对齐计数 模式1到3 |
| Counter Period (ARR) | 自动重装载值/计数周期 | 0~65535,计数器溢出上限值 |
| Internal Clock Division (CKD) | 内部时钟分频 | No Division:不分频 Divided by 2:2分频 Divided by 4:4分频 |
| Auto-reload preload | 自动重装载预装载 | Enable:使能(缓冲生效) Disable:禁止(立即生效) |
从模式配置
| 配置项 | 中文说明 | 可选值 / 含义 |
|---|---|---|
| Master/Slave Mode (MSM bit) | 主从模式同步 | Enable:使能同步 Disable:禁止同步 |
| Trigger Event Selection | 触发事件选择(TRGO) | Reset:复位事件 Enable:使能事件 Update:更新事件 Compare Pulse - OCx:通道比较脉冲 |
PWM配置
| 配置项 | 中文说明 | 可选值 / 含义 |
|---|---|---|
| Mode | PWM生成工作模式 | PWM mode 1:向上计数时,计数器值 < 比较值输出有效电平 PWM mode 2:向上计数时,计数器值 < 比较值输出无效电平 |
| Pulse (16 bits value) | PWM脉冲宽度比较值 | 0~65535,16位无符号整数,直接决定PWM占空比 占空比计算公式:Pulse值/(自动重装载值+1)×100% |
| Output compare preload | 输出比较寄存器预装载 | Enable:使能,修改的比较值在下一次计数器溢出时生效,避免PWM波形出现毛刺 Disable:禁止,修改的比较值立即生效 |
| Fast Mode | PWM快速输出模式 | Enable:使能,比较匹配时可立即更新输出,仅特殊计数场景适用 Disable:禁止,仅计数器溢出时更新输出,PWM波形更稳定 |
| CH Polarity | 通道输出极性 | High:高电平为有效电平 Low:低电平为有效电平,需配合PWM模式使用 |
我们只需要根据下面这个表自己调整参数就可以

工程代码
生成的代码还是在定时器的初始化里面
在main.c里面的函数MX_TIM2_Init
1 | HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_IC_InitTypeDef *sConfig, uint32_t Channel) |
配置通道
| 参数 | 数据类型 | 作用 | 选项 |
|---|---|---|---|
| TIM_HandleTypeDef *htim | 结构体 | 选择的定时器 | —- |
| const TIM_IC_InitTypeDef *sConfig | 结构体 | 初始化TIX | — |
| uint32_t Channel | uint32_t | 配置的CH通道 | TIM_CHANNEL_1 TIM_CHANNEL_2 TIM_CHANNEL_3 TIM_CHANNEL_4 TIM_CHANNEL_ALL |
TIM_HandleTypeDef htim2; //*htim结构体
TIM_IC_InitTypeDef sConfigOC //*sConfig的结构体
| 名称 | 作用 | 参数 |
|---|---|---|
| sConfigOC.OCMode | 输出比较模式 | TIM_OCMODE_PWM1:PWM模式1TIM_OCMODE_PWM2:PWM模式2TIM_OCMODE_ACTIVE:匹配时输出有效电平TIM_OCMODE_INACTIVE:匹配时输出无效电平TIM_OCMODE_TOGGLE:匹配时电平翻转 |
| sConfigOC.Pulse | 比较值(CCR寄存器) | 0~65535,决定PWM占空比或匹配触发点 |
| sConfigOC.OCPolarity | 主输出通道极性 | TIM_OCPOLARITY_HIGH:高电平为有效电平TIM_OCPOLARITY_LOW:低电平为有效电平 |
| sConfigOC.OCNPolarity | 互补输出通道极性(高级定时器专用) | TIM_OCPOLARITY_HIGH:互补通道高电平为有效电平TIM_OCPOLARITY_LOW:互补通道低电平为有效电平 |
| sConfigOC.OCFastMode | PWM快速更新模式 | TIM_OCFAST_ENABLE:使能快速模式,比较匹配时立即更新输出TIM_OCFAST_DISABLE:关闭快速模式,仅计数器溢出时更新输出 |
| sConfigOC.OCIdleState | 空闲状态下主输出通道状态 | TIM_OCIDLESTATE_SET:空闲时输出高电平TIM_OCIDLESTATE_RESET:空闲时输出低电平 |
| sConfigOC.OCNIdleState | 空闲状态下互补输出通道状态(高级定时器专用) | TIM_OCIDLESTATE_SET:空闲时互补通道输出高电平TIM_OCIDLESTATE_RESET:空闲时互补通道输出低电平 |
更改占空比
// 设置 CCR 值(改占空比)
1 | __HAL_TIM_SET_COMPARE(&htim-x,uint32_t Channel, uint32_t compare); |
| 参数 | 数据类型 | 作用 | 选项 |
|---|---|---|---|
| &htim-x | 结构体 | 选择的定时器 | &htim-x (-x是你要选择的定时器) |
| uint32_t Channel | uint32_t | 配置的CH通道 | TIM_CHANNEL_1 TIM_CHANNEL_2 TIM_CHANNEL_3 TIM_CHANNEL_4 TIM_CHANNEL_ALL |
| uint32_t compare | uint32_t | 要设置的CCR | 0-65535 |