dirty 发表于 2024-1-28 22:16

【安信可BW16-Kit】RGB流水彩灯

<div class='showpostmsg'> 本帖最后由 dirty 于 2024-1-28 22:35 编辑

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本篇讲述在SDK做应用,实现流水彩灯。</p>

<p>一.硬件原理</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;开发板RGB灯连接PA12、PA14、PA13,高电平点亮。原理图如下:</p>

<div style="text-align: center;"></div>

<div style="text-align: center;">图1:RGB灯原理</div>

<p>二.代码准备</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp; 首先对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(&amp;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(&amp;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(&amp;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(&amp;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&lt;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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;初次编译,使用make clean 清理下,以后切换到相应路径下make all编译,生成的相应bin文件拷贝出用工具烧录即可。</p>

<p>&nbsp;</p>

<p>三.测验</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;复位重启,可以看到如下日志,可以看出任务创建成功。</p>

<div style="text-align: center;"></div>

<div style="text-align: center;">图3:任务运行日志</div>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>

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

<p>&nbsp;</p>

<p>dbea3fd6f3a35f329103b4a2e4d3b29c<br />
&nbsp;</p>

<p>&nbsp;</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]
查看完整版本: 【安信可BW16-Kit】RGB流水彩灯