Pegasus开发环境
  IZ8AQbsbCmac 2023年11月19日 46 0

Pegasus开发环境

HUAWEI DevEco Device Tool

以插件的形式部署在Visual Studio Code上

开发环境部署

步骤1 安装 vs code

Visual Studio Code - Code Editing. Redefined

步骤2 DecEco Device Tool 下载安装

华为集成开发环境IDE DevEco Device Tool下载 | HarmonyOS设备开发

  • 解压后安装
  • 选择安装路径

安装完成后打开vs code可以发现扩展图标

Pegasus开发环境_嵌入式

步骤3 下载Hi3861 Openharmony SDK

gitee.com/wgm2022/hi3…

步骤4 下载开发者工具

hispark.obs.cn-east-3.myhuaweicloud.com/DevTools_Hi…

解压后目录

Pegasus开发环境_Code_02

步骤5 工程管理配置

1. 打开DevEco Device Tool 主页 导入工程

Pegasus开发环境_嵌入式_03

2. 选择Hi3861 Openharmony SDK目录

Pegasus开发环境_spark_04

3. 芯片选型

SOC栏选择Hi3861, 开发板选择hi3861, 框架栏选择Hb

Pegasus开发环境_Code_05

4. 进行后续代码开发、编译、烧录

Pegasus相关代码路径:

hi3861_for_AI_topic-master\src\vendor\hisilicon\hispark_pegasus\demo\

步骤6 编译、烧录

1. 配置开发工具路径

点击工程配置,配置compiler_bin_path选项为下载好的开发工具目录

Pegasus开发环境_Code_06

2. 编译

Pegasus开发环境_#include_07

3. 烧录

连接设备后,选择对应的COM

Pegasus开发环境_Code_08

烧录

Pegasus开发环境_#include_09

测试程序-led闪烁

1. 创建子模块文件夹

在hi3861_for_AI_topic-master\src\applications\sample\wifi-iot\app目录下创建led_demo文件夹

2. 子模块程序编写

led_demo文件夹中的文件结构如下

Pegasus开发环境_Code_10

  • app_demo_led_control.c
#include <stdio.h>
#include <unistd.h>
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "iot_gpio.h"
#include "iot_watchdog.h"
#include "hi_io.h"


#define IOT_GPIO_IDX_10 9 // for hispark_pegasus

static void *LedCntrolDemo(const char *arg)
{
    (void)arg;
    printf("LedTask start\r\n");
    // 配置GPIO引脚号和输出值
    while(1){
        IoTGpioSetOutputVal(IOT_GPIO_IDX_10, IOT_GPIO_VALUE1);
        TaskMsleep(800);
        IoTGpioSetOutputVal(IOT_GPIO_IDX_10, IOT_GPIO_VALUE0);
        TaskMsleep(800);
    }
    return NULL;
}

static void LedControlTask(void)
{
    osThreadAttr_t attr;
    // 初始化GPIO
    IoTGpioInit(IOT_GPIO_IDX_10);
    // 设置GPIO为输出方向
    IoTGpioSetDir(IOT_GPIO_IDX_10, IOT_GPIO_DIR_OUT);

    attr.name = "LedCntrolDemo";
    attr.attr_bits = 0U;
    attr.cb_mem = NULL;
    attr.cb_size = 0U;
    attr.stack_mem = NULL;
    attr.stack_size = 1024; /* 堆栈大小为1024 */
    attr.priority = osPriorityNormal;
    // 报错
    if (osThreadNew((osThreadFunc_t)LedCntrolDemo, NULL, &attr) == NULL) {
        printf("[LedExample] Failed to create LedTask!\n");
    }
}

SYS_RUN(LedControlTask);
  • hal_iot_gpio_ex.c
#include "iot_errno.h"
#include "iot_gpio_ex.h"
#include "hi_gpio.h"
#include "hi_io.h"
#include "hi_task.h"
#include "hi_types_base.h"

unsigned int IoSetPull(unsigned int id, IotIoPull val)
{
    if (id >= HI_GPIO_IDX_MAX) {
        return IOT_FAILURE;
    }
    return hi_io_set_pull((hi_io_name)id, (hi_io_pull)val);
}

unsigned int IoSetFunc(unsigned int id, unsigned char val)
{
    if (id >= HI_GPIO_IDX_MAX) {
        return IOT_FAILURE;
    }
    return hi_io_set_func((hi_io_name)id, val);
}

unsigned int TaskMsleep(unsigned int ms)
{
    if (ms <= 0) {
        return IOT_FAILURE;
    }
    return hi_sleep((hi_u32)ms);
}
  • iot_gpio_ex.h
