首页 > 其他分享 >七彩RGB可控模块教程

七彩RGB可控模块教程

时间:2023-04-16 09:55:28浏览次数:33  
标签:TimeBaseInitStructure 教程 TIM4 七彩 TIM RGB OCInitStructure GPIO PWM

一、硬件介绍

  七彩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);

}

四、结束

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

标签:TimeBaseInitStructure,教程,TIM4,七彩,TIM,RGB,OCInitStructure,GPIO,PWM
From: https://www.cnblogs.com/kianaz/p/17322572.html

相关文章

  • 周立功arm linux教程,极速搭建周立功IMX287A ARM Linux开发环境
    原文:https://blog.csdn.net/weixin_35399228/article/details/116750301刚买了一套开发板,准备以后调试项目用,并且熟悉飞思卡尔这个平台。众所周知,周立功提供的资料是非常详细的,但难免存在疏漏的地方,在此,记录我玩这套IMX287A开发板的流程,由于有经验,所以搭建起来非常快,基本上半个......
  • solidworks 2016安装教程(win7,win10,win11都可以安装)
    以下是搜索的笔记,记录下来,方便自己下次找到一,安装关闭电脑的防护软件,禁用计算机的网络连接(禁用网卡或者拔掉网线)打开安装包,打开“_SolidSQUAD_”目录解压“_SolidSQUAD_.7z”,运行其中的“SolidWorksSerialNumbers2016.reg”写入注册表信息运行“Setup.exe”开始安装选择“......
  • 深入理解 python 虚拟机:字节码教程(3)——深入剖析循环实现原理
    深入理解python虚拟机:字节码教程(3)——深入剖析循环实现原理在本篇文章当中主要给大家介绍cpython当中跟循环相关的字节码,这部分字节码相比起其他字节码来说相对复杂一点,通过分析这部分字节码我们对程序的执行过程将会有更加深刻的理解。循环普通for循环实现原理我们使......
  • Centos 服务器放行TCP、UDP端口教程
     在运行CentOS操作系统时,经常需要放行某个端口,以便应用程序能够正常运行。今天飞飞将和你分享centos服务器放行tcp、udp端口教程,希望可以帮助到您~ 首先用SSH连接工具连接服务器,如果你不知道如何连接Linux服务器,可以参考下这篇教程 比如我们在安装宝塔后面板无法访问,提......
  • Ubuntu一站式安装配置教程
    首先安装VMwareworkstation16PROVMware下载地址:https://customerconnect.vmware.com/cn/downloads/details?downloadGroup=WKST-1625-WIN&productId=1038下载完毕后,点开VMware-workstation-full-16.2.5-20904516然后选择你要安装的位置,所有配置完成后,直接点击安装即......
  • ERP进销存软件系统 电脑端 手机端 小程序通用(教程)
    ERP(EnterpriseResourcePlanning)即企业资源计划。 可以电脑端 手机端 小程序 数据同步  多账户 使用ERP进销存软件系统网址 https://erp.776KD.com财务管理  仓库管理  商品管理  销售单管理 库存明细 采购管理 支持打印机打印ERP进销存系统的特点......
  • 亲测一份PHP在线客服系统源码-thinkphp+workerman开发-网上流传最广的客服源码搭建教
    为了帮一个客户修改自己的客服系统,所以把源码在本地搭建了一下。因为,我本身就是使用golang有开发一款客服系统的,本来不愿意看这种旧版本的PHP客服源码。但是客户那边需求很少,购买我的商务版感觉不合算,所以网上找了这一个客服源码,也是流传最广的一款PHP客服系统。当然这个源码有没......
  • mongodb基础教程
    知识点理解MongoDB的业务场景,熟悉MongoDB的简介,特点和体系结构,数据类型等.能够通过docker-compose创建并启动mongodb和mongo-express掌握MongoDB基本常用命令实现数据的CRUD掌握MongoDB的索引类型,索引管理,执行计划业务场景传统的关系型数据库(比如My......
  • Three.js教程:3D场景中插入新的几何体
    推荐:将NSDT场景编辑器加入你3D工具链其他工具系列:NSDT简石数字孪生3D场景中插入新的几何体前面课程绘制了一个立方体效果,下面通过three.js的球体构造函数SphereGeometry()在三维场景中添加一个球几何体。SphereGeometry构造函数SphereGeometry(radius,widthSegments,height......
  • Creo Parametric 9.0 中文激活版安装包下载及 Creo Parametric 9.0 图文安装教程​
    CreoParametric就是PTC核心产品ProE的升级版本,是新一代Creo产品系列的参数化建模软件。通过灵活的工作流和顺畅的用户界面,允许直接建模、提供特征处理和智能捕捉,并使用几何预览,从而使用户能在实施变更之前看到变更的效果。%64%6f%63%73%2e%71%71%2e%63%6f%6d/%73%68%65%65%74/%44%......