STM32输出PWM时,PWM1和PWM2的区别

TIM-输出比较(PWM)——STM32 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形。每个高级定时器和通用定时器都拥有4个输出比较通道高级定时器的前3个通道额外拥有死区生成和互补输出的功能。第三步,配置输出比较单元,里面包括这个CCR的值、输出比较模式、极性选择、输出使能这些参数。第四步,配置GPIO,把PWM对应的GPIO口,初始化为复用推挽输出的配置。第一步,RCC开启时钟,把我们要用的TIM外设和GPIO外设的时钟打开。启动计数器,这样就能输出PWM了。 阅读详情

TIM_OCMode_PWM2;TIM_OCMode_PWM1

首先,本人虽然初学STM32但极力反对一种误人子弟的观点:“对于STM32这样级别的MCU,有库函数就不用去看寄存器怎么操作的了!”

好了,言归正传,最近总看到很多朋友对于PWM这个实验有很多的疑惑,看到原子也在极力的回复也挺累的(体谅一下幸苦的原子大神,(*^__^*) ),所以我打算写这么一篇文字来阐述一下我个人对STM32的PWM的理解。

首先来说,你要使用PWM模式你得先选择用那个定时器来输出PWM吧!除了TIM6、TIM7这两个普通的定时器无法输出PWM外,其余的定时器都可以输出PWM,每个通用定时器可以输出4路PWM,高级定时器TIM1、TIM8每个可输出7路PWM,这里为了方便起见,我们选择与实验相同的TIM3的通道2来说明。选好定时器及通道后,下一步就是要使能定时器的时钟,根据需要看看是否需要重映射IO,然后就是配置输出PWM的IO及定时器,到这里原子的视频及例程都有详细的介绍,这里只需要提一点有些网友疑惑的TIM_TimeBaseStructure.TIM_ClockDivision = 0;这句话是什么作用?其实仔细看过技术手册后发现这句话与PWM输出实验其实是没关系的,这句话是设置定时器时钟(CK_INT)频率与数字滤波器(ETR,TIx)使用的采样频率之间的分频比例的(与输入捕获相关),0表示滤波器的频率和定时器的频率是一样的。至于其余部分,我就不再赘述。做完这些准备工作后,我就针对大多数朋友疑惑的地方——PWM模式的初始化设置做一个详细的阐述:先贴代码

     1       TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
     2       TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
     3       TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
     4       TIM_OC2Init(TIM3, &TIM_OCInitStructure);   //根据T指定的参数初始化外设TIM3 OC2
     5       TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器,即TIM3_CCR2的预装载值在更新事件到来时才能被传送至当前寄存器中。
     6       TIM_Cmd(TIM3, ENABLE);  //使能TIM3
这6句话就把PWM的通道配置好了,一句句来解释:
这里原子选择的PWM2模式,为什么选择的是PWM2模式呢?为什么不选择PWM1模式呢?两者又有什么区别呢?下面我们就一探究竟,PWM1和PWM2模式是由CCMR1的OC1M和OC2M来决定的,因为我们选择的是是通道2,所以设置的是OC2M,再看相关介绍
OC1M[2:0]:输出比较1模式(Output compare 1 enable)

110:PWM模式1- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为
无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否
则为有效电平(OC1REF=1)。
111:PWM模式2- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为
有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电
平。

 看到红色的“有效电平”了吧,那么这又是谁定义的呢?别急,再看手册,可知它是由CCER这个寄存器的CCxP来决定的这里是通道2,所以是CC2P,继续看介绍

