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


    点亮一颗 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
    
    • 1
    • 2

    在这里插入图片描述

    勾选 GPIO 驱动

    mrtos_menuconfig 找到下列驱动

    Drivers Options  --->
        soc related device drivers  --->
                GPIO devices --->
                    [*] enable GPIO driver
                    [*] enbale GPIO hal APIs Test command
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    编写程序

    打开你喜欢的编辑器,修改文件:lichee/rtos/projects/r128s2/module_c906/src/main.c

    在这里插入图片描述

    引入头文件

    #include 
    
    • 1

    在这里插入图片描述

    使用 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);
    
    • 1
    配置 GPIO 输入输出模式

    使用 hal_gpio_set_direction(gpio_pin_t pin, gpio_direction_t direction); 来设置 GPIO 的输入输出模式,这里配置为输出模式。

    hal_gpio_set_direction(GPIOA(18), GPIO_DIRECTION_OUTPUT);
    
    • 1
    配置 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);
    
    • 1
    配置 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);
    
    • 1
    完整的配置 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 的电平
    
    • 1
    • 2
    • 3
    • 4

    以此类推,我们同时配置 PA18PA13PA12 的 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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    结果

    编译固件后烧录,可以看到三色 LED 灯同时亮起。

    在这里插入图片描述

    流水灯

    为了实现流水灯,我们先实现一个 sleep 函数

    static inline int msleep(int ms) {
        vTaskDelay(ms / portTICK_RATE_MS); 
    }
    
    • 1
    • 2
    • 3

    然后实现流水灯逻辑即可,之前已经设置过的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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    原贴链接:https://bbs.aw-ol.com/topic/4355/
    资源获取、问题讨论可以到全志在线开发者社区进行:https://www.aw-ol.com
    全志及开发者最新动态可以关注全志在线微信公众号

  • 相关阅读:
    Upload-labs(1-21关详细教程)【简单易懂】【万字教程】
    windows server安装mysql后公司区域网连接
    总被误解的“零信任”,有哪些关键技术?
    C#:实现鸡尾酒定向冒泡排序算法(附完整源码)
    (一)Spring启示录
    ssh无法登录远程服务器
    ChatGPT AIGC 实现Excel 交叉查找 Index+match 函数
    代码随想录算法刷题训练营day24:LeetCode(77)组合
    强化学习之Dueling DQN对DQN的改进——以倒立摆环境(Inverted Pendulum)为例
    L7.linux命令每日一练 -- 第二章 文件和目录操作命令 -- cp和mv命令
  • 原文地址:https://blog.csdn.net/weixin_43094346/article/details/133694414