今天開始學習RGB交替閃爍。
這是一個最基本的io口控制例程??吹紸B32VG1編寫的內(nèi)容,感覺有些地方不懂,后面再說?,F(xiàn)在先記錄整個學習過程。
1.查看硬件電路結(jié)構(gòu)
這里采用了header4×2來轉(zhuǎn)接一下。便于胸口復用。
2.軟件設計與編寫
可以看到LED是低電平使能,在相應的io口輪次輸出0,使得LED點亮。
獲得LED
設置pin模式,
輪次輸出相應電平,點亮或熄滅相應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");
// 設置引腳為輸出方式
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:對應亮,on=0:對應滅
//紅燈驅(qū)動
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);
}
}
//藍燈驅(qū)動
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ū)動
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();
}
}
//這個函數(shù)不太明白是做什么的,應該是線程控制函數(shù),不知道哪里有相應的教程可以看到
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);
}
然后看到該同學還設置了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_ */
不太明白為什么要做這個,是為了以后擴展用?
修改主函數(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);
}
}
該同學把原來的按鍵控制刪掉后,給了兩個mdelay();不明白為什么要這樣寫。
3.執(zhí)行downloader
實現(xiàn)功能。
看完了這個學習,感覺疑惑還是很多,
有關于系統(tǒng)本身的,也有關于這位同學的編寫代碼內(nèi)容的。可是獨學而無友,則孤陋而寡聞。
多向各位大佬學習。
爭取能夠看明白。
還有這個編輯界面不知道為什么無法直接在word中直接粘貼復制。
難道是需要排版才行?
ymf
-
電路
+關注
關注
172文章
5945瀏覽量
172583 -
操作系統(tǒng)
+關注
關注
37文章
6859瀏覽量
123496 -
中科藍訊
+關注
關注
9文章
57瀏覽量
9906
發(fā)布評論請先 登錄
相關推薦
評論