#ifndef IOT_GPIO_EX_H
#define IOT_GPIO_EX_H

/**
 * @file iot_gpio_ex.h
 *
 * @brief Declares the extended GPIO interface functions.
 *
 * These functions are used for settings GPIO pulls and driver strength. \n
 *
 * @since 1.0
 * @version 1.0
 */

/**
 * @brief Enumerates GPIO pull-up or pull-down settings.
 */
typedef enum {
    /** No pull */
    IOT_IO_PULL_NONE,
    /** Pull-up */
    IOT_IO_PULL_UP,
    /** Pull-down */
    IOT_IO_PULL_DOWN,
    /** Maximum value */
    IOT_IO_PULL_MAX,
} IotIoPull;

/**
 * @ingroup iot_io
 *
 * GPIO pin ID. CNcomment:IO硬件管脚编号。CNend
 */
typedef enum {
    IOT_IO_NAME_GPIO_0, /* <GPIO0 */
    IOT_IO_NAME_GPIO_1, /* <GPIO1 */
    IOT_IO_NAME_GPIO_2, /* <GPIO2 */
    IOT_IO_NAME_GPIO_3, /* <GPIO3 */
    IOT_IO_NAME_GPIO_4, /* <GPIO4 */
    IOT_IO_NAME_GPIO_5, /* <GPIO5 */
    IOT_IO_NAME_GPIO_6, /* <GPIO6 */
    IOT_IO_NAME_GPIO_7, /* <GPIO7 */
    IOT_IO_NAME_GPIO_8, /* <GPIO8 */
    IOT_IO_NAME_GPIO_9, /* <GPIO9 */
    IOT_IO_NAME_GPIO_10, /* <GPIO10 */
    IOT_IO_NAME_GPIO_11, /* <GPIO11 */
    IOT_IO_NAME_GPIO_12, /* <GPIO12 */
    IOT_IO_NAME_GPIO_13, /* <GPIO13 */
    IOT_IO_NAME_GPIO_14, /* <GPIO14 */
    IOT_IO_NAME_SFC_CSN, /* <SFC_CSN */
    IOT_IO_NAME_SFC_IO1, /* <SFC_IO1 */
    IOT_IO_NAME_SFC_IO2, /* <SFC_IO2 */
    IOT_IO_NAME_SFC_IO0, /* <SFC_IO0 */
    IOT_IO_NAME_SFC_CLK, /* <SFC_CLK */
    IOT_IO_NAME_SFC_IO3, /* <SFC_IO3 */
    IOT_IO_NAME_MAX,
} IotIoName;

/**
 * @ingroup iot_io
 *
 * GPIO_0 pin function.CNcomment:GPIO_0管脚功能。CNend
 */
typedef enum {
    IOT_IO_FUNC_GPIO_0_GPIO,
    IOT_IO_FUNC_GPIO_0_UART1_TXD = 2,
    IOT_IO_FUNC_GPIO_0_SPI1_CK,
    IOT_IO_FUNC_GPIO_0_JTAG_TDO,
    IOT_IO_FUNC_GPIO_0_PWM3_OUT,
    IOT_IO_FUNC_GPIO_0_I2C1_SDA,
} IotIoFuncGpio0;

