From 7ce780bcc62d9606f4a87eaac951b6031307f765 Mon Sep 17 00:00:00 2001 From: Valeriy Koval Date: Tue, 15 Dec 2015 19:28:58 +0200 Subject: [PATCH 1/3] Update builder for CMSIS framework. --- examples/stm32/stm32-cmsis-blink/src/main.c | 2 +- platformio/boards/ststm32.json | 22 +++++++----- .../builder/scripts/frameworks/cmsis.py | 34 +++++++++++++++++-- 3 files changed, 46 insertions(+), 12 deletions(-) diff --git a/examples/stm32/stm32-cmsis-blink/src/main.c b/examples/stm32/stm32-cmsis-blink/src/main.c index 9d4917e2..37757c87 100644 --- a/examples/stm32/stm32-cmsis-blink/src/main.c +++ b/examples/stm32/stm32-cmsis-blink/src/main.c @@ -6,7 +6,7 @@ #define ENABLE_GPIO_CLOCK (RCC->AHBENR |= RCC_AHBENR_GPIOBEN) #define GPIOMODER ((GPIO_MODER_MODER7_0|GPIO_MODER_MODER6_0)) #elif STM32F3 - #include "stm32f30x.h" + #include "stm32f3xx.h" #define LEDPORT (GPIOE) #define LED1 (8) #define LED2 (9) diff --git a/platformio/boards/ststm32.json b/platformio/boards/ststm32.json index cd5483a3..f843170f 100644 --- a/platformio/boards/ststm32.json +++ b/platformio/boards/ststm32.json @@ -2,12 +2,12 @@ "disco_f407vg": { "build": { "core": "stm32", - "extra_flags": "-DSTM32F40_41xxx", + "extra_flags": "-DSTM32F4 -DSTM32F407xx -DSTM32F40_41xxx", "f_cpu": "168000000L", "ldscript": "stm32f405x6.ld", "cpu": "cortex-m4", "mcu": "stm32f407vgt6", - "variant": "stm32f4" + "variant": "stm32f407xx" }, "frameworks": ["cmsis", "spl", "libopencm3", "mbed"], "name": "ST STM32F4DISCOVERY", @@ -22,14 +22,14 @@ "disco_l152rb": { "build": { "core": "stm32", - "extra_flags": "-DSTM32L1XX_MD", + "extra_flags": "-DSTM32L1 -DSTM32L152xB -DSTM32L1XX_MD", "f_cpu": "32000000L", "ldscript": "stm32l15xx6.ld", "cpu": "cortex-m3", "mcu": "stm32l152rbt6", - "variant": "stm32l1" + "variant": "stm32l152xb" }, - "frameworks": ["cmsis","spl","libopencm3"], + "frameworks": ["cmsis", "spl", "libopencm3"], "name": "ST STM32LDISCOVERY", "platform": "ststm32", "upload": { @@ -42,12 +42,12 @@ "disco_f303vc": { "build": { "core": "stm32", - "extra_flags": "-DSTM32F303xC", + "extra_flags": "-DSTM32F3 -DSTM32F303xC", "f_cpu": "72000000L", "ldscript": "stm32f30xx.ld", "cpu": "cortex-m4", "mcu": "stm32f303vct6", - "variant": "stm32f3" + "variant": "stm32f303xc" }, "frameworks": ["cmsis", "spl", "libopencm3", "mbed"], "name": "ST STM32F3DISCOVERY", @@ -272,11 +272,15 @@ }, "nucleo_f401re": { "build": { + "core": "stm32", + "extra_flags": "-DSTM32F4 -DSTM32F401xE", "f_cpu": "84000000L", + "ldscript": "stm32f401xe.ld", "cpu": "cortex-m4", - "mcu": "stm32f401ret6" + "mcu": "stm32f401ret6", + "variant": "stm32f401xe" }, - "frameworks": ["mbed"], + "frameworks": ["cmsis", "mbed"], "name": "ST Nucleo F401RE", "platform": "ststm32", "upload": { diff --git a/platformio/builder/scripts/frameworks/cmsis.py b/platformio/builder/scripts/frameworks/cmsis.py index a0098d84..c83ab478 100644 --- a/platformio/builder/scripts/frameworks/cmsis.py +++ b/platformio/builder/scripts/frameworks/cmsis.py @@ -26,7 +26,7 @@ and cutting the time-to-market for devices. http://www.arm.com/products/processors/cortex-m/cortex-microcontroller-software-interface-standard.php """ -from os.path import join +from os.path import isfile, join from SCons.Script import DefaultEnvironment @@ -44,6 +44,7 @@ env.VariantDirWrap( env.Append( CPPPATH=[ join("$BUILD_DIR", "FrameworkCMSIS"), + join("$BUILD_DIR", "FrameworkCMSISCommon"), join("$BUILD_DIR", "FrameworkCMSISVariant") ] ) @@ -54,10 +55,39 @@ envsafe = env.Clone() # Target: Build Core Library # +# use mbed ldscript with bootloader section +ldscript = env.get("BOARD_OPTIONS", {}).get("build", {}).get("ldscript") +if not isfile(join(env.subst("$PIOPACKAGES_DIR"), "ldscripts", ldscript)): + if "mbed" in env.get("BOARD_OPTIONS", {}).get("frameworks", {}): + env.Append( + LINKFLAGS=[ + "-Wl,-T", + join( + "$PIOPACKAGES_DIR", "framework-mbed", "variant", + env.subst("$BOARD").upper(), "mbed", + "TARGET_%s" % env.subst( + "$BOARD").upper(), "TOOLCHAIN_GCC_ARM", + "%s.ld" % ldscript.upper()[:-3] + ) + ] + ) + libs = [] libs.append(envsafe.BuildLibrary( join("$BUILD_DIR", "FrameworkCMSISVariant"), - join("$PLATFORMFW_DIR", "variants", "${BOARD_OPTIONS['build']['variant']}") + join( + "$PLATFORMFW_DIR", "variants", + env.subst("${BOARD_OPTIONS['build']['variant']}")[0:7], + "${BOARD_OPTIONS['build']['variant']}" + ) +)) + +libs.append(envsafe.BuildLibrary( + join("$BUILD_DIR", "FrameworkCMSISCommon"), + join( + "$PLATFORMFW_DIR", "variants", + env.subst("${BOARD_OPTIONS['build']['variant']}")[0:7], "common" + ) )) env.Append(LIBS=libs) From 7e985219ad14f1651ac6662bd55cb897be8a5736 Mon Sep 17 00:00:00 2001 From: Valeriy Koval Date: Tue, 15 Dec 2015 19:29:37 +0200 Subject: [PATCH 2/3] Update builder for SPL framework. --- examples/stm32/stm32-spl-blink/platformio.ini | 6 ++-- platformio/builder/scripts/frameworks/spl.py | 29 ++++++++++++++++--- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/examples/stm32/stm32-spl-blink/platformio.ini b/examples/stm32/stm32-spl-blink/platformio.ini index 1324053c..29d797e9 100644 --- a/examples/stm32/stm32-spl-blink/platformio.ini +++ b/examples/stm32/stm32-spl-blink/platformio.ini @@ -19,15 +19,15 @@ [env:disco_f407vg] platform = ststm32 -framework = cmsis,spl +framework = spl board = disco_f407vg [env:disco_l152rb] platform = ststm32 -framework = cmsis,spl +framework = spl board = disco_l152rb [env:disco_f303vc] platform = ststm32 -framework = cmsis,spl +framework = spl board = disco_f303vc diff --git a/platformio/builder/scripts/frameworks/spl.py b/platformio/builder/scripts/frameworks/spl.py index 41832a3f..13e8cac0 100644 --- a/platformio/builder/scripts/frameworks/spl.py +++ b/platformio/builder/scripts/frameworks/spl.py @@ -34,13 +34,24 @@ env.Replace( ) env.VariantDirWrap( - join("$BUILD_DIR", "FrameworkSPLInc"), + join("$BUILD_DIR", "FrameworkCMSIS"), join("$PLATFORMFW_DIR", "${BOARD_OPTIONS['build']['core']}", - "variants", "${BOARD_OPTIONS['build']['variant']}", "inc") + "cmsis", "cores", "${BOARD_OPTIONS['build']['core']}") +) + +env.VariantDirWrap( + join("$BUILD_DIR", "FrameworkSPLInc"), + join( + "$PLATFORMFW_DIR", "${BOARD_OPTIONS['build']['core']}", "spl", + "variants", env.subst("${BOARD_OPTIONS['build']['variant']}")[0:7], + "inc" + ) ) env.Append( CPPPATH=[ + join("$BUILD_DIR", "FrameworkCMSIS"), + join("$BUILD_DIR", "FrameworkCMSISVariant"), join("$BUILD_DIR", "FrameworkSPLInc"), join("$BUILD_DIR", "FrameworkSPL") ] @@ -71,10 +82,20 @@ elif "STM32L1XX_MD" in extra_flags: src_filter_patterns += ["-"] libs = [] + +libs.append(envsafe.BuildLibrary( + join("$BUILD_DIR", "FrameworkCMSISVariant"), + join( + "$PLATFORMFW_DIR", "${BOARD_OPTIONS['build']['core']}", "cmsis", + "variants", env.subst("${BOARD_OPTIONS['build']['variant']}")[0:7] + ) +)) + libs.append(envsafe.BuildLibrary( join("$BUILD_DIR", "FrameworkSPL"), - join("$PLATFORMFW_DIR", "${BOARD_OPTIONS['build']['core']}", "variants", - "${BOARD_OPTIONS['build']['variant']}", "src"), + join("$PLATFORMFW_DIR", "${BOARD_OPTIONS['build']['core']}", + "spl", "variants", + env.subst("${BOARD_OPTIONS['build']['variant']}")[0:7], "src"), src_filter=" ".join(src_filter_patterns) )) From 8eebd394260b039d8a373962ca3e06c9ca930550 Mon Sep 17 00:00:00 2001 From: Valeriy Koval Date: Tue, 15 Dec 2015 19:30:11 +0200 Subject: [PATCH 3/3] Fix libopenCM3 framework. --- platformio/builder/scripts/frameworks/libopencm3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio/builder/scripts/frameworks/libopencm3.py b/platformio/builder/scripts/frameworks/libopencm3.py index c523b0d8..c2bf08b3 100644 --- a/platformio/builder/scripts/frameworks/libopencm3.py +++ b/platformio/builder/scripts/frameworks/libopencm3.py @@ -166,7 +166,7 @@ env.Append( root_dir = env.subst( join("$PLATFORMFW_DIR", "lib", BOARD_BUILDOPTS.get("core"))) if BOARD_BUILDOPTS.get("core") == "stm32": - root_dir = join(root_dir, BOARD_BUILDOPTS.get("variant")[-2:]) + root_dir = join(root_dir, BOARD_BUILDOPTS.get("variant")[5:7]) ldscript_path = find_ldscript(root_dir) merge_ld_scripts(ldscript_path)