5050 RGB8路LED灯驱动(PWM驱动,STM32)

一、前期准备
单片机:STM32F103ZET6
开发环境:MDK5.14
库函数:标准库V3.5
RGB LED模块:淘宝有售
这里写图片描述

二、实验效果
类似奥迪转向灯,灯以此亮起,如此循环。颜色256 * 256 * 256色可调。
IO驱动方式

三、驱动原理
模块上面的RGB引脚低电平有效,LED灯IO口也是低电平有效。
需要完整工程或者有问题的请加QQ:1002521871,验证:呵呵。

四、驱动代码
led.h


#ifndef __LED_H__
#define	__LED_H__
#include "stm32f10x.h"
#include "gpio.h"
#include "pwm.h"

#define 		LED_R			PAout(1)
#define			LED_G			PAout(2)
#define			LED_B			PAout(3)

#define			RGB_LED1		PGout(8)
#define			RGB_LED2		PGout(9)
#define			RGB_LED3		PGout(10)
#define			RGB_LED4		PGout(11)
#define			RGB_LED5		PGout(12)
#define			RGB_LED6		PGout(13)
#define			RGB_LED7		PGout(14)
#define			RGB_LED8		PGout(15)

extern void LEDConfiguration(void);
#endif

led.C

#include  "led.h"

void LEDConfiguration(void)
{	
	GPIO_InitTypeDef    GPIO;
    
    //Enable APB2 Bus
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);
    
	GPIO.GPIO_Pin	= 0xff00;
	GPIO.GPIO_Mode 	= GPIO_Mode_Out_PP;
	GPIO.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOG, &GPIO);
	
	LED_R		= OFF;			
	LED_G		= OFF;	
	LED_B		= OFF;	

	RGB_LED1	= OFF;	
	RGB_LED2	= OFF;
	RGB_LED3	= OFF;	
	RGB_LED4	= OFF;
	RGB_LED5	= OFF;	
	RGB_LED6	= OFF;
	RGB_LED7	= OFF;	
	RGB_LED8	= OFF;	
	
	PWMConfiguration();
}

APP.c

#include "app.h"

void LED_PWM(__led LEDx, uint32_t RGBVlaue)
{
	switch(LEDx)
	{
		case LED1:
			RGB_LED1	= ON;	
			RGB_LED2	= OFF;
			RGB_LED3	= OFF;	
			RGB_LED4	= OFF;
			RGB_LED5	= OFF;	
			RGB_LED6	= OFF;
			RGB_LED7	= OFF;	
			RGB_LED8	= OFF;	
			break;
		case LED2:
			RGB_LED1	= OFF;	
			RGB_LED2	= ON;
			RGB_LED3	= OFF;	
			RGB_LED4	= OFF;
			RGB_LED5	= OFF;	
			RGB_LED6	= OFF;
			RGB_LED7	= OFF;	
			RGB_LED8	= OFF;	
			break;
		case LED3:
			RGB_LED1	= OFF;	
			RGB_LED2	= OFF;
			RGB_LED3	= ON;	
			RGB_LED4	= OFF;
			RGB_LED5	= OFF;	
			RGB_LED6	= OFF;
			RGB_LED7	= OFF;	
			RGB_LED8	= OFF;	
			break;
		case LED4:
			RGB_LED1	= OFF;	
			RGB_LED2	= OFF;
			RGB_LED3	= OFF;	
			RGB_LED4	= ON;
			RGB_LED5	= OFF;	
			RGB_LED6	= OFF;
			RGB_LED7	= OFF;	
			RGB_LED8	= OFF;	
			break;
		case LED5:
			RGB_LED1	= OFF;	
			RGB_LED2	= OFF;
			RGB_LED3	= OFF;	
			RGB_LED4	= OFF;
			RGB_LED5	= ON;	
			RGB_LED6	= OFF;
			RGB_LED7	= OFF;	
			RGB_LED8	= OFF;	
			break;
		case LED6:
			RGB_LED1	= OFF;	
			RGB_LED2	= OFF;
			RGB_LED3	= OFF;	
			RGB_LED4	= OFF;
			RGB_LED5	= OFF;	
			RGB_LED6	= ON;
			RGB_LED7	= OFF;	
			RGB_LED8	= OFF;	
			break;
		case LED7:
			RGB_LED1	= OFF;	
			RGB_LED2	= OFF;
			RGB_LED3	= OFF;	
			RGB_LED4	= OFF;
			RGB_LED5	= OFF;	
			RGB_LED6	= OFF;
			RGB_LED7	= ON;	
			RGB_LED8	= OFF;	
			break;
		case LED8:
			RGB_LED1	= OFF;	
			RGB_LED2	= OFF;
			RGB_LED3	= OFF;	
			RGB_LED4	= OFF;
			RGB_LED5	= OFF;	
			RGB_LED6	= OFF;
			RGB_LED7	= OFF;	
			RGB_LED8	= ON;	
			break;
	}
	
	TIM_SetCompare2(TIM2, (uint8_t)(RGBVlaue / 65536 % 256));
	TIM_SetCompare3(TIM2, (uint8_t)(RGBVlaue % 65536 / 256));
	TIM_SetCompare4(TIM2, (uint8_t)(RGBVlaue % 256));
}

由于作者能力有限,有不妥之处欢迎指正,邮箱alex_hua@foxmail.com

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值