/**
* @ingroup iot_io
*
* GPIO_1 pin function.CNcomment:GPIO_1管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_GPIO_1_GPIO,
    IOT_IO_FUNC_GPIO_1_UART1_RXD = 2,
    IOT_IO_FUNC_GPIO_1_SPI1_RXD,
    IOT_IO_FUNC_GPIO_1_JTAG_TCK,
    IOT_IO_FUNC_GPIO_1_PWM4_OUT,
    IOT_IO_FUNC_GPIO_1_I2C1_SCL,
    IOT_IO_FUNC_GPIO_1_BT_FREQ,
} IotIoFuncGpio1;

/**
* @ingroup iot_io
*
* GPIO_2 pin function.CNcomment:GPIO_2管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_GPIO_2_GPIO,
    IOT_IO_FUNC_GPIO_2_UART1_RTS_N = 2,
    IOT_IO_FUNC_GPIO_2_SPI1_TXD,
    IOT_IO_FUNC_GPIO_2_JTAG_TRSTN,
    IOT_IO_FUNC_GPIO_2_PWM2_OUT,
    IOT_IO_FUNC_GPIO_2_SSI_CLK = 7,
} IotIoFuncGpio2;

/**
* @ingroup iot_io
*
* GPIO_3 pin function.CNcomment:GPIO_3管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_GPIO_3_GPIO,
    IOT_IO_FUNC_GPIO_3_UART0_TXD,
    IOT_IO_FUNC_GPIO_3_UART1_CTS_N,
    IOT_IO_FUNC_GPIO_3_SPI1_CSN,
    IOT_IO_FUNC_GPIO_3_JTAG_TDI,
    IOT_IO_FUNC_GPIO_3_PWM5_OUT,
    IOT_IO_FUNC_GPIO_3_I2C1_SDA,
    IOT_IO_FUNC_GPIO_3_SSI_DATA,
} IotIoFuncGpio3;

/**
* @ingroup iot_io
*
* GPIO_4 pin function.CNcomment:GPIO_4管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_GPIO_4_GPIO,
    IOT_IO_FUNC_GPIO_4_UART0_RXD = 2,
    IOT_IO_FUNC_GPIO_4_JTAG_TMS = 4,
    IOT_IO_FUNC_GPIO_4_PWM1_OUT,
    IOT_IO_FUNC_GPIO_4_I2C1_SCL,
} IotIoFuncGpio4;

/**
* @ingroup iot_io
*
* GPIO_5 pin function.CNcomment:GPIO_5管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_GPIO_5_GPIO,
    IOT_IO_FUNC_GPIO_5_UART1_RXD = 2,
    IOT_IO_FUNC_GPIO_5_SPI0_CSN,
    IOT_IO_FUNC_GPIO_5_PWM2_OUT = 5,
    IOT_IO_FUNC_GPIO_5_I2S0_MCLK,
    IOT_IO_FUNC_GPIO_5_BT_STATUS,
} IotIoFuncGpio5;

/**
* @ingroup iot_io
*
* GPIO_6 pin function.CNcomment:GPIO_6管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_GPIO_6_GPIO,
    IOT_IO_FUNC_GPIO_6_UART1_TXD = 2,
    IOT_IO_FUNC_GPIO_6_SPI0_CK,
    IOT_IO_FUNC_GPIO_6_PWM3_OUT = 5,
    IOT_IO_FUNC_GPIO_6_I2S0_TX,
    IOT_IO_FUNC_GPIO_6_COEX_SWITCH,
} IotIoFuncGpio6;

/**
* @ingroup iot_io
*
* GPIO_7 pin function.CNcomment:GPIO_7管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_GPIO_7_GPIO,
    IOT_IO_FUNC_GPIO_7_UART1_CTS_N = 2,
    IOT_IO_FUNC_GPIO_7_SPI0_RXD,
    IOT_IO_FUNC_GPIO_7_PWM0_OUT = 5,
    IOT_IO_FUNC_GPIO_7_I2S0_BCLK,
    IOT_IO_FUNC_GPIO_7_BT_ACTIVE,
} IotIoFuncGpio7;

/**
* @ingroup iot_io
*
* GPIO_8 pin function.CNcomment:GPIO_8管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_GPIO_8_GPIO,
    IOT_IO_FUNC_GPIO_8_UART1_RTS_N = 2,
    IOT_IO_FUNC_GPIO_8_SPI0_TXD,
    IOT_IO_FUNC_GPIO_8_PWM1_OUT = 5,
    IOT_IO_FUNC_GPIO_8_I2S0_WS,
    IOT_IO_FUNC_GPIO_8_WLAN_ACTIVE,
} IotIoFuncGpio8;

/**
* @ingroup iot_io
*
* GPIO_9 pin function.CNcomment:GPIO_9管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_GPIO_9_GPIO,
    IOT_IO_FUNC_GPIO_9_I2C0_SCL,
    IOT_IO_FUNC_GPIO_9_UART2_RTS_N,
    IOT_IO_FUNC_GPIO_9_SDIO_D2,
    IOT_IO_FUNC_GPIO_9_SPI0_TXD,
    IOT_IO_FUNC_GPIO_9_PWM0_OUT,
    IOT_IO_FUNC_GPIO_9_I2S0_MCLK = 7,
} IotIoFuncGpio9;

/**
* @ingroup iot_io
*
* GPIO_10 pin function.CNcomment:GPIO_10管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_GPIO_10_GPIO,
    IOT_IO_FUNC_GPIO_10_I2C0_SDA,
    IOT_IO_FUNC_GPIO_10_UART2_CTS_N,
    IOT_IO_FUNC_GPIO_10_SDIO_D3,
    IOT_IO_FUNC_GPIO_10_SPI0_CK,
    IOT_IO_FUNC_GPIO_10_PWM1_OUT,
    IOT_IO_FUNC_GPIO_10_I2S0_TX = 7,
} IotIoFuncGpio10;

/**
* @ingroup iot_io
*
* GPIO_11 pin function.CNcomment:GPIO_11管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_GPIO_11_GPIO,
    IOT_IO_FUNC_GPIO_11_UART2_TXD = 2,
    IOT_IO_FUNC_GPIO_11_SDIO_CMD,
    IOT_IO_FUNC_GPIO_11_SPI0_RXD,
    IOT_IO_FUNC_GPIO_11_PWM2_OUT,
    IOT_IO_FUNC_GPIO_11_RF_TX_EN_EXT,
    IOT_IO_FUNC_GPIO_11_I2S0_RX,
} IotIoFuncGpio11;

/**
* @ingroup iot_io
*
* GPIO_12 pin function.CNcomment:GPIO_12管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_GPIO_12_GPIO,
    IOT_IO_FUNC_GPIO_12_UART2_RXD = 2,
    IOT_IO_FUNC_GPIO_12_SDIO_CLK,
    IOT_IO_FUNC_GPIO_12_SPI0_CSN,
    IOT_IO_FUNC_GPIO_12_PWM3_OUT,
    IOT_IO_FUNC_GPIO_12_RF_RX_EN_EXT,
    IOT_IO_FUNC_GPIO_12_I2S0_BCLK,
} IotIoFuncGpio12;

/**
* @ingroup iot_io
*
* GPIO_13 pin function.CNcomment:GPIO_13管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_GPIO_13_SSI_DATA,
    IOT_IO_FUNC_GPIO_13_UART0_TXD,
    IOT_IO_FUNC_GPIO_13_UART2_RTS_N,
    IOT_IO_FUNC_GPIO_13_SDIO_D0,
    IOT_IO_FUNC_GPIO_13_GPIO,
    IOT_IO_FUNC_GPIO_13_PWM4_OUT,
    IOT_IO_FUNC_GPIO_13_I2C0_SDA,
    IOT_IO_FUNC_GPIO_13_I2S0_WS,
} IotIoFuncGpio13;

/**
* @ingroup iot_io
*
* GPIO_14 pin function.CNcomment:GPIO_14管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_GPIO_14_SSI_CLK,
    IOT_IO_FUNC_GPIO_14_UART0_RXD,
    IOT_IO_FUNC_GPIO_14_UART2_CTS_N,
    IOT_IO_FUNC_GPIO_14_SDIO_D1,
    IOT_IO_FUNC_GPIO_14_GPIO,
    IOT_IO_FUNC_GPIO_14_PWM5_OUT,
    IOT_IO_FUNC_GPIO_14_I2C0_SCL,
} IotIoFuncGpio14;

/**
* @ingroup iot_io
*
* SFC_CSN pin function.CNcomment:SFC_CSN管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_SFC_CSN_SFC_CSN,
    IOT_IO_FUNC_SFC_CSN_SDIO_D2,
    IOT_IO_FUNC_SFC_CSN_GPIO9,
    IOT_IO_FUNC_SFC_CSN_SPI0_TXD = 4,
} IotIoFuncSfcCsn;

/**
* @ingroup iot_io
*
* SFC_DO pin function.CNcomment:SFC_DO管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_SFC_IO_1_SFC_DO,
    IOT_IO_FUNC_SFC_IO_1_SDIO_D3,
    IOT_IO_FUNC_SFC_IO_1_GPIO10,
    IOT_IO_FUNC_SFC_IO_1_SPI0_CK = 4,
} IotIoFuncSfcIo1;

/**
* @ingroup iot_io
*
* SFC_WPN pin function.CNcomment:SFC_WPN管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_SFC_IO_2_SFC_WPN,
    IOT_IO_FUNC_SFC_IO_2_SDIO_CMD,
    IOT_IO_FUNC_SFC_IO_2_GPIO11,
    IOT_IO_FUNC_SFC_IO_2_RF_TX_EN_EXT,
    IOT_IO_FUNC_SFC_IO_2_SPI0_RXD,
} IotIoFuncSfcIo2;

/**
* @ingroup iot_io
*
* SFC_DI pin function.CNcomment:SFC_DI管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_SFC_IO_0_SFC_DI,
    IOT_IO_FUNC_SFC_IO_0_SDIO_CLK,
    IOT_IO_FUNC_SFC_IO_0_GPIO12,
    IOT_IO_FUNC_SFC_IO_0_RF_RX_EN_EXT,
    IOT_IO_FUNC_SFC_IO_0_SPI0_CSN,
} IotIoFuncSfcIo0;

/**
* @ingroup iot_io
*
* SFC_CLK pin function.CNcomment:SFC_CLK管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_SFC_CLK_SFC_CLK,
    IOT_IO_FUNC_SFC_CLK_SDIO_D0,
    IOT_IO_FUNC_SFC_CLK_GPIO13,
    IOT_IO_FUNC_SFC_CLK_SSI_DATA = 4,
} IotIoFuncSfcClk;

/**
* @ingroup iot_io
*
* SFC_HOLDN pin function.CNcomment:SFC_HOLDN管脚功能。CNend
*/
typedef enum {
    IOT_IO_FUNC_SFC_IO_3_SFC_HOLDN,
    IOT_IO_FUNC_SFC_IO_3_SDIO_D1,
    IOT_IO_FUNC_SFC_IO_3_GPIO14,
    IOT_IO_FUNC_SFC_IO_3_SSI_CLK = 4,
} IotIoFuncSfcIo3;

