670|0

519

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

【安信可BW16-Kit】RGB流水彩灯 [复制链接]

本帖最后由 dirty 于 2024-1-28 22:35 编辑

        本篇讲述在SDK做应用,实现流水彩灯。

一.硬件原理

        开发板RGB灯连接PA12、PA14、PA13,高电平点亮。原理图如下:

图1:RGB灯原理

二.代码准备

        首先对SDK整体框架要有一个初步了解。SDK使用FreeRTOS系统,部分功能通过宏使能调用。下面讲述流水灯实现代码。

1.引脚初始化。这里有宏定义引脚,注意pin脚每次初始化一个

#include "device.h"

#define GPIO_RLED_PIN       _PA_12
#define GPIO_GLED_PIN       _PA_14
#define GPIO_BLED_PIN       _PA_13



#define RLED_ON				GPIO_WriteBit(GPIO_RLED_PIN, 1)
#define RLED_OFF			GPIO_WriteBit(GPIO_RLED_PIN, 0)

#define GLED_ON				GPIO_WriteBit(GPIO_GLED_PIN, 1)
#define GLED_OFF			GPIO_WriteBit(GPIO_GLED_PIN, 0)

#define BLED_ON				GPIO_WriteBit(GPIO_BLED_PIN, 1)
#define BLED_OFF			GPIO_WriteBit(GPIO_BLED_PIN, 0)

#define ALL_LED_ON			{RLED_ON;GLED_ON;BLED_ON;}
#define ALL_LED_OFF			{RLED_OFF;GLED_OFF;BLED_OFF;}

void user_gpio_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct_LED;
	
	// GPIO_InitStruct_LED.GPIO_Pin = GPIO_RLED_PIN|GPIO_GLED_PIN|GPIO_BLED_PIN;
	// GPIO_InitStruct_LED.GPIO_Mode = GPIO_Mode_OUT;
	// GPIO_InitStruct_LED.GPIO_PuPd=GPIO_PuPd_NOPULL;
	// GPIO_Init(&GPIO_InitStruct_LED);

	/* Init LED control pin.Attention can not use '|' between pins onece a time *、
	GPIO_InitStruct_LED.GPIO_Pin = GPIO_RLED_PIN;
	GPIO_InitStruct_LED.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStruct_LED.GPIO_PuPd=GPIO_PuPd_NOPULL;
	GPIO_Init(&GPIO_InitStruct_LED);

	GPIO_InitStruct_LED.GPIO_Pin = GPIO_GLED_PIN;
	GPIO_InitStruct_LED.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStruct_LED.GPIO_PuPd=GPIO_PuPd_NOPULL;
	GPIO_Init(&GPIO_InitStruct_LED);

	GPIO_InitStruct_LED.GPIO_Pin = GPIO_BLED_PIN;
	GPIO_InitStruct_LED.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStruct_LED.GPIO_PuPd =GPIO_PuPd_NOPULL;
	GPIO_Init(&GPIO_InitStruct_LED);


	ALL_LED_OFF;

	printf("RGB pin init\r\n");
	
}

2.创建任务,在任务里实现流水彩灯功能。三原色混色:R+G=黄色,G+B=青色,R+B=品红色,R+G+B=白色。

void led_task(void *param)
{
	uint8_t shift=0;
	
	user_gpio_init();

	while(1)
	{
	        /* 功能执行 */
        switch(shift)
        {
            case 0: //OFF
                ALL_LED_OFF;
                printf("LED OFF\r\n");
            break;
           
            case 1: //R
                RLED_ON;
				GLED_OFF;
				BLED_OFF;
                printf("LED red\r\n");
            break;
            
            case 2: //G
                RLED_OFF;
				GLED_ON;
				BLED_OFF;
                printf("LED green\r\n");
            break;
            
            case 3: //B
                RLED_OFF;
				GLED_OFF;
				BLED_ON;
                printf("LED blue\r\n");
            break;
            
            case 4://R+G
                RLED_ON;
				GLED_ON;
				BLED_OFF;
                printf("LED orange\r\n");
            break;

            case 5: //G+B
                RLED_OFF;
				GLED_ON;
				BLED_ON;
                printf("LED cyan\r\n");
            break;
            
            case 6: //R+B
                RLED_ON;
				GLED_OFF;
				BLED_ON;
                printf("LED magenta\r\n");
                
            break;
            
            
            case 7: //R+G+B
                ALL_LED_ON;
                printf("LED white\r\n");
            break;
            
            default:
                printf("No This Situation Process\r\n");
            break;
            
        }
        
        if(shift<7)
        {
           shift++; 
        }
        else
        {
            shift=0; 
        }
        
        vTaskDelay(2000);

	}
	
}

void user_rtos_init(void)
{
	if(xTaskCreate(led_task, ((const char*)"led_task"), 1024, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS)
		printf("\n\r%s xTaskCreate(init_thread) failed", __FUNCTION__);
}

3.在src_hp下main.c加入上述代码,在main函数加入任务创建函数

图2:main加入任务创建

3.编译烧录

        初次编译,使用make clean 清理下,以后切换到相应路径下make all编译,生成的相应bin文件拷贝出用工具烧录即可。

 

三.测验

        复位重启,可以看到如下日志,可以看出任务创建成功。

图3:任务运行日志

         

        RGB流水彩灯也显示出来。效果视频与固件见文末。至此开发板应用初见成效。

 

RGB_Display

 

 

rgb_bin.rar

387.24 KB, 下载次数: 2

rgb流水彩灯固件

此帖出自无线连接论坛
点赞 关注
个人签名

保持热爱

 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表