登录/注册

stm32输出两路pwm波形

stm32输出两路pwm波形

更多

在 STM32 上输出两路 PWM 波形的步骤如下(以 HAL 库为例):

1. 硬件配置

2. 使用 STM32CubeMX 配置(推荐)

  1. 启用定时器(如 TIM1)
  2. 配置时钟源和分频系数
  3. 设置 PWM 模式:
    • Channel 1 → PWM Generation CH1
    • Channel 2 → PWM Generation CH2
  4. 参数设置:
    • Prescaler(预分频):决定时钟频率
    • Counter Period(自动重装载值 ARR):决定 PWM 周期
    • Pulse(初始占空比)

3. 手动编码示例(HAL 库)

// 1. 定时器初始化
TIM_HandleTypeDef htim1;

void PWM_Init(void)
{
    TIM_OC_InitTypeDef sConfigOC = {0};

    htim1.Instance = TIM1;
    htim1.Init.Prescaler = 84-1;        // 假设系统时钟84MHz,分频后1MHz
    htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim1.Init.Period = 1000-1;         // PWM周期 = (1MHz/1000) = 1KHz
    htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_PWM_Init(&htim1);

    // 通道1配置
    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 500;             // 初始占空比50%(500/1000)
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);

    // 通道2配置
    sConfigOC.Pulse = 300;             // 初始占空比30%
    HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2);

    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
}

// 2. GPIO初始化
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* tim_pwmHandle)
{
    if(tim_pwmHandle->Instance == TIM1)
    {
        __HAL_RCC_TIM1_CLK_ENABLE();
        __HAL_RCC_GPIOA_CLK_ENABLE();

        GPIO_InitTypeDef GPIO_InitStruct = {0};
        GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
        GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    }
}

// 3. 运行时修改占空比
void Set_PWM_Duty(uint32_t channel, uint16_t duty)
{
    __HAL_TIM_SET_COMPARE(&htim1, channel, duty);
}

4. 关键参数说明

5. 注意事项

  1. 确保开启了对应的定时器时钟和GPIO时钟
  2. 检查GPIO复用功能是否正确映射到定时器通道
  3. 高级定时器(如TIM1)需要额外使能主输出:__HAL_TIM_MOE_ENABLE(&htim1);
  4. 不同定时器通道可输出独立占空比,但共享相同的频率(由ARR和Prescaler决定)

建议使用 STM32CubeMX 生成初始化代码,再通过 __HAL_TIM_SET_COMPARE() 函数动态调整占空比。

LPC2294能否输出两路不同频率的PWM

最近调试LPC2294,需要输出两路不同频率的PWM,翻阅手册发现只有PWMMR0可以控制频率,这样怎么实现

2025-03-31 07:24:12

STM32PWM波形输出配置的大神总结

STM32的PWM波形输出配置的大神总结

2023-10-24 16:00:31

求解一个stm32PWM驱动两路IR2110,控制H桥的知识

占空比留出死区时间,图2是STM32 两路pwm用逻辑分析仪输出的

2023-06-20 10:48:26

STC12C5A60S2两路PWM调制输出源代码

STC12C5A60S2-两路PWM调制输出源代码

资料下载 木头1233 2023-05-17 15:14:11

STM32F103输出PWM波形,有完整源码。用示波器观察输出波形

用STM32F103输出一路PWM

资料下载 洪茗苞 2022-01-14 16:06:05

STM32F103输出PWM波形和DAC功能完成波形输出

这里写目录标题一、 PWM相关概念PWM控制的基本原理二、用STM32F103输出

资料下载 王娟 2021-12-22 19:42:49

STM32CUbeMX之两路互补pwm波 以及死区时间设置

STM32CUbeMX之两路互补pwm波 以及死区时间设置STM32CU

资料下载 张勇 2021-12-22 19:40:26

使用STM32输出PWM波形

本文目的是通过在STM32平台上采用定时器的方法输出PWM波形,进而熟悉

资料下载 张艳 2021-11-30 14:21:16

基于STM32CUBEMX的高级定时器输出两路PWM

STM32CUBEMX配置教程(五)高级定时器输出两路PWM波基于

2022-03-02 07:02:31

STM32CUbeMX的两路互补pwm波该怎样去设置呢

STM32CUbeMX的死区时间该怎样去设置呢?STM32CUbeMX的两路互补pwm

2022-02-17 06:56:51

STM32F103是怎样使用TIM4定时器输出两路PWM

STM32F103使用TIM4定时器输出两路PWM通过定时器4实现

2022-01-06 07:30:50

如何使用STM32输出PWM波形

如何使用STM32输出一路PWM

2021-11-19 07:27:02

STM32F103输出PWM波形

STM32的PWM和DAC练习STM32F103输出一

2021-08-17 09:01:27

请问定时器可以输出两路有移相效果的PWM波形吗?

如题,请问原子一个定时器可以输出两路有移相效果的PWM波形吗我试过用Ti

2020-04-29 21:33:02

STM32_ TIM输出PWM波形

STM32_TIM输出PWM波形

2020-04-08 11:09:32

7天热门专题 换一换
相关标签