STM32之PWM简介

输出比较的原理:就是比较定时器时基单元的CNT和捕获/比较寄存器CCR的值,如果前者大输出1,反之输出0在这里插入图片描述

初步理解PWM,先要知道PWM是什么?如下图:
在这里插入图片描述
说白了就是高电平所占方波周期的比例,结合LED高电平点亮,低电平熄灭就可以做出呼吸灯的效果。
PWM是通用定时器和高级定时器都具有的功能,同时也可以通过代码模拟。
定时器产生PWM的原理:
假设定时器工作模式设置为向上计数 PWM模式,且当 CNT<CCRx 时,输出 1,当 CNT>=CCRx 时输出 0,则:

当 CNT 值小于 CCRx 的时候, IO 输出高电平 (1)

当 CNT 值大于等于 CCRx 的时候,IO 输出低电平 (0)

当 CNT 达到 ARR 值的时候,重新归零,然后重新向上计数,依次循环。

因此,改变 CCRx 的值,就可以改变 PWM 输出的占空比,改变 ARR 的值,就可以改变 PWM 输出的周期(频率),这就是利用定时器输出PWM 的基本原理。参照通用定时器的结构框图:在这里插入图片描述
CCRX即比较寄存器的值对应红线,ARR即自动重装载寄存器的值对应棕线,CNT为计数器的值对应黑线。在这里插入图片描述
通过比较CNT和CRRx的值的大小,对应输出高低电平,来达到输出PWM波的目的。同时由于CRRx的值在0到ARR之间连续变化,由此带来占空比的改变。输出比较结构体的成员

uint16_t TIM_OCMode;          //比较输出模式,8种输出比较的模式
uint16_t TIM_OutputState;     //比较输出使能
uint16_t TIM_OutputNState;	  //比较互补输出使能
uint16_t TIM_Pulse;				//脉冲宽度,即高电平的占比
uint16_t TIM_OCPolarity;		//输出极性,决定高电平还是低电平有效
uint16_t TIM_OCNPolarity;		//互补输出极性
uint16_t TIM_OCIdleState;		//空闲状态下的比较输出状态
uint16_t TIM_OCNIdleState;	//空闲状态下的比较互补输出状态

在这里插入图片描述

普通IO口输出PWM:
我们用定时器中断的方式,使规定时间内产生一次中断,计数中断次数,通过计算将中断处理函数前几次中断都给高电平就ok了,此方法可用代码实现在这里插入图片描述
配置步骤:
第一步:开启GPIO时钟
第二步:配置时基单元
第三步:配置输出比较单元
第四步:配置GPIO
第五步:运行控制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值