QMK键盘固件配置详解

前言

大家好!今天给大家带来QMK键盘固件配置的详细指南。如果你正在DIY机械键盘或者想要给自己的键盘刷固件,这篇文章绝对不容错过。QMK是目前最流行的开源键盘固件框架之一,它允许我们对键盘进行高度自定义。接下来,我们将深入了解QMK的配置项,帮助你打造一把独一无二的机械键盘!

基础配置

键盘矩阵设置

#define MATRIX_ROWS 5
#define MATRIX_COLS 15
#define MATRIX_ROW_PINS { D0, D5, B5, B6 }
#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }

这些参数定义了键盘的物理矩阵结构:

  • MATRIX_ROWS:键盘矩阵的行数
  • MATRIX_COLS:键盘矩阵的列数
  • MATRIX_ROW_PINS:行引脚定义,从上到下排列
  • MATRIX_COL_PINS:列引脚定义,从左到右排列

如果你采用替代方式处理矩阵读取,可以省略引脚定义,详情请参阅低级矩阵重写(low-level matrix overrides)。

矩阵相关配置

#define MATRIX_IO_DELAY 30
#define MATRIX_HAS_GHOST
#define MATRIX_UNSELECT_DRIVE_HIGH
#define DIODE_DIRECTION COL2ROW
  • MATRIX_IO_DELAY:更改矩阵引脚状态和读取值之间的延迟(微秒)
  • MATRIX_HAS_GHOST:定义矩阵是否有重影现象(不太常见)
  • MATRIX_UNSELECT_DRIVE_HIGH:取消选择矩阵引脚时设置为输出高电平而非输入高电平
  • DIODE_DIRECTION:二极管方向,COL2ROW表示二极管黑色标记面向行,ROW2COL表示反方向

直接引脚映射

#define DIRECT_PINS { { F1, F0, B0, C7 }, { F4, F5, F6, F7 } }

当每个按键直接连接到单独的引脚和接地时,可以使用此配置定义引脚映射。

音频功能配置

#define AUDIO_VOICES
#define AUDIO_PIN C4
#define AUDIO_PIN_ALT B5

QMK支持通过蜂鸣器或扬声器输出音频。上述配置启用音频功能并指定音频输出引脚。AUDIO_PIN_ALTAUDIO_PIN一起使用可实现双声道输出。

💡 小知识:QMK音频功能不仅可以播放简单的提示音,还能演奏整首歌曲!你可以用它来设置开机音乐,甚至可以在打字时播放音效。

背光配置

#define BACKLIGHT_PIN B7
#define BACKLIGHT_LEVELS 3
#define BACKLIGHT_BREATHING
#define BREATHING_PERIOD 6

这些选项用于配置键盘背光:

  • BACKLIGHT_PIN:背光控制引脚
  • BACKLIGHT_LEVELS:背光亮度级别数(最多31级,不包括关闭状态)
  • BACKLIGHT_BREATHING:启用背光呼吸效果
  • BREATHING_PERIOD:一个背光"呼吸"周期的时长(秒)

按键行为配置

#define DEBOUNCE 5
#define TAPPING_TERM 200
#define TAPPING_TERM_PER_KEY
#define RETRO_TAPPING
#define PERMISSIVE_HOLD
#define QUICK_TAP_TERM 100

这部分涉及按键检测和双功能键的行为设置:

  • DEBOUNCE:按键去抖动延迟(默认5ms)
  • TAPPING_TERM:点按变为长按的时间阈值(毫秒)
  • TAPPING_TERM_PER_KEY:启用针对每个键单独设置TAPPING_TERM
  • RETRO_TAPPING:如果在TAPPING_TERM时间内按下并释放键,且期间没有其他键干扰,则仍视为点击
  • PERMISSIVE_HOLD:如果在释放前按下另一个键,即使未到TAPPING_TERM时间也触发长按功能
  • QUICK_TAP_TERM:定义双角色键重复激活的时间窗口