CC1P:输入/捕获1输出极性(Capture/Compare 1 output polarity)  位1 
CC1通道配置为输出:
0:OC1高电平有效
1:OC1低电平有效
现在很清楚了吧,又因为第3句,TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高,所以这里我们设置的CC2P是0,也就是默认的OC2高电平有效。这样第3句话也捎带着解释了,哈哈!由于我们的战舰板的LED是低电平亮,而刚开始的给CC2P用来设置占空比的led0pwmval为0它是小于等于TIM3_CNT的,也就符合TIMx_CNT>=TIMx_CCR1时通道2输出有效电平,也就是高电平,所以你把原子的例程原封不动的Down到板子里,会看到刚上电,LED灯是不亮的。现在这块明白了吧!若你觉得还是不爽,我就非得用PWM1模式,那也可以,就像有个网友说“我拿原子的PWM Code就改了一个PWM1模式,按原子讲的PWM1和PWM2的输出是相反的啊,可是我上电发现LED是常亮的啊?怎么回事啊,求解释啊。。。”我们来分析一下这位朋友的代码,他把PWM2改成了PWM1,别的什么都没动,那么现在符合“PWM模式1- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平”
,否则为无效电平。“结果必然是就是LED长亮喽,要想得到跟原代妈一样的效果,那就把CC2P设置成1,OC2低电平有效,这样就可以了,有兴趣的朋友可以动手试试!(实践出真知吗!)
好了,废了这么多话,也不早了 洗洗睡吧!希望这篇文字对PWM有疑惑的朋友有所帮助!希望大家共同进步!分享是一种快乐,欢迎批评指正!

 遗漏了一点,第5句还没解释呢,

5       TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器,即TIM3_CCR2的预装载值在更新事件到来时才能被传送至当前寄存器中。
这句话是说,CCR2中的预装载值何时被传送到当前的CNT寄存器中,这里我们选择的是当更新事件到来的时候才装载,追踪寄存器的设置可知,原来设置的是CCMR1的OC2PE,其实还有一种方式是立即装载看手册:
OC1PE:输出比较1预装载使能(Output compare 1 preload enable)  位3 
0:禁止TIMx_CCR1寄存器的预装载功能,可随时写入TIMx_CCR1寄存器,并且新写入的数
值立即起作用。
1:开启TIMx_CCR1寄存器的预装载功能,读写操作仅对预装载寄存器操作,TIMx_CCR1的
预装载值在更新事件到来时被传送至当前寄存器中。

定时器Tim输出比较(output compare) PSC(预分频器):719ARR(自动重装载值):99CCR(捕获/比较值):0到99(根据需要调节占空比)这样配置后,你将得到一个频率为1kHz,分辨率为0.01,占空比可调的PWM波形。确保在实际应用中,定时器的时钟源配置正确,以匹配CK_PSC的假设值。 阅读详情

相关推荐

一文搞懂STM32定时器翻转模式(产生多路频率、占空比的PWM)

(产生多路频率、占空比的PWM)

weixin_56688599的博客 7936

TIM_OCMode_PWM2;TIM_OCMode_PWM1

首先,本人虽然初学STM32但极力反对一种误人子弟的观点:“对于STM32这样级别的MCU,有库函数就不用去看寄存器怎么操作的了!” 好了,言归正传,最近总看到很多朋友对于PWM这个实验有很多的疑惑,看到原子也在极力的回复也挺累的(体谅一下幸苦的原子大神,(*^__^*) ),所以我打算写这么一篇文字来阐述一下我个人对STM32的PWM的理解。 首先来说,你要使用PWM模式你得

gtkknd的专栏 5万+

【WB32库开发】第11章 PWM互补输出——死区时间计算

本章内容意在简单的补充第十章PWM互补输出实验中的高级定时器死区时间设定部分。 11.1 死区发生器设置 配置PWM互补输出的死区时间,本质上就是在配置TIM1高级控制定时器的刹车和死区寄存器(TIMx_BDTR)中的DTG[7:0](死区发生器设置)部分。 在WB32参考手册中找到该部分: 看不懂的不必纠结,先介绍一下公式中的各个变量代表的含义: 1)DT:死区持续时间(DT=步长值×步长时间)。 2)T-DTS:系统时钟周期时长。 例:WB32F103CBT6的系统时钟频率为72M,则T-DTS =

北海村夫的博客 7531

TIM_OCMode_PWM1与TIM_OCMode_PWM2的区别

