七彩RGB可控模块教程
一、硬件介绍
七彩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);
}
四、结束
为了美好的明天,继续加油吧

浙公网安备 33010602011771号