高级特性配置

鼠标键配置

#define MOUSEKEY_INTERVAL 20
#define MOUSEKEY_DELAY 0
#define MOUSEKEY_TIME_TO_MAX 60
#define MOUSEKEY_MAX_SPEED 7
#define MOUSEKEY_WHEEL_DELAY 0

这些参数控制键盘模拟鼠标时的行为特性,可以调整速度和加速度等参数。

拆分键盘配置

#define SPLIT_HAND_PIN B7
#define EE_HANDS
#define MASTER_RIGHT
#define USE_I2C
#define SOFT_SERIAL_PIN D0
#define SPLIT_USB_DETECT
#define SPLIT_TRANSPORT_MIRROR

拆分键盘(如Ergodox、Corne等)需要这些特殊配置来实现两半部分的通信和协调:

  • SPLIT_HAND_PIN:通过引脚电平确定左右手(高=左,低=右)
  • EE_HANDS:从EEPROM读取左右手信息
  • MASTER_RIGHT:定义右半部分为主控端(默认左半部分为主控)
  • USE_I2C:使用I2C而非串行通信(默认串行)
  • SOFT_SERIAL_PIN:使用软串行时的通信引脚
  • SPLIT_USB_DETECT:检测USB连接以决定主从关系
  • SPLIT_TRANSPORT_MIRROR:在从机上镜像主机矩阵状态

💡 进阶提示:拆分键盘设计中,需要特别注意两半之间的通信延迟问题。如果遇到响应滞后,可以尝试调整通信速率或切换通信方式。

USB端点配置和兼容性

QMK通过USB端点提供各种功能,但每个微控制器的端点资源有限。以下功能可能会占用单独的端点:

  • MOUSEKEY_ENABLE
  • EXTRAKEY_ENABLE
  • CONSOLE_ENABLE
  • NKRO_ENABLE
  • MIDI_ENABLE
  • RAW_ENABLE
  • VIRTSER_ENABLE

为了优化资源使用,QMK默认会合并一些功能到同一端点。但这可能带来兼容性问题:

KEYBOARD_SHARED_EP = yes
MOUSE_SHARED_EP = no
  • KEYBOARD_SHARED_EP = yes:将基本键盘功能合并到一个端点,但可能在某些BIOS中不兼容
  • MOUSE_SHARED_EP = no:取消鼠标功能的合并,以保持Boot Mouse兼容性

⚠️ 重要提示:组合鼠标会破坏Boot Mouse的兼容性。如果需要保持兼容性,请设置MOUSE_SHARED_EP = no

rules.mk文件配置

除了config.h外,QMK还使用rules.mk文件来配置编译选项:

DEFAULT_FOLDER = keyboard/default
FIRMWARE_FORMAT = bin
SRC += my_custom.c
LIB_SRC += lib_custom.c
LAYOUTS = 60_ansi 60_iso
LTO_ENABLE = yes

主要的功能选项包括:

MAGIC_ENABLE = yes        # 魔术键功能
BOOTMAGIC_ENABLE = yes    # 启用Bootmagic
MOUSEKEY_ENABLE = yes     # 鼠标键
EXTRAKEY_ENABLE = yes     # 音频控制和系统控制
CONSOLE_ENABLE = no       # 调试控制台
COMMAND_ENABLE = no       # 调试和配置命令
NKRO_ENABLE = yes         # USB N-Key无冲
AUDIO_ENABLE = yes        # 音频子系统
RGBLIGHT_ENABLE = yes     # RGB灯光
SPLIT_KEYBOARD = yes      # 分体式键盘支持

总结

通过QMK的丰富配置选项,我们可以实现键盘的高度定制化。从简单的矩阵定义到复杂的分体键盘通信,从基础按键去抖到花哨的RGB灯效,QMK几乎能满足所有DIY键盘爱好者的需求。

