[经验分享] 2、板载RGB灯控制

xinmeng_wit   2022-3-6 21:29 楼主

RVB2601开发板上有一颗供用户使用的三色RGB灯,可以用它来熟悉GPIO的编程。

一、确定引脚

通过查看原理图,可以确定RGB灯的脚位,如下:

 

12.jpg

其实板载的RGB灯引脚做的非常灵活,并没有直接与MCU相连,而是接在了J3连接器上,因此可以通过跳线接在任意的MCU引脚上。

开发板出厂默认用跳线短接了J3的5脚和6脚,7脚和8脚;也就是,出厂默认LED_GREEN接在PA25,LED_BULE接在PA4,但是LED_RED并没有分配引脚,所有,如果想要使用红色LED灯,必须要手动跳线。当然最简单的方法是跳线帽短接PA7和LED_RED,将红色LED引脚分配到PA7。本次实验,我们就将红色LED接在PA7。

另外,也可以通过RVB2601开发板的用户手册看出来LED接在哪里,如下:

 

13.jpg

上面很容易就能看出三色LED接在J3连接器上。

 

二、接口分析

 

如果我们要控制LED的点亮和熄灭,就需要知道如何去操作gpio端口,可以通过官网的在线文档教程来寻找使用方法。

文档地址:https://yoc.docs.t-head.cn/yocbook/Chapter3-AliOS/CSI%E8%AE%BE%E5%A4%87%E9%A9%B1%E5%8A%A8%E6%8E%A5%E5%8F%A3/CSI2/GPIO_PIN.html#csigpiopinwrite

 

14.jpg

在文档GPIO_PIN设备这一节很详细描述了所有与GPIO_PIN设备相关的接口及使用方法。

 

如果只是控制LED的亮灭,只需要用到如下四个接口就可以了:

 

15.jpg

三、软件编程

直接在Helloworld例程上进行增加led的控制。

1、新建文件夹命令为led,然后在led文件夹下新建两个文件:led.c,led.h  ,如下:

 

16.jpg

2、调用接口进行端口初始化:

static void led_gpio_init()
{
    csi_pin_set_mux(PA4, PIN_FUNC_GPIO); //blue led
	csi_gpio_pin_init(&pin_blue_led, PA4);
    csi_gpio_pin_dir(&pin_blue_led, GPIO_DIRECTION_OUTPUT);
	csi_gpio_pin_mode(&pin_blue_led, GPIO_MODE_PUSH_PULL);
	csi_gpio_pin_write(&pin_blue_led, GPIO_PIN_HIGH);
	
	csi_pin_set_mux(PA7, PIN_FUNC_GPIO); //red led
	csi_gpio_pin_init(&pin_red_led, PA7);
    csi_gpio_pin_dir(&pin_red_led, GPIO_DIRECTION_OUTPUT);
	csi_gpio_pin_mode(&pin_red_led, GPIO_MODE_PUSH_PULL);
	csi_gpio_pin_write(&pin_red_led, GPIO_PIN_HIGH);
	
	csi_pin_set_mux(PA25, PIN_FUNC_GPIO); //green led
	csi_gpio_pin_init(&pin_green_led, PA25);
    csi_gpio_pin_dir(&pin_green_led, GPIO_DIRECTION_OUTPUT);
	csi_gpio_pin_mode(&pin_green_led, GPIO_MODE_PUSH_PULL);
	csi_gpio_pin_write(&pin_green_led, GPIO_PIN_HIGH);
}

3、编写流水灯程序

循环点亮LED灯:

void led_flash(void)
{
	static led_control = 0;
	
	if(led_control == 0)//red led on
	{
		csi_gpio_pin_write(&pin_blue_led, GPIO_PIN_HIGH);
		csi_gpio_pin_write(&pin_green_led, GPIO_PIN_HIGH);
		csi_gpio_pin_write(&pin_red_led, GPIO_PIN_LOW);
		led_control = 1;
	}
	else if(led_control == 1)//green led on
	{
		csi_gpio_pin_write(&pin_blue_led, GPIO_PIN_HIGH);
		csi_gpio_pin_write(&pin_red_led, GPIO_PIN_HIGH);
		csi_gpio_pin_write(&pin_green_led, GPIO_PIN_LOW);
		led_control = 2;
	}
	else if(led_control == 2)//blue led on
	{
		csi_gpio_pin_write(&pin_red_led, GPIO_PIN_HIGH);
		csi_gpio_pin_write(&pin_green_led, GPIO_PIN_HIGH);
		csi_gpio_pin_write(&pin_blue_led, GPIO_PIN_LOW);
		led_control = 0;
	}
}

4、指定头文件包含路径:

 

17.jpg

编译下载,三色LED轮流闪烁,完全符合预期。

 

本帖最后由 xinmeng_wit 于 2022-3-6 21:30 编辑

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复