• 物联网工程师开发服务平台

在 bootloader 内初始化 EMW3080 的 GPIO

模块复位后先运行 bootloader,然后引导到用户的代码,这段过程约需几百毫秒。

这在一些应用中会产生问题。比如若某 GPIO 硬件复位后为低,用户代码中配置其为高,那么在复位后就会有几百毫秒的低电平状态。

这个问题可以通过配置 GPIO 初始化表 gpio_init 来解决。

使用方法

以 EMW3080B 为例,gpio_init 定义在 mico-os/board/MK3080B/platform.c 内:

const mico_gpio_init_t gpio_init[] =
{
  {MICO_GPIO_12, INPUT_PULL_UP, 0},
  {MICO_GPIO_13, INPUT_PULL_UP, 0},
  {MICO_GPIO_14, INPUT_PULL_UP, 0},
  {MICO_GPIO_NC, 0, 0}
};

它是一个 mico_gpio_init_t 类型的数组,mico_gpio_init_t 定义如下:

typedef struct
{
  mico_gpio_t pin;
  unsigned char config; /* @ref mico_gpio_config_t */
  unsigned char out; /* 0: low, 1: high */
} mico_gpio_init_t;

比如,想把 MICO_GPIO_12 配置为输入上拉,把 MICO_GPIO_13 配置为输出低电平, 那么 gpio_init 就应该这样定义:

const mico_gpio_init_t gpio_init[] =
{
  {MICO_GPIO_12, INPUT_PULL_UP, 0},
  {MICO_GPIO_13, OUTPUT_PUSH_PULL, 1},
  {MICO_GPIO_NC, 0, 0}
};

注意,gpio_init 的最后一个成员 MICO_GPIO_NC 代表着 GPIO 初始化表的结束,不可以删除或在其后添加成员。

文本导读目录