Input Polling

该示例使用 GPIO 输入功能,轮询检测GPIO的输入信号。 首先将GPIO配置为输入来检测信号变化。然后进入while循环,实时打印输入电平信息。

环境需求

该示例支持以下开发套件:

开发套件

Hardware Platforms

Board Name

RTL87x2G HDK

RTL87x2G EVB

更多信息请参考 快速入门

硬件连线

连接P1_0和VDDIO检测输入高电平。连接P1_0和GND检测输入低电平。

备注

VDDIO的连接可参考 评估板指南IC供电电压选择 的说明进行连接。

编译和下载

该示例的工程路径如下:

Project file: samples\peripheral\gpio\input_polling\proj\rtl87x2g\mdk

Project file: samples\peripheral\gpio\input_polling\proj\rtl87x2g\gcc

请按照以下步骤操作构建并运行该示例:

  1. 打开工程文件。

  2. 按照 快速入门编译APP Image 给出的步骤构建目标文件。

  3. 编译成功后,在路径 mdk\bingcc\bin 下会生成 app bin app_MP_xxx.bin 文件。

  4. 按照 快速入门MPTool 给出的步骤将app bin烧录至EVB内。

  5. 按下复位按键,开始运行。

测试验证

  1. 当EVB启动后,在DebugAnalyzer工具内观察如下LOG。

    Start input polling test!
    
  2. 当检测GPIO输入 高电平 时,每隔大约2s在DebugAnalyzer工具内打印如下信息。

    gpio_input_data = 1
    gpio_input_data = 1
    gpio_input_data = 1
    ...
    
  3. 当检测GPIO输入 低电平 时,每隔大约2s在DebugAnalyzer工具内打印如下信息。

    gpio_input_data = 0
    gpio_input_data = 0
    gpio_input_data = 0
    ...
    

代码介绍

该章节分为以下几个部分:

  1. 源码路径

  2. 初始化函数将在 初始化 章节介绍。

  3. 初始化后的功能实现将在 功能实现 章节介绍。

源码路径

  1. 工程路径: sdk\samples\peripheral\gpio\input_polling\proj

  2. 源码路径: sdk\samples\peripheral\gpio\input_polling\src

该工程的工程文件代码架构如下:

└── Project: output_toggle
    └── secure_only_app
        └── Device                   includes startup code
            ├── startup_rtl.c
            └── system_rtl.c
        ├── CMSIS                    includes CMSIS header files
        ├── CMSE Library             Non-secure callable lib
        ├── lib                      includes all binary symbol files that user application is built on
            └── rtl87x2g_io.lib
        ├── peripheral               includes all peripheral drivers and module code used by the application
            ├── rtl_gpio.c
            ├── rtl_pinmux.c
            └── rtl_rcc.c
        └── APP                      includes the ble_peripheral user application implementation
            ├── io_gpio.c
            └── main_ns.c

初始化

初始化流程包括了 board_gpio_initdriver_gpio_init


board_gpio_init 中包含了PAD与PINMUX设置。

  1. 配置PAD:设置引脚、PINMUX模式、PowerOn、内部上拉。

  2. 配置PINMUX:分配引脚为GPIO功能。


driver_gpio_init 包含了对GPIO外设的初始化。

  1. 使能 PCC 时钟源。

  2. 在GPIO初始化中,设置 GPIO_Mode 为输入模式。

RCC_PeriphClockCmd(APBPERIPH_GPIO, APBPERIPH_GPIO_CLOCK, ENABLE);
...
GPIO_InitStruct.GPIO_Mode   = GPIO_MODE_IN;

功能实现

初始化后执行while循环,循环体内执行 GPIO_ReadInputDataBit() 函数,并打印读取到的输入电平信息。

while (1)
{
   uint8_t gpio_input_data = GPIO_ReadInputDataBit(GPIO_PORT, GPIO_PIN);
   DBG_DIRECT("gpio_input_data = %d", gpio_input_data);
   platform_delay_ms(2000);
}