新闻详情

新闻详情

首页 / 资讯中心 / 详情

Zephyr应用: 07-Button

发布时间:2026/9/29 7:33:30来源:尧图网络
Zephyr应用: 07-Button
按照你前面03-Blinky的方式摘要:本文基于 Zephyr RTOS 在 Nucleo-F303RE 开发板上从零搭建04-Button工程,循序渐进地讲解 GPIO 输入编程。全文共分三个版本:第一版采用Polling(轮询)方式读取按键状态;第二版改用GPIO 中断 + Callback,让 CPU 在按键状态变化时才响应;第三版在中断基础上加入LED 输出,实现「按下点亮、松开熄灭」。通过三版对比,帮助读者真正理解 Zephyr 的GPIO + Device Tree + Interrupt完整链路,并掌握DT_ALIAS、gpio_pin_configure_dt、gpio_pin_interrupt_configure_dt、gpio_init_callback等核心 API 的用法。前置要求在开始本文之前,建议你先掌握以下基础知识,这样读起来会更顺畅:Zephyr 基础工程搭建:了解 Zephyr 工程的基本目录结构(CMakeLists.txt、prj.conf、src/main.c),以及如何通过west创建、编译和烧录一个最小工程;west 命令用法:熟悉west build、west flash等常用命令,以及-b board指定目标板、-p always强制 pristine build 等参数的含义;Device Tree 基本概念:理解 Device Tree 如何描述硬件(如 GPIO 引脚、别名aliases),以及DT_ALIAS()宏如何把硬件节点映射到 C 代码中的gpio_dt_spec。如果你对以上内容还不熟悉,建议先阅读上一篇《03-Blinky:Zephyr GPIO 输出入门》,那里详细讲解了从零搭建 Zephyr 工程、使用west编译烧录,以及通过 Device Tree 操作 GPIO 输出的完整流程。本文的工程结构、编译命令和 Device Tree 用法都会沿用 03-Blinky 的思路,先打好基础再继续会事半功倍。按照你前面03-Blinky的方式,我们不要直接修改 Zephyr 自带 sample,而是在:~/workspace下面创建我们自己的04-Button测试工程。建议目录结构:~/workspace/ └── 04-Button/ ├── CMakeLists.txt ├── prj.conf └── src/ └── main.c1. 创建工程目录0. 硬件准备动手之前,先确认一下板载外设的引脚对应关系。Nucleo-F303RE 板上有两个我们马上要用到的外设:USER Button(蓝色按键):连接到PC13,对应 Device Tree 中的sw0别名;LD2(绿色 LED):连接到PA5,对应 Device Tree 中的led0别名。注意:这两个外设都已经板载,不需要额外接线。只要把板子通过 USB 连到电脑即可,后面的代码会通过DT_ALIAS(sw0)和DT_ALIAS(led0)自动找到它们。下面是板载外设与 MCU 引脚的对应关系示意图:STM32F303RE MCUNucleo-F303RE 板载外设sw0 别名led0 别名USER Button(蓝色按键)LD2 LED(绿色)PC13(GPIO Input)PA5(GPIO Output)对应的 Device Tree 别名关系如下:sw0 ──→USERButton ──→ PC13 led0 ──→ LD2 LED ──→ PA5在后面的代码中,我们不会写死PC13或PA5,而是通过DT_ALIAS(sw0)和DT_ALIAS(led0)让 Zephyr 从 Device Tree 自动解析出正确的引脚。这样代码与具体硬件解耦,换一块板子时只需修改 Device Tree,而无需改动 C 代码。1. 创建工程目录cd ~/workspacemkdir -p 04-Button/srccd 04-Button2. 创建 CMakeLists.txtcatCMakeLists.txt'EOF' cmake_minimum_required(VERSION 3.20.0) find_package(Zephyr REQUIRED HINTS \$ENV{ZEPHYR_BASE}) project(button) target_sources(app PRIVATE src/main.c) EOF3. 创建 prj.conf先使用最简单的配置:catprj.conf'EOF' CONFIG_GPIO=y CONFIG_PRINTK=y EOF4. 创建 main.c第一版我们不使用中断,先学习最基本的 GPIO 输入。catsrc/main.c'EOF'
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

固定翼飞控调优前设置:重心、舵面、传感器与日志基线 2026/9/29 11:23:07

固定翼飞控调优前设置:重心、舵面、传感器与日志基线

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
机器视觉打光实战:光源选型、角度控制与案例排坑 2026/9/29 11:23:07

机器视觉打光实战:光源选型、角度控制与案例排坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Springboot+MySQL校园在线拍卖系统实战:从环境搭建到并发出价避坑 2026/9/29 11:23:07

Springboot+MySQL校园在线拍卖系统实战:从环境搭建到并发出价避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
部署glm4长上下文推理测试:TaoToken统一通道下cuda断言错误与token超限排查思路 2026/9/29 11:23:00

部署glm4长上下文推理测试:TaoToken统一通道下cuda断言错误与token超限排查思路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
从零构建大语言模型到推理模型:完整技术栈与实操路线 2026/9/29 11:22:53

从零构建大语言模型到推理模型:完整技术栈与实操路线

最近“ai-engineering-from-scratch”这个字头又频繁出现在技术社区的收藏夹里,连带《Build a Large Language Model (From Scratch)》也成了常被问到的内容,甚至有人专门来问我有没有电子书资源。每次遇到这种问题,我都会先反问一句&#xf…

阅读更多 →
【ARM 裸机开发 (IMX6ULL-mini)】SPI 协议与ADXL345 三轴加速度传感器 2026/9/29 11:22:52

【ARM 裸机开发 (IMX6ULL-mini)】SPI 协议与ADXL345 三轴加速度传感器

文章目录前言一、SPI基础概念二、SPI的时序三、IMX6ULL上的SPI3.1 概念及原理框图3.2 相关寄存器RXDATATXDATACONREGCONFIGREGSTATREG四、ADXL345加速度传感器五、SPI初始化六、SPI读写函数七、ADXL345与IMX6ULL通信八、UART、I2C与SPI对比前言 在【ARM 裸机开发 (IMX6ULL-min…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