hal库 stm32cubemx教程PWM
时间: 2025-05-01 22:42:26 浏览: 19
### 使用 HAL 库与 STM32CubeMX 配置 PWM 的教程
#### 1. 利用 STM32CubeMX 初始化项目
在 STM32CubeMX 中创建一个新的工程并选择目标 MCU 型号。配置时钟树以确保系统时钟满足需求[^1]。
#### 2. 定时器的选择与初始化
选择一个合适的定时器用于生成 PWM 波形。通常可以选择高级控制定时器 (TIM1, TIM8) 或通用定时器 (TIM2-TIM5)[^2]。
设置定时器的工作模式为 **PWM 输出模式**,并通过参数调整频率和占空比。例如:
- 设置自动重装载寄存器 (`ARR`) 来定义周期。
- 调整捕获比较寄存器 (`CCR`) 来改变占空比。
```c
// 配置定时器实例
__HAL_TIM_SET_AUTORELOAD(&htim2, ARR_VALUE); // 设置自动重载值
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, CCR_VALUE); // 设置比较值
```
#### 3. GPIO 引脚配置
将定时器通道对应的 GPIO 引脚配置为 **复用推挽输出** 模式,并关联到所选的定时器通道上。
例如,在 STM32CubeMX 中:
- 将 `PA0` 配置为 `TIM2_CH1`。
- 确保引脚模式为 Alternate Function Push-Pull。
#### 4. 编写代码实现 PWM 功能
利用 HAL 库函数启动定时器并生成 PWM 波形。以下是基本代码框架:
```c
#include "stm32f4xx_hal.h"
void MX_TIM2_Init(void);
void Start_PWM_Output(TIM_HandleTypeDef *htim);
int main(void)
{
HAL_Init();
MX_GPIO_Init(); // 初始化 GPIO
MX_TIM2_Init(); // 初始化 TIM2
Start_PWM_Output(&htim2); // 启动 PWM 输出
while (1)
{
// 主循环逻辑
}
}
void MX_TIM2_Init(void)
{
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
htim2.Instance = TIM2;
htim2.Init.Prescaler = 83; // 设定预分频器
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 999; // 自动重载值
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();
}
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
}
void Start_PWM_Output(TIM_HandleTypeDef *htim)
{
uint32_t duty_cycle = 500; // 占空比对应值
__HAL_TIM_SET_COMPARE(htim, TIM_CHANNEL_1, duty_cycle); // 设置初始占空比
HAL_TIM_PWM_Start(htim, TIM_CHANNEL_1); // 开始 PWM 输出
}
```
上述代码中,`Prescaler` 和 `Period` 参数决定了 PWM 的频率,而 `duty_cycle` 控制了占空比。
#### 5. 实际应用案例 —— 驱动舵机
如果需要使用 PWM 波来驱动舵机,则可以根据具体的占空比调节舵机的角度。例如,当占空比分别为 5%、7.5% 和 10% 时,分别对应舵机旋转至 0°、90° 和 180°[^3]。
---
阅读全文
相关推荐


















