Basic: Button¶
1 功能概述¶
Button 是一个演示 EVB 按钮功能的简单例程,通过将 EVB 按钮连接的 SoC 引脚配置为 GPIO 检测中断输入的模式,实时检测按键的状态, 并在状态变化时向串口 Console 打印消息的同时,通过 GPIO 输出控制 LED0 的亮灭。
2 环境要求¶
Board: pan108xxb1_evb / pan108xxb5_evb
UART: 将 P00 与 TX0 引脚接在一起,P01 与 RX0 引脚接在一起,在 PC 上打开终端工具(如 SecureCRT),波特率设置为 921600
LED: 将 P16 引脚与 RGB 灯的蓝色通道(RGB-B)引脚相连
KEY:例程代码使用的 sw0 对应 EVB 开发板的 KEY1 按钮,其硬件上直接与 SoC 的 P04 引脚相连,无需跳线
3 编译和烧录¶
例程位置:zephyr\samples_panchip\basic\button
使用 ZAL 工具可以对其进行编译、烧录、打开 VS Code 调试等操作。关于 ZAL 工具的详细介绍请参考:Zephyr APP Launcher 工具介绍。
4 演示说明¶
根据环境要求一节的介绍,正确连接 EVB 开发板的跳线,编译下载代码后:
按下 EVB 上的 KEY1 按钮,可以看到串口输出当前的时间戳信息,同时观察到 LED 灯亮
松开 EVB 上的 KEY1 按钮,可以看到串口无信息,但观察到 LED 灯灭
*** Booting Zephyr OS build zephyr-v2.7.0 ***
Set up button at GPIO_P0 pin 4
Set up LED at GPIO_P1 pin 6
Press the button
Button pressed at 846177858
Button pressed at 969987765
Button pressed at 1071347400
Button pressed at 1200270758
5 开发说明¶
通过阅读板级 Devicetree 配置文件(
pan108xxb1_evb.dts
/pan108xxb5_evb.dts
)可以获取到 KEY 对应的 GPIO 引脚信息通过调用 GPIO Driver 的
gpio_pin_configure_dt()
和gpio_pin_interrupt_configure_dt
接口可以直接从 DTS 中配置 GPIO 的输出模式和中断触发方式gpio_pin_configure_dt(&button, GPIO_INPUT); gpio_pin_interrupt_configure_dt(&button, GPIO_INT_EDGE_TO_ACTIVE);
通过调用 GPIO Driver 的
gpio_pin_get_dt()
和gpio_pin_set_dt()
接口可以获取或配置 DTS 中指定的 GPIO 状态while (1) { int val = gpio_pin_get_dt(&button); if (val >= 0) { gpio_pin_set_dt(&led, val); } k_msleep(SLEEP_TIME_MS); }
6 RAM/Flash资源使用情况¶
Memory region Used Size Region Size %age Used
FLASH: 17388 B 1020 KB 1.66%
SRAM: 3912 B 64 KB 5.97%
IDT_LIST: 0 GB 2 KB 0.00%