希望这篇教程对你有所帮助!如果你还有疑问,欢迎在评论区留言交流。记得点赞收藏,下期再见!


参考资料

  • QMK官方文档
  • QMK GitHub仓库
  • 机械键盘DIY社区

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/80735.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/80735.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/80735.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于STM32、HAL库的DPS368XTSA1气压传感器 驱动程序设计

一、简介: DPS368XTSA1 是 InvenSense(TDK 集团旗下公司)生产的一款高精度数字气压传感器,专为需要精确测量气压和温度的应用场景设计。它具有超低功耗、高精度、快速响应等特点,非常适合物联网、可穿戴设备和无人机等应用。 二、硬件接口: DPS368XTSA1 引脚STM32L4XX 引…

因子分析——数学原理及R语言代码

正交因子分析 目的数学原理参数估计方法主成分法主因子法极大似然法 因子旋转模型检验因子得分加权最小二乘法回归法 代码实现注意事项例子 Reference 目的 FactorAnalysis的目的是从多个高度相关的观测变量中提取出少数几个LatentFactor,这些因子代表了变量背后的…

ACL访问控制列表:access-list 10 permit 192.168.10.1

ACL访问控制列表 标准ACL语法 1. 创建ACL access-list <编号> <动作> <源IP> <通配符掩码> // 编号范围 1-99 // 动作&#xff1a;permit 允许 、 deny 拒绝2. 示例 //允许192.168.1.0/24g整个网络,0.0.0.255 反掩码 access-list 10 permit 192.1…

解决社区录音应用横屏状态下,录音后无法播放的bug

最近看到社区有小伙伴反映&#xff0c;社区录音应用横屏时&#xff0c;录音后无法播放的问题。现分享解决办法。 社区录音应用的来源&#xff1a;https://gitee.com/openharmony/applications_app_samples/tree/OpenHarmony-5.0.2-Release/code/SystemFeature/Media/Recorder …

每周靶点分享:Angptl3、IgE、ADAM9及文献分享:抗体的多样性和特异性以及结构的新见解

本期精选了《脂质代谢的关键调控者Angptl3》《T细胞活化抑制因子VISTA靶点》《文献分享&#xff1a;双特异性抗体重轻链配对设计》三篇文章。以下为各研究内容的概述&#xff1a; 1. 脂质代谢的关键调控者Angptl3 血管生成素相关蛋白3&#xff08;Angptl3&#xff09;是血管生…

保持Word中插入图片的清晰度

大家有没有遇到这个问题&#xff0c;原本绘制的高清晰度图片&#xff0c;插入word后就变模糊了。先说原因&#xff0c;word默认启动了自动压缩图片功能&#xff0c;分享一下如何关闭这项功能&#xff0c;保持Word中插入图片的清晰度。 ①在Word文档中&#xff0c;点击左上角的…

Datawhale AI春训营 day

