七彩RGB可控模块教程

发布时间 2023-04-16 09:47:55作者: 琪亚娜真可爱

一、硬件介绍

  七彩RGB可控模块,是个LED灯。但是它有三种颜色,分别为红、绿、蓝。该模块有四个接口,分别是Gnd、R、G、B。

 

二、控制原理

  通过PWM来控制LED灯的亮度,除此之外R、G、B、三个口要接三个不同的GPIO口。其实你也将RGB可控模块理解为三个不同颜色的LED灯。

 

三、代码实现

main.c()

#include "stm32f10x.h"

#include "PWM.h"
#include "delay.h"

int main(void)
{
	unsigned int i,j;
	PWM_Init();
	//设置默认低电平
	GPIO_SetBits(GPIOA,GPIO_Pin_4);
	while(1)
	{	
		for(i = 0;i <= 100 ;i++){
			PWM_SetRGB_Led(i,0,0);
			delay_ms(10);
		}
		for(i = 0;i <= 100 ;i++){
			PWM_SetRGB_Led(100 - i,0,0);
			delay_ms(10);
		}
		for(i = 0;i <= 100 ;i++){
			PWM_SetRGB_Led(0,i,0);
			delay_ms(10);
		}
		for(i = 0;i <= 100 ;i++){
			PWM_SetRGB_Led(0,100 - i,0);
			delay_ms(10);
		}
		for(i = 0;i <= 100 ;i++){
			PWM_SetRGB_Led(0,0,i);
			delay_ms(10);
		}
		for(i = 0;i <= 100 ;i++){
			PWM_SetRGB_Led(0,0,100 - i);
			delay_ms(10);
		}
	}
}

PWM.h

#ifndef _PWM_H_
#define _PWM_H_
 
void PWM_Init(void);
void PWM_SetRGB_Led(uint16_t red,uint16_t green,uint16_t blue);
 
#endif

PWM.c

#include "stm32f10x.h"                  // Device header


void PWM_Init(void)
{
	//Time Base初始化结构定义
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	
	
	TIM_OCInitTypeDef TIM_OCInitStructure;
	
	GPIO_InitTypeDef GPIO_Inistructure;	//关于GPIO口的结构体定义,初始化GPIO用的
	//***********************************************************************
	
	//***********************************************************************
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);	//用来开启或关闭APB2外设时钟
	GPIO_Inistructure.GPIO_Mode = GPIO_Mode_AF_PP;	//GPIO_Mode 模式//
	GPIO_Inistructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;	//需要配置的GPIO引脚。
	GPIO_Inistructure.GPIO_Speed = GPIO_Speed_50MHz;	//指定所选引脚的速度
	GPIO_Init(GPIOB,&GPIO_Inistructure);	//根据指定的参数初始化GPIOx外围设备 ,GPIO_InitStruct中的参数 
	//***********************************************************************
	
	
	
	//开启RCC TIM2 时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
	
	//配置TIMx内部时钟 TIM2时钟
	TIM_InternalClockConfig(TIM4);
	
	//指定时钟分频 1分频
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	//计数模式 选择向上模式
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	//周期,ARR自动重装的值
	TIM_TimeBaseInitStructure.TIM_Period = 100 - 1;	//ARR
	//PSC预分频器的值
	TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1;	//PSC
	//重复计数器的值  指定重复计数器值。 每次RCR向下计数器  达到零,生成一个更新事件并重新开始计数  从RCR值 
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	
	//初始化TIMx时间基准单元外设  * TIM_TimeBaseInitStruct中指定的参数
	TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);
	
	

	TIM_OCStructInit(&TIM_OCInitStructure);
	//输出的模式
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	//设置输出比较的极性	高电平
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	//设置输出使能
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	//设置CCR
	TIM_OCInitStructure.TIM_Pulse = 0;
	
	//GPIO口
	TIM_OC1Init(TIM4,&TIM_OCInitStructure);
	TIM_OC2Init(TIM4,&TIM_OCInitStructure);
	TIM_OC3Init(TIM4,&TIM_OCInitStructure);
	
	//启用指定TIM外设
	TIM_Cmd(TIM4,ENABLE);	
}

void PWM_SetRGB_Led(uint16_t red,uint16_t green,uint16_t blue)
{
	//使用通道1PWM
	TIM_SetCompare1(TIM4,red);
	//使用通道2PWM
	TIM_SetCompare2(TIM4,green);
	//使用通道3PWM
	TIM_SetCompare3(TIM4,blue);

}

四、结束

   为了美好的明天,继续加油吧