/**
* @ingroup iot_io
*
* I/O drive capability.CNcomment:IO驱动能力。CNend
* Note: The HI_IO_NAME_GPIO_0~HI_IO_NAME_GPIO_11 and HI_IO_NAME_GPIO_13~HI_IO_NAME_GPIO_14 driver capabilities are
*       optional.The value range is HI_IO_DRIVER_STRENGTH_0~HI_IO_DRIVER_STRENGTH_3, and the other I/O ranges are
*       HI_IO_DRIVER_STRENGTH_0~HI_IO_DRIVER_STRENGTH_7.CNcomment:注意:HI_IO_NAME_GPIO_0~HI_IO_NAME_GPIO_11、
*       HI_IO_NAME_GPIO_13~HI_IO_NAME_GPIO_14驱动能力可选范围是HI_IO_DRIVER_STRENGTH_0~HI_IO_DRIVER_STRENGTH_3,
*       其余IO范围是HI_IO_DRIVER_STRENGTH_0~HI_IO_DRIVER_STRENGTH_7。CNend
*/
typedef enum {
    IOT_IO_DRIVER_STRENGTH_0 = 0,   /* <Drive strength level 0 (highest).CNcomment:驱动能力0级,驱动能力最高CNend */
    IOT_IO_DRIVER_STRENGTH_1,   /* <Drive strength level 1.CNcomment:驱动能力1级CNend */
    IOT_IO_DRIVER_STRENGTH_2,   /* <Drive strength level 2.CNcomment:驱动能力2级CNend */
    IOT_IO_DRIVER_STRENGTH_3,   /* <Drive strength level 3.CNcomment:驱动能力3级CNend */
    IOT_IO_DRIVER_STRENGTH_4,   /* <Drive strength level 4.CNcomment:驱动能力4级CNend */
    IOT_IO_DRIVER_STRENGTH_5,   /* <Drive strength level 5.CNcomment:驱动能力5级CNend */
    IOT_IO_DRIVER_STRENGTH_6,   /* <Drive strength level 6.CNcomment:驱动能力6级CNend */
    IOT_IO_DRIVER_STRENGTH_7,   /* <Drive strength level 7 (lowest).CNcomment:驱动能力7级,驱动能力最低CNend */
    IOT_IO_DRIVER_STRENGTH_MAX,
} IotIoDriverStrength;


unsigned int IoSetPull(unsigned int id, IotIoPull val);


unsigned int IoSetFunc(unsigned int id, unsigned char val);

unsigned int TaskMsleep(unsigned int ms);

#endif
/** @} */
  • BUILD.gn
static_library("ledDemo") {
  sources = [
    "app_demo_led_control.c",
    "hal_iot_gpio_ex.c",
  ]

  include_dirs = [
    "./",
    "//commonlibrary/utils_lite/include",
    "//kernel/liteos_m/kal/cmsis",
    "//base/iot_hardware/peripheral/interfaces/kits",
  ]
}

3. 修改工程配置文件

修改hi3861_for_AI_topic-master\src\applications\sample\wifi-iot\app目录下的BUILD.gn文件

import("//build/lite/config/component/lite_component.gni")

lite_component("app") {
    features = [
        "led_demo:ledDemo",
    ]
}

4. 编译、烧录

烧录、重启后即可看到板载led灯闪烁

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
IZ8AQbsbCmac
作者其他文章 更多

2023-11-19

2023-11-19

2023-11-19