stm32g474 pwm
时间: 2025-06-04 13:45:55 浏览: 12
### STM32G474 PWM 配置教程
STM32G474 微控制器支持通过定时器模块生成脉宽调制 (PWM) 信号。以下是基于 HAL 库实现的 PWM 功能配置方法以及代码示例。
#### 定时器选择与初始化
STM32 的 TIMx 外设可以用来生成 PWM 波形。对于 STM32G474,可以选择通用定时器(TIM2-TIM5)或者高级控制定时器(TIM1 和 TIM8)。这里以 TIM2 为例说明如何配置 PWM 输出:
- **使能外设时钟**
使用 `__HAL_RCC_TIM2_CLK_ENABLE()` 函数启用 TIM2 的时钟。
- **配置模式**
设置计数器方向为向上计数,并设定自动重装载预分频寄存器值来决定频率[^1]。
```c
// 初始化结构体并填充默认参数
TIM_HandleTypeDef htim2;
htim2.Instance = TIM2;
// 基本定时器初始化
void MX_TIM2_Init(void)
{
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
htim2.Init.Prescaler = 83; // APB1 clock / Prescaler - Adjust as needed.
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 999; // Set period to generate desired frequency.
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
{
Error_Handler();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
{
Error_Handler();
}
}
```
#### PWM 输出通道配置
为了生成实际的 PWM 波形,还需要进一步配置输出比较单元及其对应的 GPIO 引脚。
- **设置占空比**
利用 `TIM_OCInitTypeDef` 结构体中的成员变量调整初始占空比百分比[^2]。
```c
static void TIM_PWM_Output_Init(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t DutyCyclePercent)
{
TIM_OC_InitTypeDef sConfigOC = {0};
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = (uint32_t)((DutyCyclePercent * htim->Init.Period) / 100); // 计算占空比
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if(HAL_TIM_PWM_ConfigChannel(htim, &sConfigOC, Channel) != HAL_OK){
Error_Handler();
}
}
// 调用该函数完成具体通道绑定
TIM_PWM_Output_Init(&htim2, TIM_CHANNEL_1, angle);
```
#### 启动 PWM 并更新占空比
最后一步就是启动定时器和相应的 PWM 输出,并提供一种机制动态改变角度从而影响最终波形形状。
```c
if (HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
angle += 1; // 或者其他逻辑修改 duty cycle percentage
if(angle >= 100){ angle = 0;}
TIM_SetCompare(&htim2, TIM_CHANNEL_1, ((uint32_t)(angle * htim2.Init.Period)/100));
```
以上展示了完整的从硬件资源分配到软件层面操作的过程,适用于大多数应用场景下的基础需求[^1][^2]。
阅读全文
相关推荐


















