本文章为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文章
17040浏览量
350511 -
led灯
+关注
关注
22文章
1592浏览量
107881 -
开发板
+关注
关注
25文章
4979浏览量
97272 -
GPIO
+关注
关注
16文章
1197浏览量
51968
原文标题:R128点灯指南
文章出处:【微信号:gh_79acfa3aa3e3,微信公众号:全志在线】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论