Apex Pro Mini
Overview
The Steelseries Apex Pro Mini is a mechanical keyboard based on an ARM Cortex-M4 based STM32L412RB MCU.
STM32 microcontroller in LQFP64 package
62 keys
62 RGB LEDs
USB-C port
In includes the following peripherals:
Lumissil IS31FL3743B LED driver
FMSH FM25Q128 128Mbits serial flash memory
Note
This driver was developed using the French AZERTY keyboard version, on which ENTER is 2U high. QWERTY versions have 61 keys and not 62, with:
An additional K29 BACKSLASH key above ENTER
K45 SUP removed to fit a wider left shift
K42 STAR removed to fit the ENTER key
Installation
The keyboard has a 2.54mm through-hole header for SWD under the space bar. It can be programmed with STLink or any other STM32-compatible probe. The pinout is indicated by the board silkscreen:
3V3 |
SWDIO |
SWCLK |
nRST |
GND |
In order to be able to flash the new firmware, the factory firmware has to be completely erased in order to remove the STM32L4 flash protection. In order to do this process:
Open STM32CubeProgrammer and connect the target
In OB section, check “PCROP_RDB”
In PCROP Protection, write PCROP_START value as 0xFFFF and PCROP_END as 0x0 (end before start disables the protection)
In Write Protection, write WRP1A_STRT and WRP1B_STRT values as 0x3F and WRP1A_END and WRP1B_END as 0x0 (same, end before start disables the protection)
Then, go to Read Out Protection and select “AA” instead of “BB”
Be mindful that the PCROP protection is only disabled when the ROP value is decreased, from BB to AA, so if the process fails, you will have to set the ROP bit as “BB” again and make sure PCROP_RDP is properly checked.
Hardware
Supported Features
Note
The LED driver is not currently supported.
The apex_pro_mini
board supports the hardware features listed below.
- on-chip / on-board
- Feature integrated in the SoC / present on the board.
- 2 / 2
-
Number of instances that are enabled / disabled.
Click on the label to see the first instance of this feature in the board/SoC DTS files. -
vnd,foo
-
Compatible string for the Devicetree binding matching the feature.
Click on the link to view the binding documentation.
apex_pro_mini/stm32l412xx
target
Type |
Location |
Description |
Compatible |
---|---|---|---|
CPU |
on-chip |
ARM Cortex-M4F CPU1 |
|
ADC |
on-chip |
STM32 ADC2 |
|
Clock control |
on-chip |
STM32 RCC (Reset and Clock controller)1 |
|
on-chip |
STM32 HSE Clock1 |
||
on-chip |
Generic fixed-rate clock provider3 |
||
on-chip |
STM32 MSI Clock1 |
||
on-chip |
STM32 LSE Clock1 |
||
on-chip |
STM32L4/L5 main PLL1 |
||
on-chip |
PLLSAI node binding for STM32L4 device1 |
||
on-chip |
STM32 Microcontroller Clock Output (MCO)1 |
||
Counter |
on-chip |
STM32 counters4 |
|
DMA |
on-chip |
STM32 DMA controller (V2)2 |
|
Flash controller |
on-chip |
STM32 Family flash controller1 |
|
GPIO & Headers |
on-chip |
STM32 GPIO Controller4 |
|
I2C |
on-chip |
STM32 I2C V2 controller3 |
|
I2S |
on-chip |
STM32 SAI controller2 |
|
Input |
on-board |
GPIO based keyboard matrix input device1 |
|
on-board |
Row-column to key mapper1 |
||
Interrupt controller |
on-chip |
ARMv7-M NVIC (Nested Vectored Interrupt Controller)1 |
|
on-chip |
STM32 External Interrupt Controller1 |
||
LED |
on-board |
Group of GPIO-controlled LEDs1 |
|
MTD |
on-chip |
STM32 flash memory1 |
|
on-board |
Properties supporting Zephyr spi-nor flash driver (over the Zephyr SPI API) control of serial flash memories using the standard M25P80-based command set1 |
||
on-board |
Fixed partitions of a flash (or other non-volatile storage) memory1 |
||
PHY |
on-chip |
This binding is to be used by all the usb transceivers which are built-in with USB IP1 |
|
Pin control |
on-chip |
STM32 Pin controller1 |
|
Power management |
on-chip |
STM32 power controller1 |
|
PWM |
on-chip |
||
QSPI |
on-chip |
STM32 QSPI Controller1 |
|
Reset controller |
on-chip |
STM32 Reset and Clock Control (RCC) Controller1 |
|
RNG |
on-chip |
STM32 Random Number Generator1 |
|
RTC |
on-chip |
STM32 RTC1 |
|
Sensors |
on-chip |
STM32 family TEMP node for production calibrated sensors with two calibration temperatures1 |
|
on-chip |
STM32 VREF+1 |
||
on-chip |
STM32 VBAT1 |
||
Serial controller |
on-chip |
||
on-chip |
STM32 LPUART1 |
||
SMbus |
on-chip |
STM32 SMBus controller3 |
|
SPI |
on-chip |
STM32 SPI controller with embedded Rx and Tx FIFOs2 |
|
Timer |
on-chip |
ARMv7-M System Tick1 |
|
on-chip |
|||
on-chip |
STM32 low-power timer (LPTIM)2 |
||
USB |
on-chip |
STM32 USB controller1 |
|
Watchdog |
on-chip |
STM32 watchdog1 |
|
on-chip |
STM32 system window watchdog1 |
Connections and IOs
Peripheral Mapping:
Flash driver on SPI1: PB3/PB4/PA5/PA15
LED controller on SPI2: PB12/PB13/PA14/PA15
Key columns C1-C14: PA0/PA1/PA2/PA3/PA4/PA5/PA6/PA7/PC4/PC5/PC0/PC3/PC1/PC2
Key rows R1-R5: PA11/PB10/PB2/PB1/PB0
SWD debug port: PA13/PA14
USB port: PA11/PA12
Testpoints: PA8/PB6/PB8/PB9/PC10/PC11/PC12/PC13/PC14/PC15/PC8/PC9/PD2
Keyboard Mapping:
Key column |
C1 |
C2 |
C3 |
C4 |
C5 |
C6 |
C7 |
C8 |
C9 |
C10 |
C11 |
C12 |
C13 |
C14 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
GPIO |
PA0 |
PA1 |
PA2 |
PA3 |
PA4 |
PA5 |
PA6 |
PA7 |
PC4 |
PC5 |
PC0 |
PC1 |
PC2 |
PC3 |
Key row |
R1 |
R2 |
R3 |
R4 |
R5 |
---|---|---|---|---|---|
GPIO |
PB11 |
PB10 |
PB2 |
PB1 |
PB0 |
The following array describes to the electrical connections, not to the geometric positions. Notice how K15 (BACKSPACE) is addressed by column 12, row 5 but is positioned in the top right corner, next to K13.
C1 |
C2 |
C3 |
C4 |
C5 |
C6 |
C7 |
C8 |
C9 |
C10 |
C11 |
C12 |
C13 |
C14 |
|
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
R1 |
K1 |
K2 |
K3 |
K4 |
K5 |
K6 |
K7 |
K8 |
K9 |
K10 |
K11 |
K12 |
K13 |
|
R2 |
K16 |
K17 |
K18 |
K19 |
K20 |
K21 |
K22 |
K23 |
K24 |
K25 |
K26 |
K27 |
K28 |
|
R3 |
K30 |
K31 |
K32 |
K33 |
K34 |
K35 |
K36 |
K37 |
K38 |
K39 |
K40 |
K41 |
K42 |
K43 |
R4 |
K44 |
K45 |
K46 |
K47 |
K48 |
K49 |
K50 |
K51 |
K52 |
K53 |
K54 |
K55 |
K57 |
|
R5 |
K58 |
K59 |
K60 |
K62 |
K65 |
K66 |
K67 |
K68 |
K15 |
LED Driver Mapping:
This is the mapping for LEDs on the Lumissil driver.
Function |
Color |
Area |
---|---|---|
CS1 |
Blue |
K1-K11 |
CS2 |
Green |
K1-K11 |
CS3 |
Red |
K1-K11 |
CS4 |
Blue |
K16-K26 |
CS5 |
Green |
K16-K26 |
CS6 |
Red |
K16-K26 |
CS7 |
Blue |
K30-K40 |
CS8 |
Green |
K30-K40 |
CS9 |
Red |
K30-K40 |
CS10 |
Blue |
K44-K54 |
CS11 |
Green |
K44-K54 |
CS12 |
Red |
K44-K54 |
CS13 |
Blue |
K55,K56,K58-K68 |
CS14 |
Green |
K55,K56,K58-K68 |
CS15 |
Red |
K55,K56,K58-K68 |
CS16 |
Blue |
K12-K15,K27-K29,K41-K43,K57 |
CS17 |
Green |
K12-K15,K27-K29,K41-K43,K57 |
CS18 |
Red |
K12-K15,K27-K29,K41-K43,K57 |
Function |
Column keys |
---|---|
SW1 |
K1, K12, K16, K30, K43, K44, K58, K68 |
SW2 |
K2, K13, K17, K31, K45, K59 |
SW3 |
K3, K14, K18, K32, K46, K60 |
SW4 |
K4, K15, K19, K33, K47, K62 |
SW5 |
K5, K20, K27, K34, K48 |
SW6 |
K6, K21, K28, K35, K49 |
SW7 |
K7, K22, K29, K36, K50, K56, K65, K66 |
SW8 |
K8, K23, K37, K41, K51 |
SW9 |
K9, K24, K38, K42, K52, K67 |
SW10 |
K10, K25, K29, K39, K53 |
SW11 |
K11, K26, K40, K54, K55, K57 |