TIMx_CNT>TIMx_CCRn时,输出无效电平。可以是TIM_OCPolarity_High(高电平)或者TIM_OCPolarity_Low(低电平)TIMx_CNT>TIMx_CCRn时,输出有效电平。有效电平由TIM_OCInitStructure.TIM_OCPolarity决定。TIM_OCMode_PWM1 PWM模式1。TIMx_CNT

zyc18700766982的博客 9916

避坑指南:STM32 PWM模式1与模式2的区别及电机控制中的极性选择

本文深入解析STM32 PWM模式1与模式2在电机控制中的关键区别及极性选择策略。通过对比两种模式的底层机制、输出特性和应用场景,帮助开发者避免常见配置错误,优化电机控制性能。特别针对PWM极性设置与H桥驱动的配合提供了实用建议,包含代码示例和调试技巧。

weixin_33698823的博客 317

STM32定时器输出比较与PWM配置详解:从原理到实战

定时器是嵌入式系统的核心外设,通过计数器与比较器的协同工作,实现对时间的精准控制。其输出比较功能基于硬件实时比较计数器与预设值,触发特定引脚动作,是生成PWM信号、实现频率测量和波形合成的技术基础。在电机控制、LED调光等场景中,PWM通过调节脉冲宽度来精确控制功率输出,具有高效、灵活的特点。本文聚焦STM32的定时器输出比较模块,深入解析其硬件结构和工作模式,并通过库函数配置实例,详细演示如何生成稳定PWM波形,涵盖动态调节占空比、多通道同步等高级应用,帮助开发者快速掌握这一关键技术。

weixin_29194817的博客 256

STM32-PWM输出极性高低的区别以及TIM_OCMode_PWM1和TIM_OCMode_PWM2的区别

STM32-PWM输出极性高低的区别 今天在学习STM32PWM的时候,关于输出极性的高低有一些困惑,在网上看到开源电子网里面的一篇文章豁然开朗,所以转载了一下,为了学习使用。http://www.openedv.com/forum.php?mod=viewthread&tid=285008 定义:TIM_OCNPolarity_High为高极性 TIM_OCNPolarity_Low为低极性 分析图: 110:PWM模式1- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为

FILWY_M 2万+

stm32输出比较模式与PWM模式总结

文章目录前言一、输出比较模式和PWM模式二、PWM模式1.原理2.配置cubemx3.代码及验证三、输出比较模式1.原理2.配置cubemx2.代码及验证总结 前言 最近因为从标准库过渡到hal库,又重新温习了一遍定时器相关的功能,在stm32中定时器经常被用作输出PWM波,在此对定时器常用来输出PWM的两种模式:输出比较模式和PWM模式做一个总结 本次实验使用stm32G431,使用cubemx生成底层代码。 一、输出比较模式和PWM模式 输出比较模式和PWM模式都可以用来输出PWM波,在功能上两者有

weixin_47042449的博客 2万+

STM32 HAL库PWM模式1和模式2到底怎么选?一个LED呼吸灯实验带你搞懂所有细节

本文深入解析STM32 HAL库中PWM模式1和模式2的选择问题,通过LED呼吸灯实验详细对比两种模式的波形生成机制。文章揭示了计数方向、极性设置与PWM模式的交互效应,并提供舵机控制等实际应用中的配置策略,帮助开发者精准选择适合的PWM模式。

weixin_30301449的博客 288

STM32CubeMX的TIM1互补PWM输出,HAL库(2路,带死区)

芯片为STM32F407ZG,使用的是高级定时器TIM1的PWM互补PWM输出。 效果: 整体的: 细节: 通道0~3分别是CH1、CH1N、CH2、CH2N。 CH1和CH1N的死区时间是0.375us(公式算出来应该是公式0.3us左右,跟逻辑分析仪的采样频率有关系) CH1和CH2、CH1N和CH2N是同步的,以前做H桥的话就需要这种吧(对角导通),有相位差的后面再研究。 STM32CubeMX配置: main函数 /* USER CODE BEGIN 2 */ /****普通定时器***/

