HCM111Z QuecOpen(SDK) 通用 API 开发指南

简介

Quectel HCM111Z 模块支持 QuecOpen® 解决方案。QuecOpen® 是基于 RTOS 系统的嵌入式开发平台。它旨在简化物联网应用的开发和设计。

本文档适用于基于 SDK 构建环境的 QuecOpen® 解决方案。本文档概述了 Quectel HCM111Z 模块 SDK 中提供的 flash API、watchdog API、timer API、RTC API 和其他通用系统 API,以及 QuecOpen® 解决方案中的开发过程。


Flash

Flash API

头文件

ql_flash.h,flash API 的头文件,在 components/quectel_api/ql_include 目录中。除非另有说明,本文档中提到的所有头文件都在此目录中。

API 概述

函数 描述
ql_flash_set_security() 设置 flash 保护类型。
ql_flash_write() 向 flash 写入数据。
ql_flash_read() 从 flash 读取数据。
ql_flash_erase() 从 flash 擦除数据。

API 描述

ql_flash_set_security

此函数设置 flash 保护类型。在写入或删除数据之前需要启用 flash 保护。

原型:

ql_errcode_flash_e ql_flash_set_security(ql_flash_protect_type_e type)

参数:

返回值:

函数执行结果码,请参见 ql_errcode_flash_e

ql_flash_protect_type_e

flash 保护类型的枚举:

typedef enum {
  QL_FLASH_PROTECT_NONE = 0,
  QL_FLASH_PROTECT_ALL,
} ql_flash_protect_type_e;
成员 描述
QL_FLASH_PROTECT_NONE 无保护
QL_FLASH_PROTECT_ALL 保护整个 flash
ql_errcode_flash_e

结果代码的枚举:

typedef enum {
  QL_FLASH_SUCCESS = 0,
  QL_FLASH_EXECUTE_ERR,
  QL_FLASH_PARAM_ERR,
} ql_errcode_flash_e;
成员 描述
QL_FLASH_SUCCESS 执行成功
QL_FLASH_EXECUTE_ERR 执行失败
QL_FLASH_PARAM_ERR 参数无效

ql_flash_write

此函数向 flash 写入数据。

原型:

ql_errcode_flash_e ql_flash_write(uint8_t *data, uint32_t addr, uint32_t len)

参数:

  • data: [In] 要写入的数据。
  • addr: [In] 要写入数据的地址。
  • len: [In] 要写入数据的长度。单位:字节。

返回值:

函数执行结果码,请参见 ql_errcode_flash_e


ql_flash_read

此函数从 flash 读取数据。

原型:

ql_errcode_flash_e ql_flash_read(uint8_t *data, uint32_t addr, uint32_t len)

参数:

  • data: [Out] 用于存储读取数据的缓冲区。
  • addr: [In] 要读取数据的地址。
  • len: [In] 要读取数据的长度。单位:字节。

返回值:

函数执行结果码,请参见 ql_errcode_flash_e


ql_flash_erase

此函数从 flash 擦除数据。每次至少擦除一个扇区(4 KB),每次擦除的数据大小是扇区大小的整数倍。

原型:

ql_errcode_flash_e ql_flash_erase(uint32_t addr, uint32_t len)

参数:

  • addr: [In] 要擦除数据的地址。
  • len: [In] 要擦除数据的长度。单位:字节。

返回值:

函数执行结果码,请参见 ql_errcode_flash_e


开发过程

本章描述如何在应用程序中使用 flash API 以及如何调试基本功能。

操作过程

模块 SDK 中提供了操作 flash 的示例。演示在 quectel_demo/ql_flash_demo/code 目录下的 ql_flash_demo.c 中。相关函数的描述如下:

  • demo_flash():任务执行函数,向 flash 写入数据,从 flash 读取和擦除数据。
