@ -0,0 +1,21 @@ | |||
/* Copyright 2020 QMK | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
* the Free Software Foundation, either version 2 of the License, or | |||
* (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU General Public License | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
*/ | |||
#pragma once | |||
#define CH_CFG_ST_FREQUENCY 10000 | |||
#include_next <chconf.h> |
@ -0,0 +1,31 @@ | |||
/* Copyright 2021 QMK | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
* the Free Software Foundation, either version 2 of the License, or | |||
* (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU General Public License | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
*/ | |||
#pragma once | |||
#include "config_common.h" | |||
#define BACKLIGHT_PWM_DRIVER PWMD5 | |||
#define BACKLIGHT_PWM_CHANNEL 1 | |||
#define BACKLIGHT_PAL_MODE 2 | |||
#define ADC_PIN A0 | |||
#define RGB_CI_PIN A2 | |||
#define SOLENOID_PIN B12 | |||
#define SOLENOID_PINS { B12, B13, B14, B15 } | |||
#define SOLENOID_PINS_ACTIVE_STATE { high, high, low } |
@ -0,0 +1,25 @@ | |||
/* Copyright 2021 QMK | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
* the Free Software Foundation, either version 2 of the License, or | |||
* (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU General Public License | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
*/ | |||
#pragma once | |||
#define HAL_USE_ADC TRUE | |||
#define HAL_USE_I2C TRUE | |||
#define HAL_USE_PWM TRUE | |||
#include_next <halconf.h> |
@ -0,0 +1,16 @@ | |||
{ | |||
"keyboard_name": "Onekey Blackpill STM32F401 TinyUF2", | |||
"processor": "STM32F401", | |||
"bootloader": "tinyuf2", | |||
"board": "BLACKPILL_STM32_F401", | |||
"matrix_pins": { | |||
"cols": ["B0"], | |||
"rows": ["A7"] | |||
}, | |||
"backlight": { | |||
"pin": "A0" | |||
}, | |||
"rgblight": { | |||
"pin": "A1" | |||
} | |||
} |
@ -0,0 +1,28 @@ | |||
/* Copyright 2021 QMK | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
* the Free Software Foundation, either version 3 of the License, or | |||
* (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU General Public License | |||
* along with this program. If not, see <https://www.gnu.org/licenses/>. | |||
*/ | |||
#pragma once | |||
#include_next "mcuconf.h" | |||
#undef STM32_ADC_USE_ADC1 | |||
#define STM32_ADC_USE_ADC1 TRUE | |||
#undef STM32_I2C_USE_I2C1 | |||
#define STM32_I2C_USE_I2C1 TRUE | |||
#undef STM32_PWM_USE_TIM5 | |||
#define STM32_PWM_USE_TIM5 TRUE |
@ -0,0 +1,9 @@ | |||
# F401 Blackpill onekey | |||
* Supported Hardware: STM32F401CCU6 WeAct v1.3 | |||
To trigger keypress, short together pins *B0* and *A7*. | |||
This variant requires the TinyUF2 bootloader to be installed. This can be downloaded from the [tinyuf2 releases page](https://github.com/adafruit/tinyuf2/releases). The F401 blackpill binary works for both F401- and F411-based blackpill devices. | |||
Double-tap reset to enter bootloader mode. Copy the built uf2 file to the device by dragging the file to the new USB disk. |
@ -0,0 +1 @@ | |||
KEYBOARD_SHARED_EP = yes |
@ -0,0 +1,6 @@ | |||
// Copyright 2018-2022 Nick Brassel (@tzarc) | |||
// SPDX-License-Identifier: GPL-3.0-or-later | |||
#pragma once | |||
#define DEBUG_EEPROM_OUTPUT | |||
#define WEAR_LEVELING_DEBUG_OUTPUT |
@ -0,0 +1,65 @@ | |||
// Copyright 2018-2022 Nick Brassel (@tzarc) | |||
// SPDX-License-Identifier: GPL-3.0-or-later | |||
#include QMK_KEYBOARD_H | |||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
LAYOUT_ortho_1x1(QK_BOOT) | |||
}; | |||
#ifdef DEBUG_EEPROM_OUTPUT | |||
# ifdef WEAR_LEVELING_ENABLE | |||
# include "wear_leveling.h" | |||
# endif // WEAR_LEVELING_ENABLE | |||
uint8_t prng(void) { | |||
static uint8_t s = 0xAA, a = 0; | |||
s ^= s << 3; | |||
s ^= s >> 5; | |||
s ^= a++ >> 2; | |||
return s; | |||
} | |||
void keyboard_post_init_user(void) { | |||
debug_enable = true; | |||
debug_matrix = true; | |||
debug_keyboard = true; | |||
} | |||
void matrix_scan_user(void) { | |||
static uint32_t last_eeprom_access = 0; | |||
uint32_t now = timer_read32(); | |||
if (now - last_eeprom_access > 5000) { | |||
dprint("reading eeprom\n"); | |||
last_eeprom_access = now; | |||
union { | |||
uint8_t bytes[4]; | |||
uint32_t raw; | |||
} tmp; | |||
extern uint8_t prng(void); | |||
tmp.bytes[0] = prng(); | |||
tmp.bytes[1] = prng(); | |||
tmp.bytes[2] = prng(); | |||
tmp.bytes[3] = prng(); | |||
eeconfig_update_user(tmp.raw); | |||
uint32_t value = eeconfig_read_user(); | |||
if (value != tmp.raw) { | |||
dprint("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); | |||
dprint("!! EEPROM readback mismatch!\n"); | |||
dprint("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); | |||
} | |||
} | |||
# ifdef WEAR_LEVELING_ENABLE | |||
static uint32_t last_wear_leveling_init = 0; | |||
if (now - last_wear_leveling_init > 30000) { | |||
dprint("init'ing wear-leveling\n"); | |||
last_wear_leveling_init = now; | |||
wear_leveling_init(); | |||
} | |||
# endif // WEAR_LEVELING_ENABLE | |||
} | |||
#endif // DEBUG_EEPROM_OUTPUT |
@ -0,0 +1 @@ | |||
CONSOLE_ENABLE = yes |