导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

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

    A Series
    r128开发指南
    1
    1
    1289
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • livpo
      livpo LV 6 最后由 q1215200171 编辑

      基于R128-S2设计的全套开发板已上线淘宝百问网韦东山老师个人店进行售卖,包含黑色的DshanMCU-R128s2-R16N16模组和全套的DshanMCU-R128s2-DEVKIT。

      • DshanMCU-R128s2-R16N16模组:39.9元
      • DshanMCU-R128s2-DEVKIT开发板:59.9元

      R128开发板购买链接:https://item.taobao.com/item.htm?spm=a21n57.1.0.0.46b0523cMfarLo&id=736154682975&ns=1&abbucket=5#detail

      “主图_01”为智能对象-1.jpg

      点亮一颗 LED 灯

      本文案例代码 下载地址
      点亮一颗 LED 灯案例代码 https://www.aw-ol.com/downloads?cat=24

      首先我们搭建电路,如下:

      840BF3F7B6CB5E82808FF0DE2BF2E083.png

      引脚 LED
      PA18 红色 LED
      PA13 绿色 LED
      PA12 黄色 LED

      载入方案

      我们使用的开发板是 R128-Devkit,需要开发 C906 核心的应用程序,所以载入方案选择r128s2_module_c906

      $ source envsetup.sh 
      $ lunch_rtos 1
      

      image-20230802110150203.png

      勾选 GPIO 驱动

      mrtos_menuconfig 找到下列驱动

      Drivers Options  --->
          soc related device drivers  --->
                  GPIO devices --->
                      [*] enable GPIO driver
                      [*] enbale GPIO hal APIs Test command
      

      image-20230803111740921.png

      编写程序

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

      image-20230803112142315.png

      引入头文件

      #include <hal_gpio.h>
      

      image-20230803112159250.png

      使用 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);
      

      完整的配置 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 灯同时亮起。

      image-20230803112914576.png

      流水灯

      为了实现流水灯,我们先实现一个 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);
      }
      

      9E9A18F0EF91DCE086CBA812EF9E2ECA.png

      1 条回复 最后回复 回复 引用 分享 4
      • 1 / 1
      • First post
        Last post

      Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

      行为准则 | 用户协议 | 隐私权政策