diff --git a/global.c b/global.c index 04f7049..96d8c4d 100644 --- a/global.c +++ b/global.c @@ -54,9 +54,6 @@ char* b2s(uint64_t binary, uint8_t rjust) inline void led_on(void) { #if defined(LED_PIN) -#if defined(BUSVOODOO) - gpio_set_mode(GPIO_PORT(LED_PIN), GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO_PIN(LED_PIN)); // set LED pin push-pull -#endif // BUSVOODOO #if defined(LED_ON) && LED_ON gpio_set(GPIO_PORT(LED_PIN), GPIO_PIN(LED_PIN)); #else @@ -69,14 +66,10 @@ inline void led_on(void) inline void led_off(void) { #if defined(LED_PIN) -#if defined(BUSVOODOO) - gpio_set_mode(GPIO_PORT(LED_PIN), GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, GPIO_PIN(LED_PIN)); // set LED pin to floating to disable LEDs -#else #if defined(LED_ON) && LED_ON gpio_clear(GPIO_PORT(LED_PIN), GPIO_PIN(LED_PIN)); #else gpio_set(GPIO_PORT(LED_PIN), GPIO_PIN(LED_PIN)); -#endif // BUSVOODOO #endif // LED_ON #endif // LED_PIN } @@ -85,9 +78,6 @@ inline void led_off(void) inline void led_toggle(void) { #if defined(LED_PIN) -#if defined(BUSVOODOO) - gpio_set_mode(GPIO_PORT(LED_PIN), GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO_PIN(LED_PIN)); // set LED pin to push-pull -#endif // BUSVOODOO gpio_toggle(GPIO_PORT(LED_PIN), GPIO_PIN(LED_PIN)); #endif // LED_PIN } @@ -171,28 +161,34 @@ void user_input_store(char c) void board_setup(void) { -#if defined(LED_PIN) + // setup main clock +#if defined(MINIF401) + rcc_clock_setup_pll(&rcc_hse_25mhz_3v3[RCC_CLOCK_3V3_84MHZ]); // the MINIF401 uses an STM32F401 which can go up to 84 MHz, and the board has a 25 MHz crystal +#else + rcc_clock_setup_pll(&rcc_hsi_configs[RCC_CLOCK_3V3_84MHZ]); // use HSI which is present on all boards, and limit to 84MHz (supported by all STM32F4 +#endif + +#if defined(LED_PIN) && defined(LED_ON) // setup LED rcc_periph_clock_enable(GPIO_RCC(LED_PIN)); // enable clock for LED -#if defined(BUSVOODOO) - gpio_set_mode(GPIO_PORT(LED_PIN), GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, GPIO_PIN(LED_PIN)); // set LED pin to floating to disable LEDs -#else - gpio_set_mode(GPIO_PORT(LED_PIN), GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO_PIN(LED_PIN)); // set LED pin to output push-pull do drive LED + gpio_mode_setup(GPIO_PORT(LED_PIN), GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN(LED_PIN)); // set LED pin as output +#if LED_ON // LED is on when sourcing + gpio_set_output_options(GPIO_PORT(LED_PIN), GPIO_OTYPE_PP, GPIO_OSPEED_2MHZ, GPIO_PIN(LED_PIN)); // set LED pin output as push-pull +#else // LED is on when sinking + gpio_set_output_options(GPIO_PORT(LED_PIN), GPIO_OTYPE_OD, GPIO_OSPEED_2MHZ, GPIO_PIN(LED_PIN)); // set LED pin output as open-drain #endif led_off(); // switch off LED per default #endif // LED_PIN // setup button -#if defined(BUTTON_PIN) +#if defined(BUTTON_PIN) && defined(BUTTON_PRESSED) rcc_periph_clock_enable(GPIO_RCC(BUTTON_PIN)); // enable clock for button - gpio_set_mode(GPIO_PORT(BUTTON_PIN), GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, GPIO_PIN(BUTTON_PIN)); // set button pin to input - rcc_periph_clock_enable(RCC_AFIO); // enable alternate function clock for external interrupt exti_select_source(GPIO_EXTI(BUTTON_PIN), GPIO_PORT(BUTTON_PIN)); // mask external interrupt of this pin only for this port -#if defined(BUTTON_PRESSED) && BUTTON_PRESSED - gpio_clear(GPIO_PORT(BUTTON_PIN), GPIO_PIN(BUTTON_PIN)); // pull down to be able to detect button push (go high) +#if BUTTON_PRESSED // level goes high when pressed + gpio_mode_setup(GPIO_PORT(BUTTON_PIN), GPIO_MODE_INPUT, GPIO_PUPD_PULLDOWN, GPIO_PIN(BUTTON_PIN)); // set GPIO to input and pull down exti_set_trigger(GPIO_EXTI(BUTTON_PIN), EXTI_TRIGGER_RISING); // trigger when button is pressed -#else - gpio_set(GPIO_PORT(BUTTON_PIN), GPIO_PIN(BUTTON_PIN)); // pull up to be able to detect button push (go low) +#else // level goes low when pressed + gpio_mode_setup(GPIO_PORT(BUTTON_PIN), GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN(BUTTON_PIN)); // set GPIO to input and pull up exti_set_trigger(GPIO_EXTI(BUTTON_PIN), EXTI_TRIGGER_FALLING); // trigger when button is pressed #endif exti_enable_request(GPIO_EXTI(BUTTON_PIN)); // enable external interrupt diff --git a/global.h b/global.h index 9bbca0e..0e2a271 100644 --- a/global.h +++ b/global.h @@ -562,86 +562,22 @@ #define SPI_IRQ(x) CAT3(NVIC_SPI,x,_IRQ) /** get SPI ISR based on SPI identifier */ #define SPI_ISR(x) CAT3(spi,x,_isr) -/** get DMA based on SPI identifier */ -#define DMA_SPI(x) CAT2(DMA_SPI,x) -#define DMA_SPI1 DMA1 /**< SPI1 is on DMA1 */ -#define DMA_SPI2 DMA1 /**< SPI2 is on DMA1 */ -#define DMA_SPI3 DMA2 /**< SPI3 is on DMA2 */ -/** get RCC for DMA based on SPI identifier */ -#define RCC_DMA_SPI(x) CAT2(RCC_DMA_SPI,x) -#define RCC_DMA_SPI1 RCC_DMA1 /**< SPI1 is on DMA1 */ -#define RCC_DMA_SPI2 RCC_DMA1 /**< SPI2 is on DMA1 */ -#define RCC_DMA_SPI3 RCC_DMA2 /**< SPI3 is on DMA2 */ -/** get DMA channel for SPI TX based on SPI identifier */ -#define DMA_CHANNEL_SPI_TX(x) CAT3(DMA_CHANNEL_SPI,x,_TX) -#define DMA_CHANNEL_SPI1_TX DMA_CHANNEL3 /**< SPI1 TX is on DMA channel 3 */ -#define DMA_CHANNEL_SPI2_TX DMA_CHANNEL5 /**< SPI2 TX is on DMA channel 5 */ -#define DMA_CHANNEL_SPI3_TX DMA_CHANNEL2 /**< SPI3 TX is on DMA channel 2 */ -/** get DMA channel for SPI RX based on SPI identifier */ -#define DMA_CHANNEL_SPI_RX(x) CAT3(DMA_CHANNEL_SPI,x,_RX) -#define DMA_CHANNEL_SPI1_RX DMA_CHANNEL4 /**< SPI1 RX is on DMA channel 4 */ -#define DMA_CHANNEL_SPI2_RX DMA_CHANNEL2 /**< SPI2 RX is on DMA channel 2 */ -#define DMA_CHANNEL_SPI3_RX DMA_CHANNEL1 /**< SPI3 RX is on DMA channel 1 */ -/** get DMA NVIC IRQ for SPI TX based on SPI identifier */ -#define DMA_IRQ_SPI_TX(x) CAT3(NVIC_DMA_CHANNEL_IRQ_SPI,x,_TX) -#define NVIC_DMA_CHANNEL_IRQ_SPI1_TX NVIC_DMA1_CHANNEL3_IRQ /**< SPI1 TX is on DMA 1 channel 3 */ -#define NVIC_DMA_CHANNEL_IRQ_SPI2_TX NVIC_DMA1_CHANNEL5_IRQ /**< SPI2 TX is on DMA 1 channel 5 */ -#define NVIC_DMA_CHANNEL_IRQ_SPI3_TX NVIC_DMA2_CHANNEL2_IRQ /**< SPI3 TX is on DMA 2 channel 2 */ -/** get DMA NVIC IRQ for SPI RX based on SPI identifier */ -#define DMA_IRQ_SPI_RX(x) CAT3(NVIC_DMA_CHANNEL_IRQ_SPI,x,_RX) -#define NVIC_DMA_CHANNEL_IRQ_SPI1_RX NVIC_DMA1_CHANNEL4_IRQ /**< SPI1 RX is on DMA 1 channel 4 */ -#define NVIC_DMA_CHANNEL_IRQ_SPI2_RX NVIC_DMA1_CHANNEL2_IRQ /**< SPI2 RX is on DMA 1 channel 2 */ -#define NVIC_DMA_CHANNEL_IRQ_SPI3_RX NVIC_DMA2_CHANNEL1_IRQ /**< SPI3 RX is on DMA 2 channel 1 */ -/** get DMA ISR for SPI TX based on SPI identifier */ -#define DMA_ISR_SPI_TX(x) CAT3(DMA_CHANNEL_ISR_SPI,x,_TX) -#define DMA_CHANNEL_ISR_SPI1_TX dma1_channel3_isr /**< SPI1 TX is on DMA 1 channel 3 */ -#define DMA_CHANNEL_ISR_SPI2_TX dma1_channel5_isr /**< SPI2 TX is on DMA 1 channel 5 */ -#define DMA_CHANNEL_ISR_SPI3_TX dma2_channel2_isr /**< SPI3 TX is on DMA 2 channel 2 */ -/** get DMA ISR for SPI RX based on SPI identifier */ -#define DMA_ISR_SPI_RX(x) CAT3(DMA_CHANNEL_ISR_SPI,x,_RX) -#define DMA_CHANNEL_ISR_SPI1_RX dma1_channel4_isr /**< SPI1 RX is on DMA 1 channel 4 */ -#define DMA_CHANNEL_ISR_SPI2_RX dma1_channel2_isr /**< SPI2 RX is on DMA 1 channel 2 */ -#define DMA_CHANNEL_ISR_SPI3_RX dma2_channel1_isr /**< SPI3 RX is on DMA 2 channel 1 */ /** @} */ /** @defgroup board_led board LED GPIO * @{ */ -#if defined(SYSTEM_BOARD) || defined(CORE_BOARD) - #define LED_PIN PA1 /**< GPIO pin (pin 11) */ - #define LED_ON 0 /**< LED is on when pin is low */ -#elif defined(BLUE_PILL) +#if defined(MINIF401) #define LED_PIN PC13 /**< GPIO pin */ #define LED_ON 0 /**< LED is on when pin is low */ -#elif defined(BLACK_PILL) - #define LED_PIN PB12 /**< GPIO pin */ - #define LED_ON 0 /**< LED is on when pin is low */ -#elif defined(MAPLE_MINI) - #define LED_PIN PB1 /**< GPIO pin (pin 19) */ - #define LED_ON 1 /**< LED is on when pin is high */ -#elif defined(STLINKV2) // it's sometimes a STM32F101, but it seems to have all STM32F103 features - /* on ST-Link V2 clone dongle in aluminum case LED is on pin PA9 (remap USART1_TX if used) */ - #define LED_PIN PA9 /**< GPIO pin */ - #define LED_ON 1 /**< the color and on level depends on the clone */ -#elif defined(BLASTER) - #define LED_PIN PA5 /**< GPIO pin */ - #define LED_ON 0 /**< red LED on when low (green LED is on when device is powered) */ -#elif defined(BUSVOODOO) - #define LED_PIN PA8 /**< GPIO pin */ - #define LED_ON 1 /**< blue LED is on when pin is high, red LED is on when pin is low, LED is off when LED is floating */ #endif /** @} */ /** @defgroup board_button board user button GPIO * @{ */ -#if defined(MAPLE_MINI) - /* on maple mini user button is on 32/PB8 */ - #define BUTTON_PIN PB8 /**< GPIO pin (pin PB8 on maple mini) */ - #define BUTTON_PRESSED 1 /**< pin is high when button is pressed */ -#elif defined(CORE_BOARD) - /* on core board user button is on PA8 */ - #define BUTTON_PIN PA8 /**< GPIO pin (pin PA8) */ +#if defined(MINIF401) + #define BUTTON_PIN PA0 /**< GPIO pin */ #define BUTTON_PRESSED 0 /**< pin is low when button is pressed */ #endif /** @} */ @@ -652,39 +588,12 @@ #if defined(BUTTON_PIN) && defined(BUTTON_PRESSED) #define DFU_FORCE_PIN BUTTON_PIN /**< button pin */ #define DFU_FORCE_VALUE BUTTON_PRESSED /**< start DFU when button is pressed on boot */ -#elif defined(BLASTER) - #define DFU_FORCE_PIN PA8 /**< GPIO pin (pin PA8, not SWD and UART pin on debug port) */ - #define DFU_FORCE_VALUE 0 /**< short to nearby ground connection to force DFU */ -#elif defined(BUSVOODOO) -#if BUSVOODOO_HARDWARE_VERSION==0 - /* on BusVoodoo v0 DFU input is on PC7 */ - #define DFU_FORCE_PIN PC7 /**< GPIO pin (pin PC7) */ - #define DFU_FORCE_VALUE 1 /**< pin is pulled low, and goes high when shorted with VUSB */ -#else - /* on BusVoodoo vA DFU input is on PC4 */ - #define DFU_FORCE_PIN PC4 /**< GPIO pin (pin PC4) */ - #define DFU_FORCE_VALUE 1 /**< pin floating, set high when shorted with nearby VCC */ -#endif -#else - #define DFU_FORCE_PIN PB2 /**< BOOT1 pin */ - #define DFU_FORCE_VALUE 1 /**< often connected to 0 by default to start system memory when BOOT0 = 1 */ #endif /** @} */ -/** symbol for beginning of the application - * @note this symbol will be provided by the linker script - */ -extern char __application_beginning; -/** symbol for end of the application - * @note this symbol will be provided by the linker script - */ -extern char __application_end; -/** symbol for end of flash - * @note this symbol will be provided by the linker script - */ -extern char __flash_end; /** flag set when board user button has been pressed/released */ extern volatile bool button_flag; + /** symbol for the DFU magic word * @note this symbol will be provided by the linker script */