今天開(kāi)始學(xué)習(xí)RGB交替閃爍。
這是一個(gè)最基本的io口控制例程。看到AB32VG1編寫的內(nèi)容,感覺(jué)有些地方不懂,后面再說(shuō)?,F(xiàn)在先記錄整個(gè)學(xué)習(xí)過(guò)程。
1.查看硬件電路結(jié)構(gòu)
led接口電路
led接口電路2
這里采用了header4×2來(lái)轉(zhuǎn)接一下。便于胸口復(fù)用。
2.軟件設(shè)計(jì)與編寫
可以看到LED是低電平使能,在相應(yīng)的io口輪次輸出0,使得LED點(diǎn)亮。
獲得LED
設(shè)置pin模式,
輪次輸出相應(yīng)電平,點(diǎn)亮或熄滅相應(yīng)led
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");
}
//傳入?yú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);
}
}
下面要做的是使得led能夠循環(huán)工作。
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;
}
操作系統(tǒng)入口函數(shù)
void rgb_thread_entry(void* p)
{
RGB_Init();
while(1)
{
rt_thread_mdelay(500);
rgb_switch();
}
}
//這個(gè)函數(shù)不太明白是做什么的,應(yīng)該是線程控制函數(shù),不知道哪里有相應(yīng)的教程可以看到
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);
}
然后看到該同學(xué)還設(shè)置了key.h函數(shù)。
//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_ */
不太明白為什么要做這個(gè),是為了以后擴(kuò)展用?
修改主函數(shù)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);
}
}
該同學(xué)把原來(lái)的按鍵控制刪掉后,給了兩個(gè)mdelay();不明白為什么要這樣寫。
3.執(zhí)行downloader
實(shí)現(xiàn)功能。
看完了這個(gè)學(xué)習(xí),感覺(jué)疑惑還是很多,
有關(guān)于系統(tǒng)本身的,也有關(guān)于這位同學(xué)的編寫代碼內(nèi)容的??墒仟?dú)學(xué)而無(wú)友,則孤陋而寡聞。
多向各位大佬學(xué)習(xí)。
爭(zhēng)取能夠看明白。
還有這個(gè)編輯界面不知道為什么無(wú)法直接在word中直接粘貼復(fù)制。
難道是需要排版才行?
ymf
-
電路
+關(guān)注
關(guān)注
173文章
6077瀏覽量
178443 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7402瀏覽量
129346 -
中科藍(lán)訊
+關(guān)注
關(guān)注
10文章
66瀏覽量
10672
發(fā)布評(píng)論請(qǐng)先 登錄
嵌入式單片機(jī)開(kāi)發(fā)學(xué)習(xí)路徑
《機(jī)智云Gokit3開(kāi)發(fā)篇》4 RGB燈的介紹與驅(qū)動(dòng)移植(HAL庫(kù))
經(jīng)典 PLC 程序(5) - 閃爍燈
TUSB5461-Q1:汽車類DisplayPort交替模式轉(zhuǎn)接驅(qū)動(dòng)開(kāi)關(guān)的卓越之選
光纜怎么分ab端
RT-Thread支持STM32H723VG芯片嗎?
【創(chuàng)龍TLT113-MiniEVM開(kāi)發(fā)板試用體驗(yàn)】T113開(kāi)發(fā)板LED閃爍控制終極教程
【沁恒CH585開(kāi)發(fā)板免費(fèi)試用體驗(yàn)】+點(diǎn)亮RGB彩燈
【BPI-CanMV-K230D-Zero開(kāi)發(fā)板體驗(yàn)】+燈效控制與Python編程
RT-Thread支持STM32H723VG芯片嗎?
X1G0054910008,VG7050EFN差分晶振,EPSON尋呼機(jī)6G晶振
愛(ài)普生VG3225EFN壓控晶振5G基站低噪聲的解決方案
愛(ài)普生壓控晶振 VG7050CDN(X1G004861)在 5G 通信基站中的應(yīng)用
DS1265AB adi
跟AB32VG1開(kāi)發(fā)學(xué)習(xí)RGB交替閃爍
評(píng)論