【RTT大賽作品連載】AB32VG1開發(fā)板——RGB交替閃爍
1. 實(shí)驗(yàn)?zāi)康?/strong>
讓板載 RGB 燈交替閃爍
2. 開發(fā)板硬件平臺(tái)
RGB燈硬件電路,可知,使用 RGB 燈組要使用
PE1 —— 紅
PA1 —— 藍(lán)
PE4 —— 綠
3. 軟件編寫
在 application 目錄下,新建 rgb.c 和 rgb.h
//rgb.c
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-11-06 Administrator the first version
*/
#include "rgb.h"
#include "rtthread.h"
#include "board.h"
struct Led_s
{
uint8_t LED_R;
uint8_t LED_B;
uint8_t LED_G;
}; // 定義一個(gè) RGB 結(jié)構(gòu)體
struct Led_s Led;
rt_thread_t rgb_thread = RT_NULL;
void RGB_Init(void)
{
// 獲得 led
Led.LED_R = rt_pin_get("PE.1");
Led.LED_G = rt_pin_get("PE.4");
Led.LED_B = rt_pin_get("PA.1");
// 設(shè)置引腳為輸出方式
rt_pin_mode(Led.LED_R, PIN_MODE_OUTPUT);
rt_pin_mode(Led.LED_G, PIN_MODE_OUTPUT);
rt_pin_mode(Led.LED_B, PIN_MODE_OUTPUT);
rt_kprintf("rgb init success\n");
}
//傳入參數(shù) on=1:對(duì)應(yīng)亮,on=0:對(duì)應(yīng)滅
//紅燈驅(qū)動(dòng)
void RGB_Red(rt_bool_t on)
{
rt_pin_write(Led.LED_G, PIN_HIGH);
rt_pin_write(Led.LED_B, PIN_HIGH);
if (on) {
rt_pin_write(Led.LED_R, PIN_LOW);
} else {
rt_pin_write(Led.LED_R, PIN_HIGH);
}
}
//藍(lán)燈驅(qū)動(dòng)
void RGB_Blue(rt_bool_t on){
rt_pin_write(Led.LED_G, PIN_HIGH);
rt_pin_write(Led.LED_R, PIN_HIGH);
if (on) {
rt_pin_write(Led.LED_B, PIN_LOW);
} else {
rt_pin_write(Led.LED_B, PIN_HIGH);
}
}
//綠燈驅(qū)動(dòng)
void RGB_Green(rt_bool_t on)
{
rt_pin_write(Led.LED_R, PIN_HIGH);
rt_pin_write(Led.LED_B, PIN_HIGH);
if (on) {
rt_pin_write(Led.LED_G, PIN_LOW);
} else {
rt_pin_write(Led.LED_G, PIN_HIGH);
}
}
void rgb_switch(void)
{
static uint8_t led_num = 0;
if(led_num == 0)
RGB_Red(1);
else if(led_num == 1)
RGB_Blue(1);
else if(led_num == 2)
RGB_Green(1);
led_num++;
if(led_num == 3)
led_num = 0;
}
void rgb_thread_entry(void* p)
{
RGB_Init();
while(1)
{
rt_thread_mdelay(500);
rgb_switch();
}
}
static int Thread_RGB(void)
{
rgb_thread = rt_thread_create("rgb", rgb_thread_entry, RT_NULL, 512, 10, 10);
if(rgb_thread == RT_NULL)
{
rt_kprintf("Thread_GRB Init ERROR");
return RT_ERROR;
}
rt_thread_startup(rgb_thread);
}
INIT_APP_EXPORT(Thread_RGB);
//rgb.h
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-11-06 Administrator the first version
*/
#ifndef APPLICATIONS_RGB_H_
#define APPLICATIONS_RGB_H_
#endif /* APPLICATIONS_RGB_H_ */
修改main.c
/*
* Copyright (c) 2020-2021, Bluetrum Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2020/12/10 greedyhao The first version
*/
/**
* Notice!
* All functions or data that are called during an interrupt need to be in RAM.
* You can do it the way exception_isr() does.
*/
#include
#include "board.h"
int main(void)
{
rt_kprintf("Hello, world\n");
while (1)
{
rt_thread_mdelay(500);
rt_thread_mdelay(500);
}
}
4. 程序編譯下載
編譯程序,點(diǎn)擊小錘子即可。
下載程序
打開我們下載的Downloader軟件,雙擊Downloader.exe
配置連接串口,千萬不要搞錯(cuò)串口號(hào)哦。
選擇工程目錄下的\Debug\rtthread.dcf,這里我的完整目錄是
D:\RT-ThreadStudio\workspace\ab32vg1_demo\Debug\rtthread.dcf
點(diǎn)擊開始即可下載成功
5. 實(shí)驗(yàn)現(xiàn)象:
download 串口打印 msh 控制臺(tái)信息。
板載RGB燈,紅色綠色藍(lán)色交替閃爍。
6. 總結(jié)
每一個(gè)偉大的程序員都要從 led 及 helloworld 開始,哈哈。
編輯:fqj
-
單片機(jī)
+關(guān)注
關(guān)注
6026文章
44455瀏覽量
630947 -
RTT
+關(guān)注
關(guān)注
0文章
64瀏覽量
17035 -
中科藍(lán)訊
+關(guān)注
關(guān)注
9文章
53瀏覽量
9823
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論