Skip to content

Commit

Permalink
skr_mini_e3: Add support for button on PA2
Browse files Browse the repository at this point in the history
  • Loading branch information
Arksine committed Apr 26, 2020
1 parent 41b0801 commit 3328f0b
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 8 deletions.
44 changes: 41 additions & 3 deletions bootloader/F1/Inc/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -143,19 +143,57 @@
#define DISC_HIGH WRITE_REG(GPIOC->BSRR, GPIO_BSRR_BS13)
#define DISC_LOW WRITE_REG(GPIOC->BRR, GPIO_BRR_BR13)

// Enable the internal pull-down on PB2 pin. By default, PB2
// is in FLOATING input mode.
#define PB2_PULLDOWN
// Use PA2 on SKR Mini E3 as the Button to check

#define BOOT_CLOCK RCC_APB2ENR_IOPAEN
#define CHECK_BOOT (READ_BIT(GPIOA->IDR, GPIO_IDR_IDR2) == 0)
#define BOOT_BIT_0 CLEAR_BIT(GPIOA->CRL, GPIO_CRL_CNF2_0)
#define BOOT_BIT_1 SET_BIT(GPIOA->CRL, GPIO_CRL_CNF2_1)
#define BOOT_SETUP SET_BIT(GPIOA->ODR, GPIO_ODR_ODR2)

#ifdef PAGE_SIZE
#undef PAGE_SIZE
#define PAGE_SIZE 2048
#endif
#elif defined TARGET_BTT_SKR_MINI_E3_NO_BTN

#define DISC_CLOCK RCC_APB2ENR_IOPCEN
#define DISC_BIT_0 SET_BIT(GPIOC->CRH, GPIO_CRH_CNF13_0 | GPIO_CRH_MODE13)
#define DISC_BIT_1 //CLEAR_BIT(GPIOC->CRH, GPIO_CRH_CNF13_1)
#define DISC_MODE
#define DISC_HIGH WRITE_REG(GPIOC->BSRR, GPIO_BSRR_BS13)
#define DISC_LOW WRITE_REG(GPIOC->BRR, GPIO_BRR_BR13)

#define PB2_PULLDOWN

#ifdef PAGE_SIZE
#undef PAGE_SIZE
#define PAGE_SIZE 2048
#endif
#else
#error "No config for this target"
#endif

#ifndef BOOT_CLOCK
#define BOOT_CLOCK RCC_APB2ENR_IOPBEN
#endif

#ifndef CHECK_BOOT
#define CHECK_BOOT READ_BIT(GPIOB->IDR, GPIO_IDR_IDR2)
#endif

#ifndef BOOT_BIT_0
#define BOOT_BIT_0
#endif

#ifndef BOOT_BIT_1
#define BOOT_BIT_1
#endif

#ifndef BOOT_SETUP
#define BOOT_SETUP
#endif

#ifndef LED1_CLOCK
#define LED1_CLOCK 0
#endif
Expand Down
10 changes: 9 additions & 1 deletion bootloader/F1/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ VECTOR_TABLE_OFFSET = 0x0000

# The default Flash Page size (Sector size) for LOW and MEDIUM STM32F103 devices is 1024 bytes
# High Density STM32F103 devices have 2 kB Flash Page size
PAGE_SIZE = 1024
PAGE_SIZE = 1024

C_SRCS = Src/main.c Src/usb.c Src/hid.c Src/led.c Src/flash.c

Expand Down Expand Up @@ -84,6 +84,7 @@ generic-pb0: $(SRCS) clean gccversion build_generic-pb0 copy_generic-pb0 info si
generic-pb12: $(SRCS) clean gccversion build_generic-pb12 copy_generic-pb12 info size
mini-stm32v3: $(SRCS) clean gccversion build_mini-stm32v3 copy_mini-stm32v3 info size
btt-skr-mini-e3: $(SRCS) clean gccversion build_btt-skr-mini-e3 copy_btt-skr-mini-e3 info size
btt-skr-mini-e3_no-btn: $(SRCS) clean gccversion build_btt-skr-mini-e3_no-btn copy_btt-skr-mini-e3_no-btn info size

build_maple-mini: TARGETFLAGS= -DTARGET_MAPLE_MINI
build_maple-mini: LINKER_SCRIPT=STM32F103C8T6.ld
Expand Down Expand Up @@ -183,6 +184,13 @@ copy_btt-skr-mini-e3: $(BIN_DIR)
$(ECHO) "COPY $(BIN_DIR)/hid_btt_skr_mini_e3.bin"
$(Q)$(CP) $(BUILD_DIR)/$(TARGET).bin $(BIN_DIR)/hid_btt_skr_mini_e3.bin

build_btt-skr-mini-e3_no-btn : TARGETFLAGS= -DTARGET_BTT_SKR_MINI_E3_NO_BTN
build_btt-skr-mini-e3_no-btn : LINKER_SCRIPT=STM32F103C8T6.ld
build_btt-skr-mini-e3_no-btn : $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).bin
copy_btt-skr-mini-e3_no-btn: $(BIN_DIR)
$(ECHO) "COPY $(BIN_DIR)/hid_btt_skr_mini_e3_no_btn.bin"
$(Q)$(CP) $(BUILD_DIR)/$(TARGET).bin $(BIN_DIR)/hid_btt_skr_mini_e3_no_btn.bin

$(BUILD_DIR)/$(TARGET).elf: $(OBJS)
$(ECHO) "LD $@"
$(Q)$(CC) $(LDFLAGS) $(CFLAGS) $(OBJS) -o "$@"
Expand Down
8 changes: 6 additions & 2 deletions bootloader/F1/Src/led.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
void pins_init(void)
{
SET_BIT(RCC->APB2ENR,
LED1_CLOCK | LED2_CLOCK | DISC_CLOCK | RCC_APB2ENR_IOPBEN);
LED1_CLOCK | LED2_CLOCK | DISC_CLOCK | BOOT_CLOCK);

LED1_BIT_0;
LED1_BIT_1;
Expand All @@ -37,14 +37,18 @@ void pins_init(void)
DISC_BIT_1;
DISC_MODE;
DISC_LOW;



#if defined PB2_PULLDOWN

SET_BIT(GPIOB->CRL, GPIO_CRL_CNF2_1);
CLEAR_BIT(GPIOB->ODR, GPIO_ODR_ODR2);

#else

BOOT_BIT_0;
BOOT_BIT_1;
BOOT_SETUP;
/* PB2 is already in FLOATING mode by default. */
#endif

Expand Down
3 changes: 1 addition & 2 deletions bootloader/F1/Src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -199,8 +199,7 @@ void Reset_Handler(void)
* registers from the Arduino IDE
* then enter HID bootloader...
*/
if ((magic_word == 0x424C) ||
READ_BIT(GPIOB->IDR, GPIO_IDR_IDR2) ||
if ((magic_word == 0x424C) || CHECK_BOOT ||
(check_user_code(USER_PROGRAM) == false)) {
if (magic_word == 0x424C) {

Expand Down

0 comments on commit 3328f0b

Please sign in to comment.