【安信可BW16-Kit】RGB流水彩灯
<div class='showpostmsg'> 本帖最后由 dirty 于 2024-1-28 22:35 编辑<p> 本篇讲述在SDK做应用,实现流水彩灯。</p>
<p>一.硬件原理</p>
<p> 开发板RGB灯连接PA12、PA14、PA13,高电平点亮。原理图如下:</p>
<div style="text-align: center;"></div>
<div style="text-align: center;">图1:RGB灯原理</div>
<p>二.代码准备</p>
<p> 首先对SDK整体框架要有一个初步了解。SDK使用FreeRTOS系统,部分功能通过宏使能调用。下面讲述流水灯实现代码。</p>
<p>1.引脚初始化。这里有宏定义引脚,注意pin脚每次初始化一个</p>
<pre>
<code>#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");
}</code></pre>
<p>2.创建任务,在任务里实现流水彩灯功能。三原色混色:R+G=黄色,G+B=青色,R+B=品红色,R+G+B=白色。</p>
<pre>
<code>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__);
}
</code></pre>
<p>3.在src_hp下main.c加入上述代码,在main函数加入任务创建函数</p>
<div style="text-align: center;"></div>
<div style="text-align: center;">图2:main加入任务创建</div>
<p>3.编译烧录</p>
<p> 初次编译,使用make clean 清理下,以后切换到相应路径下make all编译,生成的相应bin文件拷贝出用工具烧录即可。</p>
<p> </p>
<p>三.测验</p>
<p> 复位重启,可以看到如下日志,可以看出任务创建成功。</p>
<div style="text-align: center;"></div>
<div style="text-align: center;">图3:任务运行日志</div>
<p> </p>
<p> RGB流水彩灯也显示出来。效果视频与固件见文末。至此开发板应用初见成效。</p>
<p> </p>
<p>dbea3fd6f3a35f329103b4a2e4d3b29c<br />
</p>
<p> </p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>
页:
[1]