打印
[RISC-V MCU 应用开发]

【全志R128】应用开发案例——点亮一颗 LED 灯

[复制链接]
2189|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
神棍地海棠|  楼主 | 2023-10-9 10:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
点亮一颗 LED 灯
本文案例代码
下载地址

点亮一颗 LED 灯案例代码https://www.aw-ol.com/downloads?cat=24
首先我们搭建电路,如下:
引脚
LED

PA18红色 LED
PA13绿色 LED
PA12黄色 LED载入方案
我们使用的开发板是 R128-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 <hal_gpio.h>
    使用 GPIO 配置引脚配置 GPIO 的上下拉状态
    使用 hal_gpio_set_pull(gpio_pin_t pin, gpio_pull_status_t pull); 来设置。这里我们设置 PA18 引脚为默认上拉状态。
    hal_gpio_set_pull(GPIOA(18), GPIO_PULL_UP);配置 GPIO 输入输出模式
    使用 hal_gpio_set_direction(gpio_pin_t pin, gpio_direction_t direction); 来设置 GPIO 的输入输出模式,这里配置为输出模式。
    hal_gpio_set_direction(GPIOA(18), GPIO_DIRECTION_OUTPUT);配置 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);配置 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);完整的配置 GPIOhal_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);}

  • 使用特权

    评论回复

    相关帖子

    沙发
    pattywu| | 2023-12-5 13:46 | 只看该作者
    代码也不好好编辑一下,没人看的。

    使用特权

    评论回复
    发新帖 我要提问
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    262

    主题

    270

    帖子

    0

    粉丝