本文章為DshanMCU-R128s2-DEVKIT應用開發案例,本文案例(點亮一顆 LED 燈)代碼可以到全志在線-在線文檔或者復制鏈接前往下載。
首先我們搭建電路,如下:
載入方案
我們使用的開發板是 DshanMCU-R128s2-DEVKIT,需要開發 C906 核心的應用程序,所以載入方案選擇r128s2_module_c906
$ source envsetup.sh $ lunch_rtos 1
勾選GPIO驅動
mrtos_menuconfig找到下列驅動
Drivers Options ---> soc related device drivers ---> GPIO devices ---> [*] enable GPIO driver [*] enbale GPIO hal APIs Test command
編寫程序
打開你喜歡的編輯器,修改文件:lichee/rtos/projects/r128s2/module_c906/src/main.c
引入頭文件
#include
使用GPIO配置引腳
1.配置 GPIO 的上下拉狀態
使用 hal_gpio_set_pull(gpio_pin_t pin, gpio_pull_status_t pull);來設置。這里我們設置 PA18 引腳為默認上拉狀態。
hal_gpio_set_pull(GPIOA(18), GPIO_PULL_UP);
2.配置 GPIO 輸入輸出模式
使用 hal_gpio_set_direction(gpio_pin_t pin, gpio_direction_t direction);來設置 GPIO 的輸入輸出模式,這里配置為輸出模式。
hal_gpio_set_direction(GPIOA(18), GPIO_DIRECTION_OUTPUT);
3.配置 GPIO 的 MUX 功能
GPIO 通常有多種功能,需要配置 MUX 選擇需要的功能,使用hal_gpio_pinmux_set_function(gpio_pin_t pin, gpio_muxsel_t function_index);來設置 GPIO 的復用功能,這里配置為GPIO 輸出模式(GPIO_MUXSEL_OUT)
hal_gpio_pinmux_set_function(GPIOA(18), GPIO_MUXSEL_OUT);
4.配置 GPIO 的電平
使用hal_gpio_set_data(gpio_pin_t pin, gpio_data_t data);來配置 GPIO 的電平,這里配置PA18為高電平點亮 LED
hal_gpio_set_data(GPIOA(18), GPIO_DATA_HIGH);
5.完整的配置 GPIO
hal_gpio_set_pull(GPIOA(18), GPIO_PULL_UP); // 配置 GPIO 的上下拉狀態 hal_gpio_set_direction(GPIOA(18), GPIO_DIRECTION_OUTPUT); // 配置 GPIO 輸入輸出模式 hal_gpio_pinmux_set_function(GPIOA(18), GPIO_MUXSEL_OUT); // 配置 GPIO 的 MUX 功能 hal_gpio_set_data(GPIOA(18), GPIO_DATA_HIGH); // 配置 GPIO 的電平
以此類推,我們同時配置PA18,PA13,PA12的 GPIO
hal_gpio_set_pull(GPIOA(18), GPIO_PULL_UP); hal_gpio_set_direction(GPIOA(18), GPIO_DIRECTION_OUTPUT); hal_gpio_pinmux_set_function(GPIOA(18), GPIO_MUXSEL_OUT); hal_gpio_set_data(GPIOA(18), GPIO_DATA_HIGH); hal_gpio_set_pull(GPIOA(13), GPIO_PULL_UP); hal_gpio_set_direction(GPIOA(13), GPIO_DIRECTION_OUTPUT); hal_gpio_pinmux_set_function(GPIOA(13), GPIO_MUXSEL_OUT); hal_gpio_set_data(GPIOA(13), GPIO_DATA_HIGH); hal_gpio_set_pull(GPIOA(12), GPIO_PULL_UP); hal_gpio_set_direction(GPIOA(12), GPIO_DIRECTION_OUTPUT); hal_gpio_pinmux_set_function(GPIOA(12), GPIO_MUXSEL_OUT); hal_gpio_set_data(GPIOA(12), GPIO_DATA_HIGH);
結果
編譯固件后燒錄,可以看到三色 LED 燈同時亮起。
流水燈
為了實現流水燈,我們先實現一個sleep函數
static inline int msleep(int ms) { vTaskDelay(ms / portTICK_RATE_MS); }
然后實現流水燈邏輯即可,之前已經設置過的GPIO狀態不需要重復設置。
while (1) { hal_gpio_set_data(GPIOA(18), GPIO_DATA_HIGH); hal_gpio_set_data(GPIOA(13), GPIO_DATA_LOW); hal_gpio_set_data(GPIOA(12), GPIO_DATA_LOW); msleep(100); hal_gpio_set_data(GPIOA(18), GPIO_DATA_LOW); hal_gpio_set_data(GPIOA(13), GPIO_DATA_HIGH); hal_gpio_set_data(GPIOA(12), GPIO_DATA_LOW); msleep(100); hal_gpio_set_data(GPIOA(18), GPIO_DATA_LOW); hal_gpio_set_data(GPIOA(13), GPIO_DATA_LOW); hal_gpio_set_data(GPIOA(12), GPIO_DATA_HIGH); msleep(100); }
審核編輯:湯梓紅
-
mcu
+關注
關注
146文章
17123瀏覽量
350994 -
led燈
+關注
關注
22文章
1592瀏覽量
107951 -
開發板
+關注
關注
25文章
5032瀏覽量
97375 -
GPIO
+關注
關注
16文章
1204瀏覽量
52055
原文標題:R128點燈指南
文章出處:【微信號:gh_79acfa3aa3e3,微信公眾號:全志在線】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論