rmk 0.0.6

Keyboard firmware written in Rust
Documentation

RMK

Crates.io Docs Build

Keyboard firmware for cortex-m, with layer/dynamic keymap/vial support, written in Rust and tested on stm32 and rp2040.

Prerequisites

This crate requires nightly Rust. openocd(stm32) or probe-rs(rp2040) is used for flashing & debugging.

Usage

You can build your own keyboard firmware using RMK or try built-in firmware example for stm32h7 & rp2040.

Build your own firmware

Example can be found at boards. The following is a simple step-to-step instruction for creating your own firmware:

  1. Create a rust embedded project, Add rmk to your project using cargo add rmk
  2. Choose your target, use rustup target add <your-target-name> to install the target. Here is the doc for target choosing. For example, rp2040 is Cortex-M0+, so its target is thumbv6m-none-eabi.
  3. Create .cargo/config.toml in your project's root, specify your target here. See boards/stm32h7/.cargo/config.toml
  4. Create main.rs, initialize your MCU in rtic's mod app, create usb polling task and keyboard task. See boards/stm32h7/src/main.rs

Use built-in example

rp2040

  1. Install probe-rs
       cargo install probe-rs --features cli
    
  2. Build the firmware
    cd boards/rp2040
    cargo build
    
  3. Flash it
    cd boards/rp2040
    cargo run
    

stm32h7

  1. Install openocd

  2. Build the firmware

    cd boards/stm32h7
    cargo build
    
  3. Flash

    openocd -f openocd.cfg -c "program target/thumbv7em-none-eabihf/debug/rmk-stm32h7 preverify verify reset exit"
    
  4. (Optional) Debug firmware using CMSIS-DAP

    Open the project using VSCode, press F5, 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.

Roadmap

A lot of todos at the list, any contributions are welcomed :)

  • support rp2040
  • basic keyboard functions
  • layer
  • system/media keys
  • vial support
  • eeprom
  • support embassy runtime
  • macro
  • encoder
  • RGB
  • cli tools