A feature-rich Rust keyboard firmware.
- Support a wide range of microcontrollers: Powered by embassy, RMK supports a wide range of microcontrollers, such as stm32/nrf/rp2040/esp32
- Real-time keymap editing: RMK has built-in vial support, the keymap can be changed on-the-fly
- Advanced keyboard features: Many advanced keyboard features are available by default in RMK, such as layer switch, media control, system control, mouse control, etc
- Wireless: (Experimental) BLE wireless support with auto-reconnection/multiple devices feature for nrf52 and esp32 microcontrollers, tested on nrf52840 and esp32c3
-
[2024.04.07] BLE support for esp32 is available now on main branch, you can try the example at
boards/esp32c3_ble
andboards/esp32s3_ble
. It will be released to crates.io soon, after some additional testing. -
[2024.03.07] BLE support with auto-reconnection/multiple devices feature for nrf52840/nrf52832 has beed added to RMK! Checkout
boards/nrf52840_ble
andboards/nrf52832_ble
for details.
Click to checkout more news
-
[2024.02.18] Version
0.1.4
is just released! This release contains a new build script for generating vial config, minor API update and a brand new user documentation page. -
[2024.01.26] πrmk-template is released! Now you can create your own keyboard firmware with a single command:
cargo generate --git https://github.com/HaoboGu/rmk-template
-
[2024.01.18] RMK just released version
0.1.0
! By migrating to Embassy, RMK now has better async support, more supported MCUs and much easier usages than before. For examples, checkboards
folder!
You can use rmk-template to initialize your project.
cargo install cargo-generate
cargo generate --git https://github.com/HaoboGu/rmk-template
Then follow the steps in generated README.md
. Check RMK's User Guide for details.
Example can be found at boards
. The following is a simple
step-to-step instruction for rp2040 and stm32h7
-
Install probe-rs
cargo install probe-rs --features cli
-
Build the firmware
cd boards/rp2040 cargo build
-
Flash
If your rp2040 board is connected with a debugging probe, just use the following command to flash RMK firmware to the board:
cd boards/rp2040 cargo run
If you don't have a debugging probe, you can use
elf2uf2-rs
to flash your firmware via USB. There are several additional steps you have to do:- Install
elf2uf2-rs
:cargo install elf2uf2-rs
- Update
boards/rp2040/.cargo/config.toml
, useelf2uf2
as the flashing tool- runner = "probe-rs run --chip RP2040" + runner = "elf2uf2-rs -d"
- Connect your rp2040 board holding the BOOTSEL key, ensure that rp's USB drive appears
- Flash
Then, you will see logs like if everything goes right:
cd boards/rp2040 cargo run
Finished release [optimized + debuginfo] target(s) in 0.21s Running `elf2uf2-rs -d 'target\thumbv6m-none-eabi\release\rmk-rp2040'` Found pico uf2 disk G:\ Transfering program to pico 173.00 KB / 173.00 KB [=======================] 100.00 % 193.64 KB/s
- Install
-
Install openocd
-
Build the firmware
cd boards/stm32h7 cargo build
-
Flash
Make sure you have a debugging probe connected to your board. You can use both
probe-rs
andopenocd
to flash the firmware:# Use openocd openocd -f openocd.cfg -c "program target/thumbv7em-none-eabihf/debug/rmk-stm32h7 preverify verify reset exit" # Use probe-rs cd boards/stm32h7 cargo run
-
(Optional) Debug firmware using CMSIS-DAP
Open the project using VSCode, choose
Cortex-Debug - stm32h7
debug profile, then pressF5
, the firmware will be automatically compiled and flashed. A debug session is started after flashing. Check.vscode/tasks.json
and.vscode/launch.json
for details.
Current roadmap of RMK can be found here.
This crate requires stable Rust 1.75 and up.
RMK is licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.