|
|
@@ -1,76 +1,34 @@
|
|
|
-SET(STM32_CHIP_DEF_HD "STM32F10X_HD")
|
|
|
-SET(STM32_CHIP_DEF_HD_VL "STM32F10X_HD_VL")
|
|
|
-SET(STM32_CHIP_DEF_MD "STM32F10X_MD")
|
|
|
-SET(STM32_CHIP_DEF_MD_VL "STM32F10X_MD_VL")
|
|
|
-SET(STM32_CHIP_DEF_LD "STM32F10X_LD")
|
|
|
-SET(STM32_CHIP_DEF_LD_VL "STM32F10X_LD_VL")
|
|
|
-SET(STM32_CHIP_DEF_CL "STM32F10X_CL")
|
|
|
-SET(STM32_CHIP_DEF_XL "STM32F10X_XL")
|
|
|
+STRING(TOLOWER ${STM32_FAMILY} STM32_FAMILY_LOWER)
|
|
|
|
|
|
-SET(CMSIS_LIB_NAME_HD "cmsis_hd")
|
|
|
-SET(CMSIS_LIB_NAME_HD_VL "cmsis_hd_vl")
|
|
|
-SET(CMSIS_LIB_NAME_MD "cmsis_md")
|
|
|
-SET(CMSIS_LIB_NAME_MD_VL "cmsis_md_vl")
|
|
|
-SET(CMSIS_LIB_NAME_LD "cmsis_ld")
|
|
|
-SET(CMSIS_LIB_NAME_LD_VL "cmsis_ld_vl")
|
|
|
-SET(CMSIS_LIB_NAME_CL "cmsis_cl")
|
|
|
-SET(CMSIS_LIB_NAME_XL "cmsis_xl")
|
|
|
-
|
|
|
-SET(CMSIS_STARTUP_SOURCE_HD "startup_stm32f10x_hd.s")
|
|
|
-SET(CMSIS_STARTUP_SOURCE_HD_VL "startup_stm32f10x_hd_vl.s")
|
|
|
-SET(CMSIS_STARTUP_SOURCE_MD "startup_stm32f10x_md.s")
|
|
|
-SET(CMSIS_STARTUP_SOURCE_MD_VL "startup_stm32f10x_md_vl.s")
|
|
|
-SET(CMSIS_STARTUP_SOURCE_LD "startup_stm32f10x_ld.s")
|
|
|
-SET(CMSIS_STARTUP_SOURCE_LD_VL "startup_stm32f10x_ld_vl.s")
|
|
|
-SET(CMSIS_STARTUP_SOURCE_CL "startup_stm32f10x_cl.s")
|
|
|
-SET(CMSIS_STARTUP_SOURCE_XL "startup_stm32f10x_xl.s")
|
|
|
+IF(STM32_FAMILY STREQUAL "F1")
|
|
|
+ SET(CMSIS_STARTUP_PREFIX "startup_stm32f10x_")
|
|
|
+ SET(CMSIS_HEADERS system_stm32f10x.h core_cm3.h stm32f10x.h)
|
|
|
+ SET(CMSIS_LINKER_SCRIPT_NAME stm32f1_flash.ld.in)
|
|
|
+ENDIF()
|
|
|
|
|
|
-IF(NOT STM32_CHIP_TYPE)
|
|
|
- MESSAGE(STATUS "No stm32 chip selected. You will have to use chip specific variables, i.e. STM32_CHIP_DEF_HD. You can select stm32 chip using STM32_CHIP_TYPE variable. (HD, HD_VL, MD, MD_VL, LD, LD_VL, XL, CL)")
|
|
|
+IF((NOT STM32_CHIP_TYPE) AND (NOT STM32_CHIP))
|
|
|
UNSET(CMSIS_STARTUP_NAME)
|
|
|
UNSET(CMSIS_STARTUP_SOURCE)
|
|
|
- UNSET(STM32_CHIP_DEF)
|
|
|
- SET(CMSIS_FIND_LIBS ${CMSIS_LIB_NAME_HD} ${CMSIS_LIB_NAME_HD_VL} ${CMSIS_LIB_NAME_MD} ${CMSIS_LIB_NAME_MD_VL} ${CMSIS_LIB_NAME_LD} ${CMSIS_LIB_NAME_LD_VL} ${CMSIS_LIB_NAME_CL} ${CMSIS_LIB_NAME_XL})
|
|
|
+ FOREACH(CHIP_TYPE ${STM32_CHIP_TYPES})
|
|
|
+ STRING(TOLOWER ${CHIP_TYPE} CHIP_TYPE_LOWER)
|
|
|
+ LIST(APPEND CMSIS_FIND_LIBS cmsis_${STM32_FAMILY_LOWER}_${CHIP_TYPE_LOWER})
|
|
|
+ ENDFOREACH()
|
|
|
ELSE()
|
|
|
- IF(STM32_CHIP_TYPE STREQUAL "HD")
|
|
|
- SET(CMSIS_FIND_LIBS ${CMSIS_LIB_NAME_HD})
|
|
|
- SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_SOURCE_HD})
|
|
|
- SET(STM32_CHIP_DEF ${STM32_CHIP_DEF_HD})
|
|
|
- ELSEIF(STM32_CHIP_TYPE STREQUAL "HD_VL")
|
|
|
- SET(CMSIS_FIND_LIBS ${CMSIS_LIB_NAME_HD_VL})
|
|
|
- SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_SOURCE_HD_VL})
|
|
|
- SET(STM32_CHIP_DEF ${STM32_CHIP_DEF_HD_VL})
|
|
|
- ELSEIF(STM32_CHIP_TYPE STREQUAL "MD")
|
|
|
- SET(CMSIS_FIND_LIBS ${CMSIS_LIB_NAME_MD})
|
|
|
- SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_SOURCE_MD})
|
|
|
- SET(STM32_CHIP_DEF ${STM32_CHIP_DEF_MD})
|
|
|
- ELSEIF(STM32_CHIP_TYPE STREQUAL "MD_VL")
|
|
|
- SET(CMSIS_FIND_LIBS ${CMSIS_LIB_NAME_MD_VL})
|
|
|
- SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_SOURCE_MD_VL})
|
|
|
- SET(STM32_CHIP_DEF ${STM32_CHIP_DEF_MD_VL})
|
|
|
- ELSEIF(STM32_CHIP_TYPE STREQUAL "LD")
|
|
|
- SET(CMSIS_FIND_LIBS ${CMSIS_LIB_NAME_LD})
|
|
|
- SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_SOURCE_LD})
|
|
|
- SET(STM32_CHIP_DEF ${STM32_CHIP_DEF_LD})
|
|
|
- ELSEIF(STM32_CHIP_TYPE STREQUAL "LD_VL")
|
|
|
- SET(CMSIS_FIND_LIBS ${CMSIS_LIB_NAME_LD_VL})
|
|
|
- SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_SOURCE_LD_VL})
|
|
|
- SET(STM32_CHIP_DEF ${STM32_CHIP_DEF_LD_VL})
|
|
|
- ELSEIF(STM32_CHIP_TYPE STREQUAL "XL")
|
|
|
- SET(CMSIS_FIND_LIBS ${CMSIS_LIB_NAME_XL})
|
|
|
- SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_SOURCE_XL})
|
|
|
- SET(STM32_CHIP_DEF ${STM32_CHIP_DEF_XL})
|
|
|
- ELSEIF(STM32_CHIP_TYPE STREQUAL "CL")
|
|
|
- SET(CMSIS_FIND_LIBS ${CMSIS_LIB_NAME_CL})
|
|
|
- SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_SOURCE_CL})
|
|
|
- SET(STM32_CHIP_DEF ${STM32_CHIP_DEF_CL})
|
|
|
- ELSE()
|
|
|
- MESSAGE(FATAL_ERROR "Invalid stm32 chip type.")
|
|
|
+ IF(NOT STM32_CHIP_TYPE)
|
|
|
+ STM32_GET_CHIP_TYPE(${STM32_CHIP} STM32_CHIP_TYPE)
|
|
|
+ IF(NOT STM32_CHIP_TYPE)
|
|
|
+ MESSAGE(FATAL_ERROR "Unknown chip: ${STM32_CHIP}. Try to use STM32_CHIP_TYPE directly.")
|
|
|
+ ENDIF()
|
|
|
+ MESSAGE(STATUS "${STM32_CHIP} is ${STM32_CHIP_TYPE} device")
|
|
|
ENDIF()
|
|
|
+ STRING(TOLOWER ${STM32_CHIP_TYPE} STM32_CHIP_TYPE_LOWER)
|
|
|
+
|
|
|
+ SET(CMSIS_FIND_LIBS cmsis_${STM32_FAMILY_LOWER}_${STM32_CHIP_TYPE_LOWER})
|
|
|
+ SET(CMSIS_STARTUP_NAME ${CMSIS_STARTUP_PREFIX}${STM32_CHIP_TYPE_LOWER}.s)
|
|
|
ENDIF()
|
|
|
|
|
|
-FIND_PATH(CMSIS_INCLUDE_DIR system_stm32f10x.h core_cm3.h stm32f10x.h
|
|
|
- PATH_SUFFIXES include stm32
|
|
|
+FIND_PATH(CMSIS_INCLUDE_DIR ${CMSIS_HEADERS}
|
|
|
+ PATH_SUFFIXES include stm32${STM32_FAMILY_LOWER}
|
|
|
)
|
|
|
|
|
|
FOREACH(CMSIS_LIB_NAME ${CMSIS_FIND_LIBS})
|
|
|
@@ -79,40 +37,90 @@ FOREACH(CMSIS_LIB_NAME ${CMSIS_FIND_LIBS})
|
|
|
NAMES ${CMSIS_LIB_NAME}
|
|
|
PATH_SUFFIXES lib
|
|
|
)
|
|
|
- SET(CMSIS_LIBRARIES ${CMSIS_LIBRARIES} ${CMSIS_LIBRARY})
|
|
|
+ LIST(APPEND CMSIS_LIBRARIES ${CMSIS_LIBRARY})
|
|
|
ENDFOREACH()
|
|
|
|
|
|
-FIND_FILE(CMSIS_LINKER_SCRIPT
|
|
|
- stm32_flash.ld.in
|
|
|
- PATHS ${CMAKE_FIND_ROOT_PATH}/share/cmsis/
|
|
|
-)
|
|
|
+FIND_FILE(CMSIS_LINKER_SCRIPT ${CMSIS_LINKER_SCRIPT_NAME} PATHS ${CMAKE_FIND_ROOT_PATH}/share/cmsis/)
|
|
|
|
|
|
INCLUDE(FindPackageHandleStandardArgs)
|
|
|
IF(NOT STM32_CHIP_TYPE)
|
|
|
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(CMSIS DEFAULT_MSG CMSIS_LIBRARIES CMSIS_INCLUDE_DIR CMSIS_LINKER_SCRIPT STM32_CHIP_DEF_HD STM32_CHIP_DEF_HD_VL STM32_CHIP_DEF_MD STM32_CHIP_DEF_MD_VL STM32_CHIP_DEF_LD STM32_CHIP_DEF_LD_VL STM32_CHIP_DEF_XL STM32_CHIP_DEF_CL)
|
|
|
+ FIND_PACKAGE_HANDLE_STANDARD_ARGS(CMSIS DEFAULT_MSG CMSIS_LIBRARIES CMSIS_INCLUDE_DIR CMSIS_LINKER_SCRIPT)
|
|
|
ELSE()
|
|
|
FIND_FILE(CMSIS_STARTUP_SOURCE
|
|
|
${CMSIS_STARTUP_NAME}
|
|
|
PATHS ${CMAKE_FIND_ROOT_PATH}/share/cmsis/
|
|
|
)
|
|
|
- SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D${STM32_CHIP_DEF}")
|
|
|
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D${STM32_CHIP_DEF}")
|
|
|
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(CMSIS DEFAULT_MSG CMSIS_LIBRARIES CMSIS_INCLUDE_DIR CMSIS_STARTUP_SOURCE CMSIS_LINKER_SCRIPT STM32_CHIP_DEF)
|
|
|
+ FIND_PACKAGE_HANDLE_STANDARD_ARGS(CMSIS DEFAULT_MSG CMSIS_LIBRARIES CMSIS_INCLUDE_DIR CMSIS_STARTUP_SOURCE CMSIS_LINKER_SCRIPT)
|
|
|
ENDIF()
|
|
|
|
|
|
-FUNCTION(STM32_SET_PARAMS FLASH_SIZE RAM_SIZE STACK_ADDRESS MIN_STACK_SIZE MIN_HEAP_SIZE EXT_RAM_SIZE FLASH_ORIGIN RAM_ORIGIN EXT_RAM_ORIGIN)
|
|
|
- CONFIGURE_FILE(${CMSIS_LINKER_SCRIPT} ${CMAKE_CURRENT_BINARY_DIR}/stm32_flash.ld)
|
|
|
-ENDFUNCTION(STM32_SET_PARAMS)
|
|
|
+MACRO(STM32_KB_TO_BYTES KB BYTES)
|
|
|
+ STRING(REGEX REPLACE "^(.+)[kK]$" "\\1" KILOBYTES ${KB})
|
|
|
+ IF(KILOBYTES)
|
|
|
+ MATH(EXPR ${BYTES} "${KILOBYTES} * 1024")
|
|
|
+ ELSE()
|
|
|
+ SET(${BYTES} ${KB})
|
|
|
+ ENDIF()
|
|
|
+ENDMACRO()
|
|
|
+
|
|
|
+FUNCTION(STM32_SET_FLASH_PARAMS TARGET STM32_FLASH_SIZE STM32_RAM_SIZE STM32_STACK_ADDRESS STM32_MIN_STACK_SIZE STM32_MIN_HEAP_SIZE STM32_EXT_RAM_SIZE STM32_FLASH_ORIGIN STM32_RAM_ORIGIN STM32_EXT_RAM_ORIGIN)
|
|
|
+ CONFIGURE_FILE(${CMSIS_LINKER_SCRIPT} ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_flash.ld)
|
|
|
+ SET_TARGET_PROPERTIES(${TARGET} PROPERTIES LINK_FLAGS "-T${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_flash.ld ${CMAKE_EXE_LINKER_FLAGS}")
|
|
|
+ENDFUNCTION()
|
|
|
|
|
|
-FUNCTION(STM32_SET_PARAMS FLASH_SIZE RAM_SIZE STACK_ADDRESS)
|
|
|
- SET(STACK_ADDRESS ${STACK_ADDRESS})
|
|
|
- SET(FLASH_SIZE ${FLASH_SIZE})
|
|
|
- SET(RAM_SIZE ${RAM_SIZE})
|
|
|
- SET(MIN_STACK_SIZE "0x200")
|
|
|
- SET(MIN_HEAP_SIZE "0")
|
|
|
- SET(EXT_RAM_SIZE "0K")
|
|
|
- SET(FLASH_ORIGIN "0x08000000")
|
|
|
- SET(RAM_ORIGIN "0x20000000")
|
|
|
- SET(EXT_RAM_ORIGIN "0x60000000")
|
|
|
- CONFIGURE_FILE(${CMSIS_LINKER_SCRIPT} ${CMAKE_CURRENT_BINARY_DIR}/stm32_flash.ld)
|
|
|
-ENDFUNCTION(STM32_SET_PARAMS)
|
|
|
+FUNCTION(STM32_SET_FLASH_PARAMS TARGET FLASH_SIZE RAM_SIZE)
|
|
|
+ STM32_KB_TO_BYTES(${FLASH_SIZE} FLASH_SIZE)
|
|
|
+ STM32_KB_TO_BYTES(${RAM_SIZE} RAM_SIZE)
|
|
|
+
|
|
|
+ IF(NOT STM32_FLASH_ORIGIN)
|
|
|
+ SET(STM32_FLASH_ORIGIN "0x08000000")
|
|
|
+ ENDIF()
|
|
|
+
|
|
|
+ IF(NOT STM32_RAM_ORIGIN)
|
|
|
+ SET(STM32_RAM_ORIGIN "536870912")
|
|
|
+ ENDIF()
|
|
|
+
|
|
|
+ IF(NOT STM32_EXT_RAM_ORIGIN)
|
|
|
+ SET(STM32_EXT_RAM_ORIGIN "0x60000000")
|
|
|
+ ENDIF()
|
|
|
+
|
|
|
+ IF(NOT STM32_STACK_ADDRESS)
|
|
|
+ MATH(EXPR STM32_STACK_ADDRESS "${STM32_RAM_ORIGIN} + ${RAM_SIZE}")
|
|
|
+ ENDIF()
|
|
|
+
|
|
|
+ SET(STM32_FLASH_SIZE ${FLASH_SIZE})
|
|
|
+ SET(STM32_RAM_SIZE ${RAM_SIZE})
|
|
|
+
|
|
|
+ IF(NOT STM32_MIN_STACK_SIZE)
|
|
|
+ SET(STM32_MIN_STACK_SIZE "0x200")
|
|
|
+ ENDIF()
|
|
|
+
|
|
|
+ IF(NOT STM32_MIN_HEAP_SIZE)
|
|
|
+ SET(STM32_MIN_HEAP_SIZE "0")
|
|
|
+ ENDIF()
|
|
|
+
|
|
|
+ IF(NOT STM32_EXT_RAM_SIZE)
|
|
|
+ SET(STM32_EXT_RAM_SIZE "0K")
|
|
|
+ ENDIF()
|
|
|
+
|
|
|
+ CONFIGURE_FILE(${CMSIS_LINKER_SCRIPT} ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_flash.ld)
|
|
|
+ SET_TARGET_PROPERTIES(${TARGET} PROPERTIES LINK_FLAGS "-T${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_flash.ld ${CMAKE_EXE_LINKER_FLAGS}")
|
|
|
+ENDFUNCTION()
|
|
|
+
|
|
|
+FUNCTION(STM32_SET_TARGET_PROPERTIES TARGET)
|
|
|
+ IF((NOT STM32_CHIP_TYPE) AND (NOT STM32_CHIP))
|
|
|
+ MESSAGE(WARNING "Neither STM32_CHIP_TYPE nor STM32_CHIP selected, you'll have to use STM32_SET_CHIP_DEFINITIONS directly")
|
|
|
+ ELSE()
|
|
|
+ STM32_SET_CHIP_DEFINITIONS(${TARGET} ${STM32_CHIP_TYPE})
|
|
|
+ IF(((NOT STM32_FLASH_SIZE) OR (NOT STM32_RAM_SIZE)) AND (NOT STM32_CHIP))
|
|
|
+ MESSAGE(FATAL_ERROR "Cannot get chip parameters. Please specify either STM32_CHIP or STM32_FLASH_SIZE/STM32_RAM_SIZE")
|
|
|
+ ENDIF()
|
|
|
+ IF((NOT STM32_FLASH_SIZE) OR (NOT STM32_RAM_SIZE))
|
|
|
+ STM32_GET_CHIP_PARAMETERS(${STM32_CHIP} STM32_FLASH_SIZE STM32_RAM_SIZE)
|
|
|
+ IF((NOT STM32_FLASH_SIZE) OR (NOT STM32_RAM_SIZE))
|
|
|
+ MESSAGE(FATAL_ERROR "Unknown chip: ${STM32_CHIP}. Try to use STM32_FLASH_SIZE/STM32_RAM_SIZE directly.")
|
|
|
+ ENDIF()
|
|
|
+ MESSAGE(STATUS "${STM32_CHIP} has ${STM32_FLASH_SIZE}iB of flash memory and ${STM32_RAM_SIZE}iB of RAM")
|
|
|
+ ENDIF()
|
|
|
+ ENDIF()
|
|
|
+ STM32_SET_FLASH_PARAMS(${TARGET} ${STM32_FLASH_SIZE} ${STM32_RAM_SIZE})
|
|
|
+ENDFUNCTION()
|