Merge pull request #376 from valeros/develop

Add CMSIS support for nucleo_f401re board  // Resolve #373
This commit is contained in:
Ivan Kravets
2015-12-15 20:06:10 +02:00
6 changed files with 75 additions and 20 deletions

View File

@ -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)

View File

@ -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

View File

@ -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": {

View File

@ -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)

View File

@ -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)

View File

@ -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 += ["-<stm32l1xx_flash_ramfunc.c>"]
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)
))