stm32用pwm实现呼吸灯

PWM介绍

STM32F103C8T6 PWM资源:
高级定时器(TIM1):7路
通用定时器(TIM2~TIM4):各4路
PWM输出模式:
PWM模式1:在向上计数时,一旦 CNT < CCRx 时输出为有效电平,否则为无效电平; 在向
下计数时,一旦 CNT > CCRx 时输出为无效电平,否则为有效电平。
PWM模式2:在向上计数时,一旦 CNT < CCRx 时输出为无效电平,否则为有效电平; 在向
下计数时,一旦 CNT > CCRx 时输出为有效电平,否则为无效电平。
在这里插入图片描述
在这里插入图片描述

LED灯为什么可以越来越亮,越来越暗?

这是由不同的占空比决定的。

如何计算周期/频率?

假如频率为 2kHz ,则:PSC=71,ARR=499

stm32CubeMX配置图:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include “main.h”
#include “tim.h”
#include “gpio.h”

int main(void)
{

uint16_t pwmVal = 0;//调整占空比的参数,即修改CCRx的值
uint8_t dir = 1;//设置改变方向标志位。1:占空比越来越大;0:占空比越来越小
HAL_Init();

SystemClock_Config();

MX_GPIO_Init();
MX_TIM4_Init();
// 使能 Timer4 第3通道 PWM 输出
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);
// while循环实现呼吸灯效果
while (1)
{

	HAL_Delay(1);//让每次设置的占空比有一个输出展示的时间
	if(dir == 1){
		pwmVal++;//增加CCRx的值,使得占空比不断增大,表现为LED灯越来越亮
	}else if(dir == 0){
		pwmVal--;//减少CCRx的值,使得占空比不断减小,表现为LED灯越来越暗
	}
	
	if(pwmVal>500){//当CCRx的值大于500,即大于一个周期时,改变dir的值,即让灯从越来越亮的状态转换为越来越暗的状态
		dir = 0;
	}else if(pwmVal == 0){
		dir = 1;
	}
	
	//修改比较值,修改占空比
	__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, pwmVal);

/* USER CODE BEGIN 3 */

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值