diff --git a/external/platform/stm32f4xx/STM32F4xx_StdPeriph_Driver/CMSIS/stm32f4xx.h b/external/platform/stm32f4xx/STM32F4xx_StdPeriph_Driver/CMSIS/stm32f4xx.h index 73a376eb..6b050fd6 100644 --- a/external/platform/stm32f4xx/STM32F4xx_StdPeriph_Driver/CMSIS/stm32f4xx.h +++ b/external/platform/stm32f4xx/STM32F4xx_StdPeriph_Driver/CMSIS/stm32f4xx.h @@ -106,6 +106,11 @@ #define STM32F427_437xx #endif /* STM32F427X */ +/* Old STM32F427X definition, maintained for legacy purpose */ +#ifdef STM32F429_439XX + #define STM32F429_439xx +#endif /* STM32F427X */ + /* Tip: To avoid modifying this file each time you need to switch between these devices, you can define the device in your toolchain compiler preprocessor. */ diff --git a/external/platform/stm32f4xx/STM32F4xx_StdPeriph_Driver/rules.mk b/external/platform/stm32f4xx/STM32F4xx_StdPeriph_Driver/rules.mk index 1b4e21a8..b316f16b 100644 --- a/external/platform/stm32f4xx/STM32F4xx_StdPeriph_Driver/rules.mk +++ b/external/platform/stm32f4xx/STM32F4xx_StdPeriph_Driver/rules.mk @@ -23,7 +23,6 @@ MODULE_SRCS += \ $(LOCAL_DIR)/src/stm32f4xx_flash.c \ $(LOCAL_DIR)/src/stm32f4xx_flash_ramfunc.c \ $(LOCAL_DIR)/src/stm32f4xx_fmpi2c.c \ - $(LOCAL_DIR)/src/stm32f4xx_fsmc.c \ $(LOCAL_DIR)/src/stm32f4xx_gpio.c \ $(LOCAL_DIR)/src/stm32f4xx_hash.c \ $(LOCAL_DIR)/src/stm32f4xx_hash_md5.c \ @@ -46,6 +45,12 @@ MODULE_SRCS += \ $(LOCAL_DIR)/src/stm32f4xx_wwdg.c \ $(LOCAL_DIR)/src/system_stm32f4xx.c +ifeq ($(STM32_CHIP),stm32f429) + MODULE_SRCS += $(LOCAL_DIR)/src/stm32f4xx_fmc.c +else + MODULE_SRCS += $(LOCAL_DIR)/src/stm32f4xx_fsmc.c +endif + include $(LOCAL_DIR)/CMSIS/rules.mk include make/module.mk diff --git a/platform/stm32f4xx/rules.mk b/platform/stm32f4xx/rules.mk index 33c0535e..19a54080 100644 --- a/platform/stm32f4xx/rules.mk +++ b/platform/stm32f4xx/rules.mk @@ -21,6 +21,10 @@ ifeq ($(STM32_CHIP),stm32f417) FOUND_CHIP := true GLOBAL_DEFINES += STM32F40_41xxx endif +ifeq ($(STM32_CHIP),stm32f429) +FOUND_CHIP := true +GLOBAL_DEFINES += STM32F429_439xx +endif ifeq ($(FOUND_CHIP),) $(error unknown STM32F4xx chip $(STM32_CHIP)) diff --git a/platform/stm32f4xx/vectab.c b/platform/stm32f4xx/vectab.c index df0a5f29..38690aad 100644 --- a/platform/stm32f4xx/vectab.c +++ b/platform/stm32f4xx/vectab.c @@ -95,7 +95,13 @@ DEFAULT_HANDLER(TIM8_UP_TIM13_IRQ); DEFAULT_HANDLER(TIM8_TRG_COM_TIM14_IRQ); DEFAULT_HANDLER(TIM8_CC_IRQ); DEFAULT_HANDLER(DMA1_Stream7_IRQ); + +#ifdef STM32F40_41xxx DEFAULT_HANDLER(FSMC_IRQ); +#else +DEFAULT_HANDLER(FMC_IRQ); +#endif + DEFAULT_HANDLER(SDIO_IRQ); DEFAULT_HANDLER(TIM5_IRQ); DEFAULT_HANDLER(SPI3_IRQ); @@ -183,7 +189,11 @@ const void *const __SECTION(".text.boot.vectab2") vectab2[] = { VECTAB_ENTRY(TIM8_TRG_COM_TIM14_IRQ), /* TIM8 Trigger and Commutation Interrupt and TIM14 global interrupt */ VECTAB_ENTRY(TIM8_CC_IRQ), /* TIM8 Capture Compare Interrupt */ VECTAB_ENTRY(DMA1_Stream7_IRQ), /* DMA1 Stream7 Interrupt */ +#ifdef STM32F40_41xxx VECTAB_ENTRY(FSMC_IRQ), /* FSMC global Interrupt */ +#else + VECTAB_ENTRY(FMC_IRQ), /* FSMC global Interrupt */ +#endif VECTAB_ENTRY(SDIO_IRQ), /* SDIO global Interrupt */ VECTAB_ENTRY(TIM5_IRQ), /* TIM5 global Interrupt */ VECTAB_ENTRY(SPI3_IRQ), /* SPI3 global Interrupt */ diff --git a/project/stm32f429i-disco-test.mk b/project/stm32f429i-disco-test.mk new file mode 100644 index 00000000..e7c994f4 --- /dev/null +++ b/project/stm32f429i-disco-test.mk @@ -0,0 +1,4 @@ +include project/target/stm32f429i-disco.mk +include project/virtual/test.mk + +# Console serial port is on pins PA2(TX) and PA3(RX) diff --git a/project/target/stm32f429i-disco.mk b/project/target/stm32f429i-disco.mk new file mode 100644 index 00000000..9628232a --- /dev/null +++ b/project/target/stm32f429i-disco.mk @@ -0,0 +1,7 @@ +LOCAL_DIR := $(GET_LOCAL_DIR) + +TARGET := stm32f429i-disco + +# MODULES += \ +# lib/gfx \ + diff --git a/scripts/do-stm32f4-disco-test b/scripts/do-stm32f4-disco-test new file mode 100755 index 00000000..5dd78631 --- /dev/null +++ b/scripts/do-stm32f4-disco-test @@ -0,0 +1,7 @@ +#!/bin/sh + +export PROJECT=stm32f429i-disco-test + +make -j8 && +openocd -f board/stm32f429disc1.cfg \ + -c "program build-$PROJECT/lk.bin reset exit 0x08000000" diff --git a/target/stm32f429i-disco/README b/target/stm32f429i-disco/README new file mode 100644 index 00000000..c56f9a1c --- /dev/null +++ b/target/stm32f429i-disco/README @@ -0,0 +1,24 @@ + +Notes on the STM32F4 Discovery Board +------------------------------------ + +http://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-mcu-discovery-kits/32f429idiscovery.html +http://www.digikey.com/product-detail/en/STM32F4DISCOVERY/497-11455-ND/2711743 + + +LK Debug/Console UART +--------------------- +- USART1 is used +- TX is A9 +- RX is A10 +- both are on the P1 header near the top + + +Using external SWD debug +------------------------ +- Remove jumpers from CN3 4-pin header (near mini-usb connector) +- CN3 pin2 is SWCLK +- CN2 pin4 is SWDIO +- GND is available on P2, nearby + + diff --git a/target/stm32f429i-disco/include/target/debugconfig.h b/target/stm32f429i-disco/include/target/debugconfig.h new file mode 100644 index 00000000..88ffe5fd --- /dev/null +++ b/target/stm32f429i-disco/include/target/debugconfig.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2012 Travis Geiselbrecht + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef __TARGET_DEBUGCONFIG_H +#define __TARGET_DEBUGCONFIG_H + +#define DEBUG_UART 1 + +#endif diff --git a/target/stm32f429i-disco/include/target/gpioconfig.h b/target/stm32f429i-disco/include/target/gpioconfig.h new file mode 100644 index 00000000..f1ad8e0d --- /dev/null +++ b/target/stm32f429i-disco/include/target/gpioconfig.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2012 Travis Geiselbrecht + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef __TARGET_GPIOCONFIG_H +#define __TARGET_GPIOCONFIG_H + +#include + +#define GPIO_USART1_TX GPIO(GPIO_PORT_A, 9) +#define GPIO_USART1_RX GPIO(GPIO_PORT_A, 10) + +#define GPIO_LED0 GPIO(GPIO_PORT_D, 13) // LD3 - Orange +#define GPIO_LED1 GPIO(GPIO_PORT_D, 12) // LD4 - Green +#define GPIO_LED2 GPIO(GPIO_PORT_D, 14) // LD5 - Red +#define GPIO_LED3 GPIO(GPIO_PORT_D, 15) // LD6 - Blue + +#endif diff --git a/target/stm32f429i-disco/init.c b/target/stm32f429i-disco/init.c new file mode 100644 index 00000000..fa19d8b0 --- /dev/null +++ b/target/stm32f429i-disco/init.c @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2012 Travis Geiselbrecht + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void target_early_init(void) +{ +#ifdef DEBUG_UART +#if DEBUG_UART == 1 + gpio_config(GPIO_USART1_TX, GPIO_STM32_AF | + GPIO_STM32_AFn(GPIO_AF_USART1) | GPIO_PULLUP); + gpio_config(GPIO_USART1_RX, GPIO_STM32_AF | + GPIO_STM32_AFn(GPIO_AF_USART1) | GPIO_PULLUP); +#else // !DEBUG_UART == 1 +#warn DEBUG_UART only supports USART1!!! +#endif // DEBUG_UART +#endif // defined DEBUG_UART + + stm32_debug_early_init(); + + /* configure some status leds */ + gpio_config(GPIO_LED0, GPIO_OUTPUT); + gpio_config(GPIO_LED1, GPIO_OUTPUT); + gpio_config(GPIO_LED2, GPIO_OUTPUT); + gpio_config(GPIO_LED3, GPIO_OUTPUT); +} + +void target_init(void) +{ + TRACE_ENTRY; + + stm32_debug_init(); + + TRACE_EXIT; +} + +void target_set_debug_led(unsigned int led, bool on) +{ + switch (led) { + case 0: + gpio_set(GPIO_LED0, on); + break; + case 1: + gpio_set(GPIO_LED1, on); + break; + case 2: + gpio_set(GPIO_LED2, on); + break; + case 3: + gpio_set(GPIO_LED3, on); + break; + } +} diff --git a/target/stm32f429i-disco/rules.mk b/target/stm32f429i-disco/rules.mk new file mode 100644 index 00000000..7c36aef9 --- /dev/null +++ b/target/stm32f429i-disco/rules.mk @@ -0,0 +1,21 @@ +LOCAL_DIR := $(GET_LOCAL_DIR) + +MODULE := $(LOCAL_DIR) + +STM32_CHIP := stm32f429 + +PLATFORM := stm32f4xx + +GLOBAL_DEFINES += \ + ENABLE_UART1=1 \ + TARGET_HAS_DEBUG_LED=1 \ + HSE_VALUE=8000000 \ + PLL_M_VALUE=8 \ + PLL_N_VALUE=336 \ + PLL_P_VALUE=2 + +MODULE_SRCS += \ + $(LOCAL_DIR)/init.c + +include make/module.mk +