小李view 1万+

STM32定时器使用(二)PWM方波输出

之前使用过的DSP28335是有专门的ePWM和捕捉功能的,不过定时器很少,其实是一样的道理,通用定时器也可以进行PWM方波的输出,使用过程可以按照下面来执行 本例程使用TIM3定时器,过程是先配置输出引脚,每个定时器有四个通道,每个通道都可以输出一路PWM方波,每一路都有一个比较寄存器,当定时器计数器到来得时候,引脚电平方向,至于反向是高到低还是低到高,这个由PWM模式和有效电平设置确定; PW...

guijiaqing的博客 1万+

STM32 PWM模式1与模式2区别详解:从原理到实战应用

PWM(脉冲宽度调制)是嵌入式系统中控制功率输出的基础技术,通过调节方波占空比等效控制模拟量。其原理基于定时器计数器与比较值的实时比较,决定输出电平的切换时机。STM32定时器支持PWM模式1和模式2,两者核心差异在于有效电平的输出逻辑,直接影响波形相位与占空比表现。正确选择模式可简化电机控制、LED调光、逆变器等场景的代码逻辑,避免调试陷阱。本文深入剖析PWM模式1与模式2的底层机制、配置差异及典型应用,帮助开发者精准掌握STM32定时器PWM输出技术。

weixin_33925615的博客 310

STM32 PWM模式与输出比较模式的区别。PWM占空比不生效,在STM32CubeMX中配置PWM的两种模式——蓝桥杯嵌入式

STM32PWM模式与输出比较模式的区别。如何解决PWM占空比不生效,PWM模式与输出比较模式在STM32CubeMX中配置PWM的两种模式。PWM的什么。PWM模式与输出比较模式在STM32CubeMX中的设置。在示波器中观察PWM模式下的输出情况。

勾栏听曲_0的博客 3719

STM32 PWM模式1与模式2深度解析:从寄存器原理到F429实测避坑指南

PWM(脉冲宽度调制)是嵌入式系统中控制电机、LED和电源的核心技术,其本质是通过调节方波占空比来模拟模拟信号。在STM32微控制器中,定时器的PWM模式1和模式2决定了比较结果与有效电平的映射关系,而极性位则控制最终引脚电平,两者正交组合形成四种输出状态。正确配置可确保波形对称、死区逻辑清晰,避免电机抖动或驱动异常。该技术广泛应用于电机驱动、数字电源、逆变器等场景。本文结合STM32F429实测,深入剖析PWM模式1与模式2的寄存器级原理、互补输出与死区配置,并给出实际项目选型建议与常见问题排查技巧。

weixin_29192211的博客 172

NXP S32K3 Safety软件生态全解析:RTD、SPD、SAF、SCST到底怎么选?

本文深入解析NXP S32K3系列MCU的安全软件生态,详细对比RTD、SPD、SAF和SCST四大组件的功能定位与选型策略。针对不同ASIL等级需求,提供从架构设计到工程实践的完整解决方案,帮助开发者高效实现功能安全认证,优化汽车电子系统的安全性与可靠性。

weixin_42524226的博客 324

Dify DSL文件分享 Dify讨论群 大模型token资源等(持续收集更新)

基于LLMOps平台-Dify的一站式学习平台。包含不限于:Dify案例、DSL文件分享、模型接入、Dify交流讨论等各类资源分享。

同名公众号:dify实验室 3718

STM32 PWM模式1与模式2深度解析:从寄存器到实战避坑指南

PWM(脉冲宽度调制)是嵌入式系统中控制模拟量的核心技术,通过调节方波占空比实现对LED亮度、电机转速等精确控制。STM32定时器的PWM输出涉及模式1与模式2的选择,其本质是有效电平区间的定义差异,并与极性控制位共同决定最终波形。正确配置可避免驱动逻辑错误、死区时间错位及占空比反向等问题,在电机驱动、数字电源、调光调速等场景中至关重要。本文深入剖析PWM模式1与模式2的底层原理、配置方法及实战选择策略,帮助开发者彻底掌握这一关键技术。