void demo_flash(void)
{
    uint32_t id;
    ql_debug("flash demo\r\n");

    ql_flash_set_security(QL_FLASH_PROTECT_NONE);
    ql_flash_erase(USER_FLASH_BASE_ADDR, FLASH_PAGE_SIZE);
    uint32_t idx = 0;
    for(idx=0; idx<FLASH_PAGE_SIZE; idx++)
        buf[idx] = idx;
    ql_flash_write(buf,USER_FLASH_BASE_ADDR, FLASH_PAGE_SIZE );
    for(idx=0; idx<FLASH_PAGE_SIZE; idx++)
        buf[idx] = 0xff;
    ql_flash_read(buf,USER_FLASH_BASE_ADDR, FLASH_PAGE_SIZE);
    ql_debug("read reg:\r\n");
    show_reg(buf,5,1);
    show_reg(buf+4091,5,1);

    flash_erase(USER_FLASH_BASE_ADDR, FLASH_PAGE_SIZE);
    for(idx=0; idx<FLASH_PAGE_SIZE; idx++)
        buf[idx] = idx+1;
    flash_write(USER_FLASH_BASE_ADDR, FLASH_PAGE_SIZE, buf);
    for(idx=0; idx<FLASH_PAGE_SIZE; idx++)
        buf[idx] = 0xfe;
    flash_read(USER_FLASH_BASE_ADDR, FLASH_PAGE_SIZE, buf);
    ql_debug("read reg:\r\n");
    show_reg(buf,5,1);
    show_reg(buf+4091,5,1);

    ql_flash_erase(USER_FLASH_MAX_PAGE_ADDR, FLASH_PAGE_SIZE);
    for(idx=0; idx<FLASH_PAGE_SIZE; idx++)
        buf[idx] = idx+2;
    ql_flash_write(buf,USER_FLASH_MAX_PAGE_ADDR, FLASH_PAGE_SIZE);
    for(idx=0; idx<FLASH_PAGE_SIZE; idx++)
        buf[idx] = 0xfd;
    ql_flash_read(buf,USER_FLASH_MAX_PAGE_ADDR, FLASH_PAGE_SIZE );
    ql_debug("read reg:\r\n");
    show_reg(buf,5,1);
    show_reg(buf+4091,5,1);

    ql_flash_erase(USER_FLASH_MAX_PAGE_ADDR, FLASH_PAGE_SIZE);
    for(idx=0; idx<FLASH_PAGE_SIZE; idx++)
        buf[idx] = idx+3;
    ql_flash_write(buf,USER_FLASH_MAX_PAGE_ADDR, FLASH_PAGE_SIZE);
    for(idx=0; idx<FLASH_PAGE_SIZE; idx++)
        buf[idx] = 0xfc;
    ql_flash_read(buf,USER_FLASH_MAX_PAGE_ADDR, FLASH_PAGE_SIZE);
    ql_debug("read reg:\r\n");
    show_reg(buf,5,1);
    show_reg(buf+4091,5,1);

    ql_flash_erase(USER_FLASH_MAX_PAGE_ADDR, FLASH_PAGE_SIZE);
    	  for(idx=0; idx<FLASH_PAGE_SIZE; idx++)
        buf[idx] = 0x00;
    	ql_flash_read(buf,USER_FLASH_MAX_PAGE_ADDR, FLASH_PAGE_SIZE);
    ql_debug("read reg:\r\n");
    show_reg(buf,5,1);
    show_reg(buf+4091,5,1);

函数调试

要调试 flash 函数,使用安装了模块的评估板(例如,HCM111Z TE-B),并按照以下步骤操作:

  1. 运行 操作过程 中描述的 flash 演示。
  2. 重新编译固件版本,并将其烧录到模块。
  3. 重启模块。
  4. 打开 UART 1 端口以获取日志信息。

串口工具获取 Log

上述图中的日志数据显示,向 flash 写入数据、从 flash 读取数据以及从 flash 擦除数据都成功。


看门狗

Watchdog API

头文件

ql_watchdog.h,watchdog API 的头文件,在 components/quectel_api/ql_include 目录中。除非另有说明,本文档中提到的所有头文件都在此目录中。

API 概述

函数 描述
ql_wdg_init() 初始化 watchdog。
ql_wdg_reload() 喂watchdog。
ql_wdg_finalize() 关闭 watchdog。

API 描述

ql_wdg_init

此函数初始化 watchdog。

原型:

ql_wdg_errcode_e ql_wdg_init(uint32_t timeout)

参数:

  • timeout: [In] Watchdog 重置周期。单位:秒。

返回值:

函数执行结果码,请参见 ql_wdg_errcode_e

ql_wdg_errcode_e

结果代码的枚举:

typedef enum {
  QL_WDG_SUCCESS = 0,
  QL_WDG_EXECUTE_ERR,
  QL_WDG_INVALID_PARAM_ERR,
} ql_wdg_errcode_e;
成员 描述
QL_WDG_SUCCESS 执行成功
QL_WDG_EXECUTE_ERR 执行失败
QL_WDG_INVALID_PARAM_ERR 参数无效

ql_wdg_reload

此函数喂狗。

原型:

ql_wdg_errcode_e ql_wdg_reload(void)

参数:

返回值:

函数执行结果码,请参见 ql_wdg_errcode_e


ql_wdg_finalize

此函数关闭 watchdog。

原型:

ql_wdg_errcode_e ql_wdg_finalize(void)

参数:

返回值:

函数执行结果码,请参见 ql_wdg_errcode_e


开发过程

本章描述如何在应用程序中使用 watchdog API。

操作过程

模块 SDK 中提供了操作 watchdog API 的示例。演示在 quectel_demo/ql_wdt_demo/code 目录下的 ql_wdt_demo.c 文件中。相关函数的描述如下:

  • demo_wdt():此函数创建 watchdog 任务,需要调用以运行演示。
void demo_wdt(void)
{
  ql_debug("watchdog demo\r\n");
  ql_wdg_init(4);
  while(1)
  {
    #if 0 //Exceeding the maximum time set by the watchdog
      co_delay_100us(50000);
    #else
      co_delay_100us(30000);
      ql_debug("wdg reload\r\n");
      ql_wdg_reload();
    #endif
  }
}

当程序正常运行时,每 3 秒程序自动执行一次 ql_wdg_reload(),此时程序不会触发看门狗复位。当将上述代码中的 #if 0 改为 #if 1,且编译固件版本并将新固件版本重新烧录至模块中,若程序超过 4 秒没有自动执行 ql_wdg_reload(),将触发看门狗复位。


定时器

Timer API

头文件

ql_timer.h,timer API 的头文件,在 components/quectel_api/ql_include 目录中。除非另有说明,本文档中提到的所有头文件都在此目录中。

API 概述

函数 描述
ql_timer_init() 初始化定时器。
ql_timer_start() 启动定时器。
ql_timer_stop() 停止定时器。
ql_timer_get_cnt() 获取定时器计数值。

API 描述

ql_timer_init

此函数初始化定时器。

原型:

ql_timer_errcode_e ql_timer_init(ql_timer_number_e timer_id, uint32_t timer_us, ql_timer_mode_e mode, ql_timer_callback timer_cb)

参数:

  • timer_id: [In] 定时器 ID。有关详细信息,请参见 ql_timer_number_e
  • timer_us: [In] 定时器持续时间。单位:微秒。范围:1~349000。
  • mode: [In] 定时器工作模式。有关详细信息,请参见 ql_timer_mode_e
  • timer_cb: [In] 定时器中断的回调函数。有关详细信息,请参见 ql_timer_callback

返回值:

函数执行结果码,请参见 ql_timer_errcode_e

ql_timer_number_e

定时器 ID 的枚举:

typedef enum {
  QL_TIMER_0 = 0,
  QL_TIMER_1,
} ql_timer_number_e;
成员 描述
QL_TIMER_0 定时器 0
QL_TIMER_1 定时器 1
ql_timer_mode_e

定时器工作模式的枚举:

typedef enum {
  QL_TIMER_SINGLE = 0,
  QL_TIMER_PERIODIC,
} ql_timer_mode_e;
成员 描述
QL_TIMER_SINGLE 单次(预留值,暂不支持)
QL_TIMER_PERIODIC 周期
ql_timer_callback

此函数是定时器中断的回调函数。

typedef void (*ql_timer_callback)(uint8_t arg)
  • arg: [In] 输入的参数。
ql_timer_errcode_e

结果代码的枚举:

typedef enum {
  QL_TIMER_SUCCESS = 0,
  QL_TIMER_EXECUTE_ERR,
  QL_TIMER_INVALID_PARAM_ERR,
  QL_TIMER_NOT_OPEN_ERR,
} ql_timer_errcode_e;
成员 描述
QL_TIMER_SUCCESS 执行成功
QL_TIMER_EXECUTE_ERR 执行失败
QL_TIMER_INVALID_PARAM_ERR 参数无效
QL_TIMER_NOT_OPEN_ERR 定时器未启用

ql_timer_start

此函数启动定时器。

原型:

ql_timer_errcode_e ql_timer_start(ql_timer_number_e timer_id)

参数:

返回值:

函数执行结果码,请参见 ql_timer_errcode_e


ql_timer_stop

此函数停止定时器。

原型:

ql_timer_errcode_e ql_timer_stop(ql_timer_number_e timer_id)

参数:

返回值:

函数执行结果码,请参见 ql_timer_errcode_e


ql_timer_get_cnt

此函数获取定时器计数值。

原型:

ql_timer_errcode_e ql_timer_get_cnt(ql_timer_number_e timer_id, uint32_t *count)

参数:

  • timer_id: [In] 定时器 ID。有关详细信息,请参见 ql_timer_number_e
  • count: [In] 计数值的指针。

返回值:

函数执行结果码,请参见 ql_timer_errcode_e


开发过程

本章描述如何在应用程序中使用 timer API 以及如何调试基本功能。

操作过程

模块 SDK 中提供了操作定时器的示例。演示在 quectel_demo/ql_timer_demo/code 目录下的 ql_timer_demo.c 中。相关函数的描述如下:

  • demo_timer():此函数用于初始化定时器和启用定时器。
  • ql_timer0_cb_test():定时器 0 中断的回调函数。
  • ql_timer1_cb_test():定时器 1 中断的回调函数。
void demo_timer(void)
{
  uint8_t ret;
  ql_debug("hardware timer demo\r\n");
  ret = ql_timer_init(QL_TIMER_0,500,QL_TIMER_PERIODIC,ql_timer0_cb_test);
  if(ret != QL_TIMER_SUCCRSS)
  {
    ql_debug("timer0 init fail\r\n");
  }
  ql_timer_start(QL_TIMER_0);
  ret = ql_timer_init(QL_TIMER_1,20000,QL_TIMER_PERIODIC,ql_timer1_cb_test);
  if(ret != QL_TIMER_SUCCRSS)
  {
    ql_debug("timer1 init fail\r\n");
  }
  ql_timer_start(QL_TIMER_1);
}

void ql_timer0_cb_test(uint8_t arg)
{
  static uint32_t cnt = 0;
  uint32_t num = 0;
  cnt++;
  if(cnt >= 2000){ //1s
    ql_timer_stop(QL_TIMER_0);
    ql_timer_get_cnt(QL_TIMER_0,&num);
    ql_debug("timer0 num = %d\r\n",num);
  }
}

void ql_timer1_cb_test(uint8_t arg)
{
  static uint32_t cnt = 0;
  uint32_t num = 0;
  cnt++;
  if(cnt >= 100){ //2s
    cnt = 0;
    ql_timer_get_cnt(QL_TIMER_1,&num);
    ql_debug("timer1 num = %d\r\n",num);
  }
}

函数调试

要调试定时器函数,使用安装了模块的开发板(例如 HCM111Z TE-B),并按照以下步骤操作:

  1. 运行 操作过程 中描述的定时器演示。
  2. 重新编译固件版本,并将其烧录到模块。
  3. 重启模块。
  4. 打开 UART 1 端口以获取日志信息。

通过串口工具获取的定时器日志

上述图中的日志数据显示,定时器已启动,定时器中断回调函数已成功调用。


RTC

RTC API

头文件

ql_rtc.h,RTC API 的头文件,在 components/quectel_api/ql_include 目录中。除非另有说明,本文档中提到的所有头文件都在此目录中。

API 概述

函数 描述
ql_rtc_init() 初始化 RTC。
ql_rtc_start() 启用 RTC。

API 描述

ql_rtc_init

此函数初始化 RTC。

原型:

ql_rtc_errcode_e ql_rtc_init(ql_rtc_port_e port, ql_rtc_callback callback)

参数:

  • port: [In] RTC 编号。有关详细信息,请参见 ql_rtc_port_e
  • callback: [In] RTC 中断的回调函数。有关详细信息,请参见 ql_rtc_callback

返回值:

函数执行结果码,请参见 ql_rtc_errcode_e

ql_rtc_port_e

RTC 编号的枚举:

typedef enum {
  QL_RTC_PORT0 = 0,
  QL_RTC_PORT1,
} ql_rtc_port_e;
成员 描述
QL_RTC_PORT0 RTC 0
QL_RTC_PORT1 RTC 1
ql_rtc_callback

此函数是 RTC 中断的回调函数。

typedef void (*ql_rtc_callback)(void)

无参数和返回值。

ql_rtc_errcode_e

结果代码的枚举:

typedef enum {
  QL_RTC_SUCCESS = 0,
  QL_RTC_EXECUTE_ERR,
  QL_RTC_INVAILD_PARAM_ERR,
} ql_rtc_errcode_e;
成员 描述
QL_RTC_SUCCESS 执行成功
QL_RTC_EXECUTE_ERR 执行失败
QL_RTC_INVAILD_PARAM_ERR 参数无效

ql_rtc_start

此函数启用 RTC。

原型:

ql_rtc_errcode_e ql_rtc_start(ql_rtc_port_e port, uint32_t ms)

参数:

  • port: [In] RTC 编号。有关详细信息,请参见 ql_rtc_port_e
  • ms: [In] 定时时间。单位:毫秒。

返回值:

函数执行结果码,请参见 ql_rtc_errcode_e


开发过程

本章描述如何在应用程序中使用 RTC API 以及如何调试基本功能。

操作过程

模块 SDK 中提供了操作 RTC API 的示例。演示在 quectel_demo/ql_rtc_demo/code 目录下的 ql_rtc_demo.c 文件中。相关函数的描述如下:

  • demo_rtc():此函数用于初始化 RTC 和配置 RTC 中断的回调函数。
  • ql_rtc0_cb_test():RTC 0 中断的回调函数。
  • ql_rtc1_cb_test():RTC 1 中断的回调函数。
void demo_rtc(void)
{
  ql_debug("rtc demo\r\n");
  ql_rtc_init(QL_RTC_PORT0,ql_rtc0_cb_test);
  ql_rtc_init(QL_RTC_PORT1,ql_rtc1_cb_test);
  ql_rtc_start(QL_RTC_PORT0,10);
  ql_rtc_start(QL_RTC_PORT1,1000);
  ql_sys_sleep_enable();
}

void ql_rtc0_cb_test(void)
{
  ql_debug("rtc0 %d\r\n",ql_sys_get_run_time());
}

void ql_rtc1_cb_test(void)
{
  ql_debug("rtc1 %d\r\n",ql_sys_get_run_time());
  ql_rtc_start(QL_RTC_PORT1,1000);
}

函数调试

要调试 RTC 函数,使用安装了模块的开发板(例如,HCM111Z TE-B),并按照以下步骤操作:

  1. 运行 操作过程 中描述的 RTC 演示。
  2. 重新编译固件版本,并将其烧录到模块。
  3. 重启模块。
  4. 打开 UART 1 端口以获取日志信息。

通过串口工具获取的 RTC 日志

上述图中的日志数据显示,RTC 已成功初始化和启用。


其他通用 API

通用系统 API

头文件

ql_sys.h,通用系统 API 的头文件,在 components/quectel_api/ql_include 目录中。除非另有说明,本文档中提到的所有头文件都在此目录中。

API 概述

函数 描述
ql_sys_sleep_enable() 使模块进入睡眠模式。
ql_sys_sleep_disable() 禁止模块进入睡眠模式。
ql_sys_reset() 复位模块。
ql_sys_delay_100us() 在程序中增加延时时间。
ql_sys_set_pclk() 设置系统主频。
ql_sys_set_tx_power() 设置射频发射功率。
ql_sys_get_run_time() 获取程序运行时间。
ql_sys_irq_enable() 中断系统。

API 描述

ql_sys_sleep_enable

此函数使模块进入睡眠模式。

原型:

ql_sys_errcode_e ql_sys_sleep_enable(void)

参数:

返回值:

函数执行结果码,请参见 ql_sys_errcode_e

ql_sys_errcode_e

结果代码的枚举:

typedef enum {
  QL_SYS_SUCCESS = 0,
  QL_SYS_EXECUTE_ERR,
  QL_SYS_INVALID_PARAM_ERR,
} ql_sys_errcode_e;
成员 描述
QL_SYS_SUCCESS 执行成功
QL_SYS_EXECUTE_ERR 执行失败
QL_SYS_INVALID_PARAM_ERR 参数无效

ql_sys_sleep_disable

此函数禁止模块进入睡眠模式。

原型:

ql_sys_errcode_e ql_sys_sleep_disable(void)

参数:

返回值:

函数执行结果码,请参见 ql_sys_errcode_e


ql_sys_reset

此函数复位模块。

原型:

ql_sys_errcode_e ql_sys_reset(void)

参数:

返回值:

函数执行结果码,请参见 ql_sys_errcode_e


ql_sys_delay_100us

此函数在程序中增加延时时间。

原型:

ql_sys_errcode_e ql_sys_delay_100us(uint32_t num)

参数:

  • num: [In] 延时时间。单位:100 微秒。

返回值:

函数执行结果码,请参见 ql_sys_errcode_e


ql_sys_set_pclk

此函数设置系统主频。

原型:

ql_sys_errcode_e ql_sys_set_pclk(ql_sys_clk_e clk)

参数:

  • clk: [In] 系统主频。有关详细信息,请参见 ql_sys_clk_e

返回值:

函数执行结果码,请参见 ql_sys_errcode_e

ql_sys_clk_e

系统主频的枚举:

typedef enum {
  QL_SYS_CLK_6M,
  QL_SYS_CLK_12M,
  QL_SYS_CLK_24M,
  QL_SYS_CLK_48M,
} ql_sys_clk_e;
成员 描述
QL_SYS_CLK_6M 设置系统主频为 6 MHz
QL_SYS_CLK_12M 设置系统主频为 12 MHz
QL_SYS_CLK_24M 设置系统主频为 24 MHz
QL_SYS_CLK_48M 设置系统主频为 48 MHz

ql_sys_set_tx_power

此函数设置射频发射功率。

原型:

ql_sys_errcode_e ql_sys_set_tx_power(ql_sys_tx_power_e power)

参数:

  • power: [In] 射频发射功率。有关详细信息,请参见 ql_sys_tx_power_e

返回值:

函数执行结果码,请参见 ql_sys_errcode_e

ql_sys_tx_power_e

射频发射功率的枚举:

typedef enum {
  QL_TX_POWER_NEG_16dBm,
  QL_TX_POWER_NEG_10dBm,
  QL_TX_POWER_NEG_7dBm,
  QL_TX_POWER_NEG_5dBm,
  QL_TX_POWER_NEG_3dBm,
  QL_TX_POWER_NEG_2dBm,
  QL_TX_POWER_NEG_1dBm,
  QL_TX_POWER_0dBm,
  QL_TX_POWER_POS_1dBm,
  QL_TX_POWER_POS_2dBm,
  QL_TX_POWER_POS_3dBm,
  QL_TX_POWER_POS_4dBm,
  QL_TX_POWER_POS_5dBm,
  QL_TX_POWER_POS_6dBm,
  QL_TX_POWER_POS_7dBm,
  QL_TX_POWER_POS_8dBm,
  QL_TX_POWER_POS_9dBm,
  QL_TX_POWER_POS_10dBm,
} ql_sys_tx_power_e;
成员 描述
QL_TX_POWER_NEG_16dBm 设置发射功率为 -16 dBm
QL_TX_POWER_NEG_10dBm 设置发射功率为 -10 dBm
QL_TX_POWER_NEG_7dBm 设置发射功率为 -7 dBm
QL_TX_POWER_NEG_5dBm 设置发射功率为 -5 dBm
QL_TX_POWER_NEG_3dBm 设置发射功率为 -3 dBm
QL_TX_POWER_NEG_2dBm 设置发射功率为 -2 dBm
QL_TX_POWER_NEG_1dBm 设置发射功率为 -1 dBm
QL_TX_POWER_NEG_0dBm 设置发射功率为 0 dBm
QL_TX_POWER_POS_1dBm 设置发射功率为 1 dBm
QL_TX_POWER_POS_2dBm 设置发射功率为 2 dBm
QL_TX_POWER_POS_3dBm 设置发射功率为 3 dBm
QL_TX_POWER_POS_4dBm 设置发射功率为 4 dBm
QL_TX_POWER_POS_5dBm 设置发射功率为 5 dBm
QL_TX_POWER_POS_6dBm 设置发射功率为 6 dBm
QL_TX_POWER_POS_7dBm 设置发射功率为 7 dBm
QL_TX_POWER_POS_8dBm 设置发射功率为 8 dBm
QL_TX_POWER_POS_9dBm 设置发射功率为 9 dBm
QL_TX_POWER_POS_10dBm 设置发射功率为 10 dBm

ql_sys_get_run_time

此函数获取程序运行时间。当运行时间达到 83886079 毫秒(0x4FFFFFF)之后会重新计时。

原型:

uint32_t ql_sys_get_run_time(void)

参数:

返回值:

程序运行时间;单位:毫秒。


ql_sys_irq_enable

此函数用于中断系统。

原型:

ql_sys_errcode_e ql_sys_irq_enable(void)

参数:

返回值:

函数执行结果码,请参见 ql_sys_errcode_e


术语缩写

缩略语 描述
API 应用程序编程接口
EVB 评估板
ID 标识符
IoT 物联网
RTC 实时时钟
SDK 软件开发工具包