diff --git a/bootloader/F1/Inc/config.h b/bootloader/F1/Inc/config.h index 7f99cc65..cf4a754a 100644 --- a/bootloader/F1/Inc/config.h +++ b/bootloader/F1/Inc/config.h @@ -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 diff --git a/bootloader/F1/Makefile b/bootloader/F1/Makefile index 8f274dd9..d3a3c383 100644 --- a/bootloader/F1/Makefile +++ b/bootloader/F1/Makefile @@ -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 @@ -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 @@ -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 "$@" diff --git a/bootloader/F1/Src/led.c b/bootloader/F1/Src/led.c index 48b6bc07..0eb64d27 100644 --- a/bootloader/F1/Src/led.c +++ b/bootloader/F1/Src/led.c @@ -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; @@ -37,7 +37,8 @@ void pins_init(void) DISC_BIT_1; DISC_MODE; DISC_LOW; - + + #if defined PB2_PULLDOWN SET_BIT(GPIOB->CRL, GPIO_CRL_CNF2_1); @@ -45,6 +46,9 @@ void pins_init(void) #else + BOOT_BIT_0; + BOOT_BIT_1; + BOOT_SETUP; /* PB2 is already in FLOATING mode by default. */ #endif diff --git a/bootloader/F1/Src/main.c b/bootloader/F1/Src/main.c index e5c80501..35cf1529 100644 --- a/bootloader/F1/Src/main.c +++ b/bootloader/F1/Src/main.c @@ -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) {