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

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 等)的精确控制。

http://www.xdnf.cn/news/8486.html

相关文章:

  • 生成模型——PixelRNN与PixelCNN
  • 生成模型——扩散模型(Diffusion Model)
  • 阿里云服务器 篇十五:自动签到服务(基于Cookie,脚本和数据分离)
  • 论文学习记录之《DiffusionVel》
  • 文档结构化专家:数字化转型的核心力量
  • Java[IDEA]里的debug
  • 对称加密中GCM和CBC俩种加密模式的区别
  • 八股碎碎念02——Synchronized
  • 氢气传感器维护常见问题及解决方法
  • RK常见系统属性设置/获取命令使用
  • 文章记单词 | 第102篇(六级)
  • STM32 SPI通信(软件)
  • K3S集群使用自签署证书拉取私有仓库镜像
  • 图片转excel表格 非常好用
  • 第三十四天打卡
  • MySQL慢日志——动态开启
  • MySQL 8.0 OCP 1Z0-908 题目解析(11)
  • 天津市工程技术系列职称评价标准
  • Fastjson利用链JdbcRowSetImpl分析
  • 线程的一些基本知识
  • 记共享元素动画导致的内存泄露
  • ABAP,谨慎使用UPDATE更新底表
  • WCS-PZ100V4B15闭环霍尔电流传感器
  • 动态库和静态库详解
  • 推进可解释人工智能迈向类人智能讨论总结分享
  • 【数组的定义数组与内存的关系】
  • 【信息系统项目管理师】第18章:项目绩效域 - 45个经典题目及详解
  • antv/g6 图谱封装配置(二)
  • 七、OpenGL 2.0 可编程着色器实现渲染控制权转移的四大核心机制
  • 使用js 写一个函数 将base64 转换成file