待补充 2025星火杯应用赛入门应用 创空间 魔搭社区 {"default": {"system": "你是星火大模型&#xff0c;一个由科大讯飞研发的人工智能助手。请用简洁、专业、友好的方式回答问题。","description": "默认系统提示词"}…

项目全栈实战-基于智能体、工作流、API模块化Docker集成的创业分析平台

目录 思维导图 前置知识 Docker是什么&#xff1f; Docker的核心概念&#xff1a; Docker在本项目中的作用 1. 环境隔离与一致性 2. 简化部署流程 3. 资源管理与扩展性 4. 服务整合与通信 5. 版本控制和回滚 6. 开发与生产环境一致性 总结 前端 1.小程序 2.web …

正则表达式实用指南:原理、场景、优化与引擎对比

正则表达式实用指南&#xff1a;原理、场景、优化与引擎对比 正则表达式&#xff08;Regular Expression&#xff0c;简称 regex 或 regexp&#xff09;是程序员处理文本数据时不可或缺的“瑞士军刀”。无论是表单校验、日志分析、数据清洗&#xff0c;还是敏感信息脱敏&#…

OSCP - Hack The Box - Sau

主要知识点 CVE-2023-27163漏洞利用systemd提权 具体步骤 执行nmap扫描&#xff0c;可以先看一下55555端口 Nmap scan report for 10.10.11.224 Host is up (0.58s latency). Not shown: 65531 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp o…

5.1.1 WPF中Command使用介绍

WPF 的命令系统是一种强大的输入处理机制,它比传统的事件处理更加灵活和可重用,特别适合 MVVM (Model, View, ViewModel)模式开发。 一、命令系统核心概念 1.命令系统基本元素: 命令(Command): 即ICommand类,使用最多的是RoutedCommand,也可以自己继承ICommand使用自定…

Dagster Pipes系列-2:增强外部脚本与Dagster的交互能力

在现代数据工程中&#xff0c;自动化和监控是确保数据管道高效运行的关键因素。Dagster作为一款强大的数据编排工具&#xff0c;提供了多种方式来实现这些目标。本文将深入探讨如何使用Dagster Pipes修改外部代码&#xff0c;以实现日志记录、结构化元数据报告以及资产检查等功…

C++类和对象进阶 —— 与数据结构的结合

&#x1f381;个人主页&#xff1a;工藤新一 &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录 […

Java中进阶并发编程

第一章、并发编程的挑战 并发和并行&#xff1a;指多线程或多进程 线程的本质&#xff1a;操作系统能够进行运算调度的最小单位&#xff0c;是进程&#xff08;Process&#xff09;中的实际工作单元 进程的本质&#xff1a;操作系统进行资源分配和调度的基本单位&#xff0c…

《 指针变量类型与内存访问:揭秘背后的奥秘》

&#x1f680;个人主页&#xff1a;BabyZZの秘密日记 &#x1f4d6;收入专栏&#xff1a;C语言 &#x1f30d;文章目入 一、指针变量类型的基本概念二、指针类型与内存访问字节数的关系&#xff08;一&#xff09;整型指针&#xff08;二&#xff09;字符型指针&#xff08;三&…

mapbox进阶,使用mapbox-plugins插件加载饼状图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.1 ☘️mapboxgl.Map style属性二、🍀使用mapbox-plugins插件加载饼状图1. ☘…

GraphicLayer与BusineDataLayer层级控制

补充说明&#xff1a; 当参与层级控制的元素是点型元素时&#xff0c;是无法参与ZIndex层级控制的&#xff0c;此时可以换个解决方案 1.给不同的高度值实现&#xff0c;元素间的层级控制覆盖 import * as mars3d from "mars3d"export let map // mars3d.Map三维地…

uniapp 百家云直播插件打包失败

打包错误日志 Android自有证书 打包失败 错误日志: https://app.liuyingyong.cn/build/errorLog/cf41a610-effe-11ef-88db-05262d4c3e5d原因&#xff1a;需要导入插件依赖 依赖地址&#xff1a;https://ext.dcloud.net.cn/plugin?id16289 百家云直播插件地址 直播插…

【C++】”如虎添翼“:模板初阶

泛型编程&#xff1a; C中一种使用模板来实现代码重用和类型安全的编程范式。它允许程序员编写与数据类型无关的代码&#xff0c;从而可以用相同的代码逻辑处理不同的数据类型。模板是泛型编程的基础 模板分为两类&#xff1a; 函数模板&#xff1a;代表了一个函数家族&#x…

十五、多态与虚函数

十五、多态与虚函数 15.1 引言 面向对象编程的基本特征&#xff1a;数据抽象&#xff08;封装&#xff09;、继承、多态基于对象&#xff1a;我们创建类和对象&#xff0c;并向这些对象发送消息多态&#xff08;Polymorphism&#xff09;&#xff1a;指的是相同的接口、不同的…