野火STM32F103VET6指南者开发板入门笔记:【1】点亮RGB(基于结构体)


硬件介绍

提示:本文是基于野火STM32F103指南者开发板所写例程,其他开发板请自行移植到自己的工程项目当中即可。

RGB-LEDPin引脚:低电平-点亮,高电平-熄灭
REDPB5
GREENPB0
BLUEPB1

硬件原理图


软件介绍:结构体方式 ①

在这里插入图片描述

bsp_rgb.h 文件下的代码如下(示例):

#ifndef __BSP_RGB_H
#define __BSP_RGB_H

#include "stm32f10x.h"
#include "stdint.h" 

//定义一个RGB_GPIO_TypeDef类型的结构体,为了方便移植修改,将需要经常修改的参数放到结构体当中
typedef struct 
{
	uint32_t 		RCC_APB2Periph;	//APB2总线时钟
	GPIO_TypeDef* 	GPIOx;			//GPIO_PORT
	uint16_t 		GPIO_Pin;		//GPIO_PIN
}RGB_GPIO_TypeDef;					

//定义一个结构体数组并对其进行初始化
static RGB_GPIO_TypeDef RGB_GPIO_List[]=
{
	{RCC_APB2Periph_GPIOB, GPIOB, GPIO_Pin_5},
	{RCC_APB2Periph_GPIOB, GPIOB, GPIO_Pin_0},
	{RCC_APB2Periph_GPIOB, GPIOB, GPIO_Pin_1},
};

//计算结构体数组中结构体的个数
#define RGB_NUM_MAX (sizeof(RGB_GPIO_List)/sizeof(RGB_GPIO_List[0])) 

typedef enum
{ 
  GPIO_RGB_RED = 0,
  GPIO_RGB_GREEN, 
  GPIO_RGB_BLUE
}RGB;

void RGB_Init(void);
void TurnOnLed(uint8_t LedNum);
void TurnOffLed(uint8_t LedNum);
void ToggleLed(uint8_t LedNum);

#endif /* __BSP_RGB_H */

bsp_rgb.c 文件下的代码如下(示例):

#include "bsp_rgb.h"

void RGB_Init(void)
{
	uint8_t i = 0;
	GPIO_InitTypeDef GPIO_InitStructure;
	
	for(i = 0;i < RGB_NUM_MAX;i++)
	{
		RCC_APB2PeriphClockCmd(RGB_GPIO_List[i].RCC_APB2Periph,ENABLE);
		
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
		GPIO_InitStructure.GPIO_Pin = RGB_GPIO_List[i].GPIO_Pin;
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
		
		GPIO_Init(RGB_GPIO_List[i].GPIOx, &GPIO_InitStructure);
		//初始化RGB上电状态,熄灭
		GPIO_SetBits(RGB_GPIO_List[i].GPIOx,RGB_GPIO_List[i].GPIO_Pin);
	}	
}

void TurnOnLed(uint8_t LedNum)
{
	if(LedNum >= RGB_NUM_MAX)
		return;
	else
		GPIO_ResetBits(RGB_GPIO_List[LedNum].GPIOx,RGB_GPIO_List[LedNum].GPIO_Pin);
}

void TurnOffLed(uint8_t LedNum)
{
	if(LedNum >= RGB_NUM_MAX)
		return;
	else
		GPIO_SetBits(RGB_GPIO_List[LedNum].GPIOx,RGB_GPIO_List[LedNum].GPIO_Pin);
}

void ToggleLed(uint8_t LedNum)
{
	if(LedNum >= RGB_NUM_MAX)
		return;
	else
	{
		if(GPIO_ReadOutputDataBit(RGB_GPIO_List[LedNum].GPIOx,RGB_GPIO_List[LedNum].GPIO_Pin) == 1)
			GPIO_ResetBits(RGB_GPIO_List[LedNum].GPIOx,RGB_GPIO_List[LedNum].GPIO_Pin);
		else
			GPIO_SetBits(RGB_GPIO_List[LedNum].GPIOx,RGB_GPIO_List[LedNum].GPIO_Pin);
	}	
}