weixin_29184371的博客 270

深入解析CRC16查表法:从原理到Modbus协议实践

本文深入解析了CRC16查表法的核心原理与实现,重点阐述了其“空间换时间”的优化思想。通过对比直接计算法,详细说明了查表法如何通过预计算表格将计算速度提升数十倍,并提供了完整的Modbus CRC16查表法代码生成、解析及实战避坑指南,帮助开发者在嵌入式及工业通信场景中高效实现可靠的数据校验。

weixin_29166013的博客 557

STM32——PWM知识详解

文章目录一、PWM简介1.定义2.主要参数二、PWM产生方式1.普通IO口与PWM口2.普通IO口产生PWM3.PWM口产生PWM总结参考链接归纳 一、PWM简介 1.定义 脉冲宽度调制(PWM) 是一种数字信号,最常用于控制电路。该信号在预定义的时间和速度中设置为高(5v或3.3v)和低(0v)。通常,我们将PWM的高电平称为1,低电平为0。 2.主要参数 (1)PWM占空比 PWM信号保持高电平的时间百分比称为占空比。如果信号始终为高电平,则它处于100%占空比,如果它始终处于低电平,则占空比为0%。如

JackZhang 8万+

python 携程登陆_Python 学习练习之用户登录接口

目的:用python实现简单用户注册,登陆,加黑功能,放个流程图吧。以下内容仅为练习 执行流程:[root@zabbix login]# python user_login.pyusername:tompassword:123456Are you want to register ? [y/n]yRegister successful,Please relogin ![root@zabbix lo...

weixin_28679635的博客 519

【硬件】通俗易懂的讲解晶体管(三极管和MOS管)的工作原理

晶体管是一个简单的元器件,可用于构建许多有趣的项目。在本文中,我将用通俗易懂的语言给您讲解晶体管的工作原理,以便您可以在电路设计中更好的使用静态管。一旦你学习这些基础知识,对以后的设计和使用来说,将会变得非常容易。我们将重点介绍两种最常见的晶体管:双极型晶体管(三极管)和MOSFET。晶体管的工作原理其实是类似于电子开关。它可以打开和关闭电路。一个简单的思考方法是将晶体管视为无源的继电器。晶体管类似于继电器,从某种意义上说,您可以使用它来打开和关闭某些东西。但晶体管也可以部分导通,一般在放大电路中使用,这部

1万+

使用STM32输出PWM波形

本文目的是通过在STM32平台上采用定时器的方法输出PWM波形,进而熟悉和掌握PWM的原理和产生。 目录(一)PWM简介1.关于PWM2.STM32上的PWM(二)STM32配置PWM输出(三)PWM输出波形1.Keil虚拟示波器观察2.示波器观察(四)总结 (一)PWM简介 1.关于PWM 含义 PWM(Pulse Width Modulation)即脉冲宽度调制,简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术;它是一种模拟控制方式,根据相应载荷的变化来调制晶体管基.

qq_45237293的博客 4万+

Simulink中为Scope模块添加图例的方法

比如我要在Scope模块输出三轴加速度的数据,但三轴数据波形混杂在一起不太好看,此时就需要在Scope模块中添加图例来使波形看起来更加清晰明了。 注:我这里使用的Matlab版本为2019a 1.首先在simulink中打开,需要添加图例的Scope,如图示: 2.在Matlab,command窗口输入: >> set(0,'ShowHiddenHandles','On'); >> set(gcf,'menubar','figure'); 此时你会发现Scope窗口菜单栏多了好几

Kunfly的博客 1万+
上一篇: 如何解决“error LNK1123: 转换到 COFF 期间失败”
下一篇: 关于STM32影子寄存器和预装载寄存器和TIM_ARRPreloadConfig
kinsno
博客等级 码龄16年 46粉丝 13原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值