衡山派Luban-Lite系统GPIO与PinMux参数配置详解
衡山派Luban-Lite系统GPIO与PinMux参数配置详解最近在衡山派开发板上做项目经常需要配置各种外设的引脚功能比如让某个引脚作为串口发送数据或者作为GPIO去控制一个LED。很多刚开始接触Luban-Lite系统的朋友可能会有点懵这些引脚功能到底在哪配怎么配今天我就结合自己实际踩过的坑给大家手把手梳理一下衡山派Luban-Lite系统中GPIO和PinMux的配置方法。这篇文章就是为你准备的无论你是刚拿到衡山派开发板还是正在为某个外设调不通引脚而发愁跟着下面的步骤走你就能搞清楚整个配置流程。我们会讲到如何开启GPIO中断功能、如何集中管理所有引脚的复用功能PinMux以及如何在驱动代码里灵活使用GPIO引脚。1. GPIO中断驱动配置让引脚能“打断”CPU首先咱们聊聊GPIO中断。想象一下你有一个按键接在GPIO上你当然可以用程序不停地去“读”这个引脚的状态这叫轮询但这很浪费CPU时间。更好的方式是使用中断——当按键被按下引脚电平变化这个事件会像一个“紧急通知”一样打断CPU正在做的事CPU立刻去处理你的按键程序。这就是中断的好处。在Luban-Lite里GPIO驱动是系统核心的一部分默认就编译进去了所以你不需要特意去菜单里打开它。但是GPIO中断注册这个具体功能是需要我们手动开启的。操作很简单跟着我做打开终端进入你的Luban-Lite源码根目录。输入命令scons --menuconfig并回车。这会打开一个图形化的配置界面。在这个界面里用键盘方向键导航找到并进入Drivers options这个菜单。在里面你应该能看到一个选项叫support gpio irq register。按空格键选中它前面会出现一个[*]星号表示已启用。最后按几次ESC键退出并记得保存配置。提示menuconfig的界面操作逻辑是回车进入子菜单空格键切换选中状态[ ]为未选[*]为选中左右键切换底部菜单如 Select Exit Help ESC键返回上级。启用这个选项后系统就支持你用hal_gpio_irq_register()这样的函数来给GPIO引脚注册中断服务函数了。具体的中断注册和使用代码这里不展开你只需要知道想用中断先得把这里打开。2. 目标板PinMux集中配置给引脚分配“工作岗位”接下来是重头戏PinMux配置。PinMux是“Pin Multiplexing”的缩写即引脚复用。芯片上的一个物理引脚往往身兼数职它既可以是普通的GPIO也可以是串口UART的发送脚还可以是I2C的时钟线……具体让它干什么就是由PinMux配置决定的。在Luban-Lite里这个配置非常清晰所有引脚的复用功能都集中在一个文件里管理方便我们查阅和修改。这个文件就在你目标板的目录下luban-lite/target/$芯片型号/$开发板型号/pinmux.c你需要把$芯片型号和$开发板型号替换成你实际使用的比如hs-xxxx和evb。咱们打开这个pinmux.c文件看看里面到底长啥样。它的核心是一个结构体数组aic_pinmux_config[]我把它拆解开用注释给你讲明白struct aic_pinmux aic_pinmux_config[] { // 示例1配置UART0的引脚 #ifdef AIC_USING_UART0 // 如果系统配置中使能了UART0下面的配置才生效 /* uart0 */ {5, PIN_PULL_DIS, 3, PA.0}, // 引脚PA.0功能5禁止上下拉驱动强度3 {5, PIN_PULL_DIS, 3, PA.1}, // 引脚PA.1功能5禁止上下拉驱动强度3 #endif // 示例2配置I2C3的引脚 #ifdef AIC_USING_I2C3 // 如果系统配置中使能了I2C3下面的配置才生效 {1, PIN_PULL_DIS, 3, PA.8}, // RST - 功能1禁止上下拉驱动强度3 {1, PIN_PULL_DIS, 3, PA.9}, // INT - 功能1禁止上下拉驱动强度3 {4, PIN_PULL_DIS, 3, PA.10}, // SCK - 功能4禁止上下拉驱动强度3 {4, PIN_PULL_DIS, 3, PA.11}, // SDA - 功能4禁止上下拉驱动强度3 #endif };这个结构体有四个成员我挨个解释功能编号 (func)一个数字对应这个引脚要工作在哪种模式。这个数字具体代表什么功能你必须查阅衡山派对应芯片的数据手册比如对于PA.0这个引脚数字“5”可能代表它作为UART0_TX功能。不同芯片、不同引脚这个映射关系完全不同千万不能猜。上下拉配置 (bias)控制引脚内部的上拉或下拉电阻。常用值有PIN_PULL_DIS禁止上下拉浮空。PIN_PULL_UP启用内部上拉电阻。PIN_PULL_DOWN启用内部下拉电阻。驱动强度 (drive)一个数字表示引脚输出电流的能力。数字越大驱动能力越强但功耗也可能更高。一般默认用3即可高速或驱动大负载时可能需要调整。引脚名称 (name)字符串格式为P组号.引脚号例如PA.0、PE.6。这个命名规则一定要遵循。注意功能编号func是配置中最容易出错的地方。务必、务必、务必去找到官方提供的《引脚功能定义表》或数据手册相关章节确认你使用的引脚其对应的功能编号是多少。配置错了外设肯定无法工作。配置好这个数组后系统初始化时会调用aic_board_pinmux_init()函数。这个函数干了一件聪明事它遍历我们上面写的配置数组把字符串形式的引脚名如PA.0通过hal_gpio_name2pin()函数转换成芯片内部能识别的引脚编号然后依次设置功能、上下拉和驱动强度。所以你以后要添加或修改某个外设的引脚基本就是在这个aic_pinmux_config数组里增删改条目非常直观。3. 模块化GPIO管脚配置驱动代码里的灵活用针上面讲的PinMux是给引脚定“大方向”是UART还是I2C。但有时候某个驱动模块除了主要功能还需要用到一两个普通的GPIO脚来做辅助控制。比如GMAC以太网驱动需要用一个GPIO来控制PHY芯片的复位。而且这个辅助用的GPIO引脚在不同型号的开发板上可能还不一样。Luban-Lite采用了一种很灵活的配置方法分两步走第一步在 menuconfig 中配置GPIO名称我们还是打开scons --menuconfig。这次我们需要到具体驱动模块的配置项里去设置。导航到Board options菜单。找到你要配置的模块比如[*] Using Gmac0确保它被选中。进入这个模块的子菜单例如gmac0 parameter ---。你会看到类似(PE.6) gmac0 phy reset gpio的配置项。括号()里的PE.6就是默认值你可以直接修改它比如改成PC.12。这个配置的本质就是定义了一个字符串常量例如AIC_DEV_GMAC0_PHYRST_GPIO它的值就是你在这里输入的PE.6。第二步在驱动代码中解析并使用这个GPIO配置好的GPIO名称在驱动代码里怎么用呢看下面的实例// 1. 将字符串形式的GPIO名称转换为引脚编号 long pin hal_gpio_name2pin(AIC_DEV_GMAC0_PHYRST_GPIO); // 假设AIC_DEV_GMAC0_PHYRST_GPIO PE.6 if (pin 0) { // 转换失败可能是名称写错了 printf(GPIO name parse error!\n); return; } // 2. 从引脚编号中分解出组(group)和组内引脚号(pin) unsigned int g GPIO_GROUP(pin); unsigned int p GPIO_GROUP_PIN(pin); // 3. 配置并使用这个GPIO hal_gpio_direction_output(g, p); // 设置为输出模式 hal_gpio_clr_output(g, p); // 输出低电平 (拉低复位) aicos_mdelay(50); // 延时50毫秒确保复位信号有效 hal_gpio_set_output(g, p); // 输出高电平 (释放复位) aicos_mdelay(50); // 再延时等待PHY芯片稳定这段代码做了三件事名称转换hal_gpio_name2pin这个函数是关键它把PE.6这样的字符串转换成系统内部统一的引脚ID。如果返回负数说明你menuconfig里写的引脚名格式不对或者不存在。分解引脚GPIO_GROUP和GPIO_GROUP_PIN是两个宏用来从引脚ID里提取出“组”如E组和“组内序号”如6因为后续的GPIO操作函数通常需要这两个参数。操作引脚接下来就是标准的GPIO操作了设置为输出然后拉低、延时、拉高完成一个复位时序。这种做法的好处是硬件板子变了你只需要改menuconfig里的一个配置字符串驱动代码完全不用动大大提高了代码对不同硬件适配的灵活性。好了关于衡山派Luban-Lite系统的GPIO和PinMux配置核心就是这三块内容。实际开发中最常打交道的也就是pinmux.c文件和menuconfig配置。刚开始可能会觉得有点繁琐但习惯之后你会发现这种集中、模块化的配置方式非常清晰尤其是项目后期需要调整引脚时能很快定位到位置。希望这篇教程能帮你扫清入门路上的一个障碍。

相关新闻

文脉定序系统Docker镜像使用详解与Compose编排

文脉定序系统Docker镜像使用详解与Compose编排

文脉定序系统Docker镜像使用详解与Compose编排 你是不是也遇到过这样的情况:好不容易找到一个看起来很有用的AI工具,比如文脉定序系统,但一看安装说明,又是Python环境,又是各种依赖包,还有数据库、缓存要配…

2026/7/4 5:50:11 阅读更多 →
140个企业级实战场景剖析以及AI大模型实战

140个企业级实战场景剖析以及AI大模型实战

面试实战来了《140个企业级实战场景》,给大家准备了详细的资料以及解答视频,扫码免费领取,涵盖保险、银行、OA系统实战,从方法论到技术栈植入。以及深入JVM底层原理,包含内存模型、GC调优、Arthas诊断等12个模块。解析…

2026/7/3 13:34:15 阅读更多 →
DAMO-YOLO TinyNAS在智慧零售中的人流分析应用

DAMO-YOLO TinyNAS在智慧零售中的人流分析应用

DAMO-YOLO TinyNAS在智慧零售中的人流分析应用 1. 引言 走进任何一家现代零售店,你都会看到这样的场景:顾客在货架间穿梭,时而驻足挑选,时而匆匆走过。对于店主来说,这些看似普通的行为背后隐藏着巨大的商业价值——…

2026/5/17 12:01:45 阅读更多 →

最新新闻

锂电硬件级过压保护方案设计与STM32实现

锂电硬件级过压保护方案设计与STM32实现

1. 项目背景与核心器件选型锂离子电池因其高能量密度和长循环寿命,已成为便携式电子设备和储能系统的首选电源方案。但过充电是导致锂离子电池热失控甚至起火爆炸的主要诱因之一,这让我在去年开发户外储能电源时深有体会。当时测试组反馈,在快…

2026/7/5 15:58:53 阅读更多 →
Gemma-4 E4B技术深度解析:如何用4.5B有效参数实现多模态智能

Gemma-4 E4B技术深度解析:如何用4.5B有效参数实现多模态智能

Gemma-4 E4B技术深度解析:如何用4.5B有效参数实现多模态智能 【免费下载链接】gemma-4-E4B 项目地址: https://ai.gitcode.com/hf_mirrors/google/gemma-4-E4B 当你面对一个需要同时处理文本、图像、音频和视频的AI项目时,是否曾为选择合适模型而…

2026/7/5 15:56:41 阅读更多 →
Vue3企业级数据可视化大屏架构设计:应对多分辨率适配与实时渲染挑战

Vue3企业级数据可视化大屏架构设计:应对多分辨率适配与实时渲染挑战

Vue3企业级数据可视化大屏架构设计:应对多分辨率适配与实时渲染挑战 【免费下载链接】IofTV-Screen-Vue3 一个基于 vue3、vite、Echart 框架的大数据可视化(大屏展示)模板 项目地址: https://gitcode.com/gh_mirrors/io/IofTV-Screen-Vue3 …

2026/7/5 15:56:41 阅读更多 →
Gin-Vue-Admin代码生成器字段编辑:5个深度优化技巧与架构解析

Gin-Vue-Admin代码生成器字段编辑:5个深度优化技巧与架构解析

Gin-Vue-Admin代码生成器字段编辑:5个深度优化技巧与架构解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin的开发基础平台,支持TS和JS混用。它集成了JWT鉴权、权限管理、动态路由、显隐可控组件、分页封装、多点登录拦截、资源权限、上传下…

2026/7/5 15:54:41 阅读更多 →
3分钟掌握 facetype.js:终极字体转换工具完全指南

3分钟掌握 facetype.js:终极字体转换工具完全指南

3分钟掌握 facetype.js:终极字体转换工具完全指南 【免费下载链接】facetype.js typeface.js generator 项目地址: https://gitcode.com/gh_mirrors/fa/facetype.js facetype.js 是一个强大的在线字体转换工具,专门用于将标准字体文件转换为 type…

2026/7/5 15:54:41 阅读更多 →
DINOv3:重新定义视觉基础模型的无监督学习范式

DINOv3:重新定义视觉基础模型的无监督学习范式

DINOv3:重新定义视觉基础模型的无监督学习范式 【免费下载链接】dinov3 Reference PyTorch implementation and models for DINOv3 项目地址: https://gitcode.com/GitHub_Trending/di/dinov3 在计算机视觉领域,大规模预训练模型正经历着从监督学…

2026/7/5 15:54:41 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