stm32之PWM学习

摘要:
然后将该值写入CCR寄存器,以便每个周期中的PWM占空比不同。utm_ Source=复制计数器值TIMx_将CNT与捕获比较寄存器值CCRx进行比较后,最终输出电平为高或低,。STM32的每个通用定时器都是完全独立的,没有任何共享资源。

下图是一个STM32普通PWM形成的图形原理说明

stm32之PWM学习第1张

自动重装载寄存器(ARR)用于确定波形的频率(即周期)、捕获比较寄存器(CCRx)(用于确定占空比的)

PWM的工作过程如下:首先ARR寄存器里面的值确定了一个PWM周期,就是我们上面举的那两个例子中的“1秒”(注意这个周期是在PWM系统初始化的时候写入ARR寄存器的,写入以后一般就不再改动了)。然后CCR寄存器里面的值是PWM工作过程中确定的,它可以为一个定值,也可以是一个变化的值。

当它是一个定值时(就像图片里的那样),占空比就是一个定值,如果放到上面那个LED灯的例子,那么实验现象就不是灯会渐亮渐灭,而是始终维持一个比较暗的亮度,如果CCR里面的值设定得越靠近ARR寄存器里面的值(只是靠近,但不大于),那么按照图上来看,就是每个周期内高电平持续的时间越短,至于灯到底是更亮了还是更暗了就得实际情况具体分析了。

当它是一个变化的值的时候,在程序里就可以设置一个变量,让这个变量按照一定规律递增(或递减)。然后把这个值写入到CCR寄存器中,这样每个周期中PWM的占空比就是不同的。宏观上,就能看到上面的LED灯的渐亮渐灭的过程。

--------------------- 以上来自 FelikZhang 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/FelikZhang/article/details/79237573?utm_source=copy 

计数器值TIMx_CNT与捕获比较寄存器值CCRx比较后,最终输出高电平还是低电平,。

如图为向上计数:
     定时器重装载值为ARR,比较值CCRx
     t时刻对计数器值和比较值进行比较
     如果计数器值小于CCRx值,输出低电平
     如果计数器值大于CCRx值,输出高电平

PWM的一个周期
    定时器从0开始向上计数
    当0-t1段,定时器计数器TIMx_CNT值小于CCRx值,输出低电平
    t1-t2段,定时器计数器TIMx_CNT值大于CCRx值,输出高电平
    当TIMx_CNT值达到ARR时,定时器溢出,重新向上计数...循环此过程
    至此一个PWM周期完成

影响因素
    ARR : 决定PWM周期(在时钟频率一定的情况下,当前为默认内部时钟CK_INT)
    CCRx : 决定PWM占空比(高低电平所占整个周期比例)

下图是一个spwm的图形

stm32之PWM学习第2张

一. STM32F103通用定时器简介:

  1.  通用定时器是一个可编程预分频器驱动的16位自动装载计数器
  2.  适用于:  测量输入信号的脉冲长度(输入捕获)、产生输出波形(输出比较和PWM)。
  3. 每个定时器都是完全独立的,都可以同步操作。

-----------------------------------------------------以下为复制粘贴---------------------------------------------------------

STM32 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定时器功能特点包括:
  ①位于低速的APB1总线上(APB1)
  ②16 位向上、向下、向上/向下(中心对齐)计数模式,自动装载计数器(TIMx_CNT)。
  ③16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数 为 1~65535 之间的任意数值。
  ④4 个独立通道(TIMx_CH1~4),这些通道可以用来作为: 
  输入捕获 
  输出比较
  PWM 生成(边缘或中间对齐模式) 
  单脉冲模式输出 
⑤可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外一个定时器)的同步电路。

如下事件发生时产生中断/DMA(6个独立的IRQ/DMA请求生成器): 
①更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) 
②触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) 
③输入捕获 
④输出比较 
⑤支持针对定位的增量(正交)编码器和霍尔传感器电路 
⑥触发输入作为外部时钟或者按周期的电流管理
STM32 的通用定时器可以被用于测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。   
使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。

---------------------------------------------------------------------------------------------------------------------------------

二. PWM是什么

OK,首先PWM全称为“Pulse Width Modulation”。中文翻译为:脉冲宽度调制。

脉冲宽度指的是 脉冲持续的时间,既高电平或低电平保持(持续)的时间。

而PWM通俗的说就是人为的(通过微处理器)去控制电平高低保持的时间。

好的,这里引出一个新名词,占空比:在一个脉冲的循环中,通电时间相对于总时间所占的比例。

免责声明:文章转载自《stm32之PWM学习》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[zz]主设备号和次设备号快速搭建博客:写作技巧下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【单片机】【PIC16F1937】之定时器

这篇文章是谈谈关于1937的定时器的,刚开始被晶振频率、时钟频率、振荡周期、振荡频率、指令周期、指令频率等等的名词绕晕了。先来解决这个问题。 晶振频率是代表振荡器的频率,说的是晶振这个器件的频率,因为一个单片机有内部外部晶振,比如你选择了内部晶振,那么这个晶振的频率就是你单片机的时钟频率, 振荡频率和晶振频率说的是一回事。振荡周期是1/(晶振频率),T =...

STM32中assert_param的使用

在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用。如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上assert_param是一个宏定义;在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数。所谓有效的参数是指满足规定范围的参数,比如某个参数的取值范围只能是小于3的正整数,如果给出的参...

(stm32f103学习总结)—RTC独立定时器—实时时钟实验

一、STM32F1 RTC介绍 1.1 RTC简介   STM32 的实时时钟( RTC)是一个独立的定时器。 STM32 的 RTC 模 块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的 功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC模块和时钟配置是在后备区域,无论器件状态如何(运行模式、 低功耗模式或处于复位状态),只要...

STM32 USART整理说明(转)

  该接口通过3个引脚连接到另外的外部设备上。    任何USART双向通信都至少需要两个引脚:接收数据输入RX和发送数据输出TX。    当发送器禁能时输出引脚恢复到I/O端口配置。当发送器使能时且无数据发送,TX引脚为高电平。     字长可以通过设置USART_CR1寄存器中的M位来选择是8位还是9位。    TX引脚在起始位期间为低,停止位期间为高...

js-定时器

知识 要用定时器,先清除定时器   1、 定时器   setInterval() 循环定时器;周而复始的执行(循环执行)  setTimeout()( 执行事件,间隔时间(单位毫秒)) <script> var num=0; setInterval(function(){ console.log( num);...

STM32使用ST-Link Debugger下载出错 提示:no target connected!

工程没有问题,工程下载设置没有有问题,ST-LINK V2下载器也没有问题,也能读取到ST-LINK V2。下载就是报错提示no target connected! 出现以上问题你可以试一下解决方法: 摁着STM32复位按键,点击KEIL5烧录程序,点完后立即松开复位键。 我遇到过以上问题,测试过就能下载程序了。 出现以上问题的原因可能是:你的下载引脚...