当前位置: 首页 > news >正文

STM32 CubeMX时钟配置PWM信号输出

PWM 基本原理

PWM 是一种通过调节方波信号的占空比(高电平时间与周期的比例)来控制输出功率的技术。在 STM32 中,PWM 主要由定时器和 CCR 寄存器协同实现。

CCR 寄存器的作用

CCR 寄存器存储用于与定时器计数器值进行比较的数值。以定时器 TIMx 为例,其包含多个 CCR 寄存器(CCR1、CCR2 等),分别对应不同的 PWM 输出通道。

PWM 生成过程

  1. 定时器计数:定时器从 0 开始递增计数,直到达到自动重载寄存器(ARR)的值,然后重新从 0 开始。
  2. 比较过程:在每个计数周期内,定时器会将当前计数值与 CCR 寄存器的值进行比较。
  3. 输出控制:根据比较结果,输出引脚的电平会发生相应变化,从而生成 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 等)的精确控制。

相关文章:

  • SOC-ESP32S3部分:8-GPIO输出LED控制
  • 辐射发射RE测试
  • 生成模型——扩散模型(Diffusion Model)
  • LoRA(Low-Rank Adaptation)
  • 从JDK 8到JDK 17的主要变化
  • 生成模型——Pix2Pix
  • 软件工程(八):UML类图的几种关系
  • 光流法(Optical Flow)
  • Python打卡训练营day30-库的导入
  • I.MX6ULL_Linux_系统篇(26) buildroot分析
  • 南京邮电大学《智能控制技术》期末抢救(上)
  • 高可用集群keepalived
  • 01_07小结
  • queue和priority_queue及其函数
  • 【438. 找到字符串中所有字母异位词】
  • Python训练营---Day34
  • 【昇腾开发者训练营:Dify大模型部署实战】MindIE + Dify + DeepSeek + Embedding模型 + Rerank模型
  • springboot集成日志配置文件
  • 信息学奥赛及各种程序设计竞赛中常见的名词解释
  • 通过contenteditable实现仿豆包智能输入框
  • 礼服外贸网站/网文推广怎么做
  • ubuntu wordpress教程/海南seo
  • 商丘网站优化/快速提升网站排名
  • 学习做网站建设的学校/软文营销常用的方式是什么
  • 网站加入悬浮客服/seo优化有哪些
  • 建设外包网站/注册google账号