软件介绍:结构体方式 ②

bsp_rgb.h 文件下的代码如下(示例):

#ifndef __BSP_RGB_H
#define __BSP_RGB_H

#include "stm32f10x.h"              
#include "stdint.h"


#define RGB_RccPeriphClockCmd RCC_APB2PeriphClockCmd

typedef struct
{
	uint32_t 		RCC_APB2Periph;
	GPIO_TypeDef* 	GPIOx;
	uint16_t 		GPIO_Pin;
}RGB_GPIO_Typedef;

static RGB_GPIO_Typedef RGB_Drv_List[]=
{
	//RED
	{RCC_APB2Periph_GPIOA,GPIOA,GPIO_Pin_1},
	//GREEN
	{RCC_APB2Periph_GPIOA,GPIOA,GPIO_Pin_2},
	//BLUE
	{RCC_APB2Periph_GPIOA,GPIOA,GPIO_Pin_3}
};

#define RGB_NUM_MAX (sizeof(RGB_Drv_List)/sizeof(RGB_Drv_List[0]))
	
typedef enum
{ 
  RED = 0,
  GREEN = 1, 
  BLUE = 2
}RGB_Colour;

typedef enum
{
	OFF = 0,
	ON
}RGB_State;


void RGB_Drv_Init(void);
void RGB_Status(uint8_t RGB_Colour,uint8_t State);
void RGB_Toggle(uint8_t RGB_Colour);


#endif /* __BSP_RGB_H */

bsp_rgb.c 文件下的代码如下(示例):

#include "bsp_rgb.h"


void RGB_Drv_Init(void)
{
	uint8_t i = 0;
	GPIO_InitTypeDef GPIO_InitStructer;
	
	for(i = 0; i < RGB_NUM_MAX; i++)
	{
		RGB_RccPeriphClockCmd(RGB_Drv_List[i].RCC_APB2Periph,ENABLE);
		
		GPIO_InitStructer.GPIO_Mode = GPIO_Mode_Out_PP;
		GPIO_InitStructer.GPIO_Pin  = RGB_Drv_List[i].GPIO_Pin;
		GPIO_InitStructer.GPIO_Speed = GPIO_Speed_50MHz;
		GPIO_Init(RGB_Drv_List[i].GPIOx,&GPIO_InitStructer);
		
		GPIO_SetBits(RGB_Drv_List[i].GPIOx,RGB_Drv_List[i].GPIO_Pin);
	}
}

void RGB_Status(uint8_t RGB_Colour,uint8_t State)
{
	if(RGB_Colour > RGB_NUM_MAX)
		return;
	else
	{
		if(State == OFF)
		{
			GPIO_ResetBits(RGB_Drv_List[RGB_Colour].GPIOx,RGB_Drv_List[RGB_Colour].GPIO_Pin);
		}
		else
		{
			GPIO_SetBits(RGB_Drv_List[RGB_Colour].GPIOx,RGB_Drv_List[RGB_Colour].GPIO_Pin);
		}
	}
}

void RGB_Toggle(uint8_t RGB_Colour)
{
	if(RGB_Colour > RGB_NUM_MAX)
		return;
	else	
	{
		if(GPIO_ReadOutputDataBit(RGB_Drv_List[RGB_Colour].GPIOx,RGB_Drv_List[RGB_Colour].GPIO_Pin) == (uint8_t)Bit_SET)
		{
			GPIO_ResetBits(RGB_Drv_List[RGB_Colour].GPIOx,RGB_Drv_List[RGB_Colour].GPIO_Pin);
		}
		else
		{
			GPIO_SetBits(RGB_Drv_List[RGB_Colour].GPIOx,RGB_Drv_List[RGB_Colour].GPIO_Pin);
		}
	}
}


软件介绍:宏定义方式

bsp_rgb.c 文件下的代码如下(示例):


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值