实验指导书422.docx
《实验指导书422.docx》由会员分享,可在线阅读,更多相关《实验指导书422.docx(139页珍藏版)》请在冰豆网上搜索。
![实验指导书422.docx](https://file1.bdocx.com/fileroot1/2023-1/28/28aa48c7-4080-41c2-817c-238b5dfdf0eb/28aa48c7-4080-41c2-817c-238b5dfdf0eb1.gif)
实验指导书422
二十八、三色RGB与三色LED模块实验
1、模块介绍
这两个模块都是通过R、G、B三个引脚的PWM电压输入来调节三种基色(红/蓝/绿)的强度从而实现全彩的混色效果,从而可以产生任意一种颜色。
三色RGB模块由一个贴片全彩LED制成,三色LED模块由一个插件全彩LED制成。
用STM32开发板通过程序对这两个模块进行控制可实现酷炫的灯光效果。
产品特性:
1、RGB三基色接限流电阻防止烧坏
2、通过PWM调节三基色可混合得到不同的颜色
3、可与各种单片机接口
4、工作电压:
5V
5、LED驱动模式:
共阴驱动
三色RGB模块电路原理图如下:
三色LED模块电路原理图如下:
2、实验硬件连接
模块引脚标注:
其中R、G、B三个引脚为输入引脚,分别控制着红、绿、蓝三个颜色的发光强度。
通过程序控制这三个引脚的输入占空比,即可实现LED发出合成的某个颜色的光。
硬件连接:
3、试验程序
在lib组件中添加libraries\STM32F10x_StdPeriph_Driver\src下的misc.c、stm32f10x_rcc.c、stm32f10x_gpio.c、stm32f10x_tim.c文件。
main.c文件如下:
#include"stm32f10x.h"
voidRCC_Configuration(void);
voidGPIO_Configuration(void);
voidNVIC_Configuration(void);
voidTIM3_Configuration(void);//定时器3初始化函数
voidGPIO_Configuration(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
/*GPIOAConfiguration:
TIM3channel1*///设置该引脚为复用输出功能,输出TIM3CH1的PWM脉冲波形
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;//TIM_CH1PA6
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
/*GPIOAConfiguration:
TIM3channel2*///设置该引脚为复用输出功能,输出TIM3CH2的PWM脉冲波形
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;//TIM_CH2PA7
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
/*GPIOBConfiguration:
TIM3channel4*///设置该引脚为复用输出功能,输出TIM3CH4的PWM脉冲波形
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//TIM_CH4PB1
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
//系统中断管理
voidNVIC_Configuration(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
//设置优先级分组:
先占优先级0位,从优先级4位
//设置向量表的位置和偏移
#ifdefVECT_TAB_RAM
NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);
#else
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
#endif
}
//配置系统时钟,使能各外设时钟
voidRCC_Configuration(void)
{
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//使能GPIO外设和AFIO复用功能模块时钟使能
}
voidTIM3_Configuration(void)
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
//根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
TIM_OCInitTypeDefTIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
TIM_DeInit(TIM3);
TIM_InternalClockConfig(TIM3);
TIM_TimeBaseStructure.TIM_Period=10000;
//设置在下一个更新事件装入活动的自动重装载寄存器周期的值
//TIM_Period设置了在下一个更新事件装入活动的自动重装载寄存器周期的值。
它的取值必须在0x0000和0xFFFF之间
TIM_TimeBaseStructure.TIM_Prescaler=0;
//设置用来作为TIMx时钟频率除数的预分频值不分频
//TIM_Prescaler设置了用来作为TIMx时钟频率除数的预分频值。
它的取值必须在0x0000和0xFFFF之间
TIM_TimeBaseStructure.TIM_ClockDivision=0;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
//TIM向上计数模式,TIM_CounterMode_DownTIM向下计数模式
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
//根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
//选择定时器模式:
TIM脉冲宽度调制模式2
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//比较输出使能
TIM_OCInitStructure.TIM_Pulse=0;//设置待装入捕获比较寄存器的脉冲值
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
//输出极性:
TIM输出比较极性高
TIM_OC2Init(TIM3,&TIM_OCInitStructure);
//根据TIM_OCInitStruct中指定的参数初始化外设TIMx
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
//使能TIMx在CCR1上的预装载寄存器
TIM_OC1Init(TIM3,&TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_OC4Init(TIM3,&TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3,ENABLE);//使能TIMx在ARR上的预装载寄存器
TIM_Cmd(TIM3,ENABLE);//使能TIMx外设
}
//配置所有外设
voidInit_All_Periph(void)
{
RCC_Configuration();
NVIC_Configuration();
GPIO_Configuration();
TIM3_Configuration();
}
voidDelay(vu32nCount)
{
for(;nCount!
=0;nCount--);
}
voidDelay_Ms(uint16_ttime)//ms延时函数
{
uint16_ti,j;
for(i=0;i