STM32 CubeMX时钟配置PWM信号输出
PWM 基本原理
PWM 是一种通过调节方波信号的占空比(高电平时间与周期的比例)来控制输出功率的技术。在 STM32 中,PWM 主要由定时器和 CCR 寄存器协同实现。
CCR 寄存器的作用
CCR 寄存器存储用于与定时器计数器值进行比较的数值。以定时器 TIMx 为例,其包含多个 CCR 寄存器(CCR1、CCR2 等),分别对应不同的 PWM 输出通道。
PWM 生成过程
- 定时器计数:定时器从 0 开始递增计数,直到达到自动重载寄存器(ARR)的值,然后重新从 0 开始。
- 比较过程:在每个计数周期内,定时器会将当前计数值与 CCR 寄存器的值进行比较。
- 输出控制:根据比较结果,输出引脚的电平会发生相应变化,从而生成 PWM 波形。
PWM 模式
STM32 支持两种 PWM 模式:
- PWM 模式 1:当计数器值小于 CCR 值时,输出高电平;否则输出低电平。
- PWM 模式 2:当计数器值小于 CCR 值时,输出低电平;否则输出高电平。
示例代码
以下是一个配置 TIM3 通道 1 生成 PWM 的示例:
#include "stm32f10x.h"void TIM3_PWM_Init(u16 arr, u16 psc)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;// 使能TIM3和GPIOA时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// 配置PA6为复用推挽输出(TIM3 CH1)GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);// 配置TIM3时基TIM_TimeBaseStructure.TIM_Period = arr; // 自动重载值TIM_TimeBaseStructure.TIM_Prescaler = psc; // 预分频值TIM_TimeBaseStructure.TIM_ClockDivision = 0; // 时钟分割TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);// 配置TIM3通道1为PWM模式1TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // PWM模式1TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 使能输出TIM_OCInitStructure.TIM_Pulse = 0; // 初始占空比为0TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 输出极性高TIM_OC1Init(TIM3, &TIM_OCInitStructure);// 使能TIM3TIM_Cmd(TIM3, ENABLE);
}int main(void)
{// 初始化TIM3,设置PWM频率为50Hz(系统时钟72MHz)TIM3_PWM_Init(19999, 719); // ARR=19999,PSC=719,频率=72MHz/(720*20000)=50Hz// 设置占空比为50%(CCR值为ARR的一半)TIM_SetCompare1(TIM3, 10000); // 占空比=10000/20000=50%while(1){// 主循环可以执行其他任务}
}
工作过程解析
- 频率控制:PWM 频率由 ARR 和 PSC 共同决定,公式为:
频率 = 定时器时钟 / ((PSC+1)×(ARR+1))
。 - 占空比控制:占空比由 CCR 值与 ARR 值的比例决定,公式为:
占空比 = CCR / ARR × 100%
。 - 波形生成:当计数器值小于 CCR 值时,输出高电平;大于等于 CCR 值时,输出低电平,形成 PWM 波形。
通过修改 CCR 寄存器的值,可以动态调整 PWM 的占空比,从而实现对外部设备(如电机、LED 等)的精确控制。