STM32F103VET6实现全彩LED灯

本文介绍了如何使用STM32F103VET6通过PWM控制全彩LED灯,详细阐述了全彩LED的工作原理和硬件知识,包括LED的占空比控制和定时器PWM配置。在代码实现部分,讲解了GPIO初始化、定时器配置、占空比设置以及混合颜色显示的方法,最终实现在开发板上显示不同颜色的效果。
摘要由CSDN通过智能技术生成

全彩LED灯的实现


前言

利用PWM控制实现全彩LED灯


一、相关知识

1.全彩 LED 灯简介

全彩 LED 灯,实质上是一种把红、绿、蓝单色发光体集成到小面积区域中的 LED 灯,控制时对这三种颜色的灯管输出不同的光照强度,即可混合得到不同的颜色,其混色原理与光的三原色混合原理一致。

本工程配套开发板中的 RGB 灯就是一种全彩 LED 灯,实现LED 基本控制时候,只能控制 RGB 三色灯的亮灭,即 RGB 每盏灯有[0:1]两种等级,因此只能组合出 8种颜色。要使用 STM32 控制 LED 灯输出多种亮度等级,可以通过控制输出脉冲的占空比来实现
在这里插入图片描述
图中列出了周期相同而占空比分别为 100%、80%、50%和 20%的脉冲波形,假如利用这样的脉冲控制 LED 灯,即可控制 LED 灯亮灭时间长度的比例。若提高脉冲的频率,LED 灯将会高频率进行开关切换,由于视觉暂留效应,人眼看不到 LED 灯的开关导致的闪烁现象,而是感觉到使用不同占空比的脉冲控制 LED 灯时的亮度差别。即单个控制周期内,LED 灯亮的平均时间越长,亮度就越高,反之越暗。
把脉冲信号占空比分成 256 个等级,即可用于控制 LED 灯输出 256 种亮度,使用三种这样的信号控制 RGB 灯即可得到 256256256 种颜色混合的效果。而要控制占空比直接使用 STM32定时器的 PWM 功能即可。

2.硬件简介

LED 硬件原理图
在这里插入图片描述
RGB 灯使用阴极分别连接到了 PB5、PB0 及 PB1,它们分别是定时器
TIM3 的通道 2、3、4,其中 PB5用于定时器输出通道时,需要使用重定义功能。

二、代码实现

1.编程要点

  • 初始化 RGB灯使用的 GPIO;
  • 配置定时器输出 PWM 脉冲;
  • 编写修改 PWM脉冲占空比大小的函数;
  • 测试配置的定时器脉冲控制周期是否会导致 LED 灯明显闪烁;

2.LED灯硬件相关宏定义

color_led.h文件:


/********定时器通道*******/
#define  COLOR_TIMx      TIM3

#define  COLOR_TIM_APBxClock_FUN    	RCC_APB1PeriphClockCmd
#define  COLOR_TIM_CLK					RCC_APB1Periph_TIM3
#define  COLOR_TIM_GPIO_CLK     (RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO)
//红灯的引脚需要重映射
#define COLOR_GPIO_REMAP_FUN()  GPIO_PinRemapConfig(GPI0_PartialRemap_TIM3,ENABLE);
/********红灯*********/
#define COLOR_RED_TIM_LED_PORT   GPIOB
#define COLOR_RED_TIM_LED_PIN   GPIO_Pin_5

#define COLOR_RED_TIM_OCxInit    TIM_0C2Init      //初始化通道函数
#define COLOR_RED_TIM_OCxPreloadconfig      TIM_OC2Preloadconfig//通道重载配置函数

//通道比较寄存器,以TIMx->CCRx方式可访问该寄存器,设置新的比较值,控制占空比
//以宏封装后,使用这种形式: COLOR_TIMx->COLOR_RED_CCRx ,可访问该通道的比较寄存器

#define COLOR_RED_CCRx    CCR2

/************绿灯***********/

#define COLOR_GREEN_TIM_LED_PORT   GPIOB
#define COLOR_GREEN_TIM_LED_PIN   G
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值