Konstantin Oblaukhov 14 лет назад
Родитель
Сommit
25b65b4dcf

+ 44 - 16
README.mediawiki

@@ -6,35 +6,63 @@ Requirements:
 * GCC toolchain with newlib.
 * GCC toolchain with newlib.
 * STM32F10x Standard Peripherals Library
 * STM32F10x Standard Peripherals Library
 Project contains:
 Project contains:
-* CMake toolchain file, that configures cmake to use arm toolchain, and sets some variables for STM32F10x Standard Peripherals Library.
+* CMake toolchain file, that configures cmake to use arm toolchain.
+* CMake projects that builds CMSIS and STM32F10x Standard Peripherals Library into static libraries.
+* CMake modules to find and configure CMSIS ans StdPeriphLib libraries.
 * CMake project template.
 * CMake project template.
 * Example projects
 * Example projects
 ** blinky - blink LED using timers and PWM.
 ** blinky - blink LED using timers and PWM.
 ** newlib - show date from RTC using uart and libc functions from newlib
 ** newlib - show date from RTC using uart and libc functions from newlib
+
 == Usage ==
 == Usage ==
-=== Configure ===
-First of all you need to configure toolchain, you can do this by editing values in stm32.cmake or pass it throught command line.
+== Building & Installing ==
+First of all you need to configure toolchain and libraries, you can do this by editing gcc_stm32.cmake or pass it throught command line.
 Variables for toolchain:
 Variables for toolchain:
 * TOOLCHAIN_PREFIX - where toolchain is located, '''default''': /usr
 * TOOLCHAIN_PREFIX - where toolchain is located, '''default''': /usr
-* STM32_StdPeriphLib_DIR - path to STM32F10x Standard Peripherals Library '''default''': /opt/STM32F10x_StdPeriph_Lib_V3.5.0
 * TARGET_TRIPLET - toolchain target triplet, '''default''': arm-none-eabi
 * TARGET_TRIPLET - toolchain target triplet, '''default''': arm-none-eabi
+Variables for CMSIS and StdPeriphLib:
+* STM32_StdPeriphLib_DIR - path to STM32F10x Standard Peripherals Library '''default''': /opt/STM32F10x_StdPeriph_Lib_V3.5.0
+* USE_ASSERT - Use internal asserts in Standard Peripherals Library.
+
+=== Build CMSIS and Standard Peripherals Library ===
+In cmsis folder:
+ cmake -DCMAKE_TOOLCHAIN_FILE=../gcc_stm32.cmake -DCMAKE_INSTALL_PREFIX=<path_to_toolchain>/arm-none-eabi/ -DCMAKE_BUILD_TYPE=Release
+ make && make install
+In stdperiph folder
+ cmake -DCMAKE_TOOLCHAIN_FILE=../gcc_stm32.cmake -DCMAKE_INSTALL_PREFIX=<path_to_toolchain>/arm-none-eabi/ -DCMAKE_BUILD_TYPE=Release
+ make && make install
+'''Note:''' You can use different CMAKE_INSTALL_PREFIX, but than you'll have to configure cmake search paths when using cmake modules.
+
+'''Note:''' To prevent header collision file "misc.h" from Standard Peripherals Library will be installed as stm32f10x_misc.h
+
+== Usage ==
+After building you need to copy cmake modules in cmake's modules path, or just set CMAKE_MODULE_PATH in project. 
 Than you need to adjust some variables in CMakeLists.txt (example for stm32f103ve):
 Than you need to adjust some variables in CMakeLists.txt (example for stm32f103ve):
-* PROJECT(stm32-blinky) - Set the project name.
-* SET(STM32_FLASH_SIZE "512K") - Select chip's flash size.
-* SET(STM32_RAM_SIZE "64K") - Select chip's RAM size.
-* SET(STM32_STACK_ADDRESS "0x20010000") - Select stack address = ram origin + ram size
-* SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSTM32F10X_HD") - Select your device type in defines (CL, HD, HD_VL, LD, LD_VL, MD, MD_VL, XL, more information in StdPeriphLib)
-* SET(STARTUP_SOURCE ${STM32_STARTUP_HD}) - Select your device type for startup files (CL, HD, HD_VL, LD, LD_VL, MD, MD_VL, XL, more information in StdPeriphLib)
-* MOD_SOURCES contains list of StdPeriphLib's modules needed for project.
+* PROJECT(stm32-template) - Set the project name.
+* FIND_PACKAGE(StdPeriphLib REQUIRED) - comment/remove this if you don't need StdPeriphLib. CMSIS package are always required.
+* STM32_SET_PARAMS("512K" "64K" "0x20010000") - Set chip's flash size, ram size, and stack bottom address. Also, you can change min heap size, stack size, etc. - look into FindCMSIS.cmake
 * All projects sources should be listed in PROJECT_SOURCES variable.
 * All projects sources should be listed in PROJECT_SOURCES variable.
-Also, you need to adjust StdPeriphLib modules in stm32f10x_conf.h.
+Also, if you using StdPeriphLib you need to adjust modules in stm32f10x_conf.h.
+
 === Build ===
 === Build ===
 Generate Makefile:
 Generate Makefile:
- cmake -DCMAKE_TOOLCHAIN_FILE=<path_to_stm32.cmake> -DCMAKE_BUILD_TYPE=Debug <path_to_source_dir>
+ cmake -DSTM32_CHIP_TYPE=<chip type> -DCMAKE_TOOLCHAIN_FILE=<path_to_gcc_stm32.cmake> -DCMAKE_BUILD_TYPE=Debug <path_to_source_dir>
+Where <chip type>:
+* HD - High Density MCUs
+* HD_VL - High Density Value Line MCUs
+* MD - Medium Density MCUs
+* MD_VL - Medium Density Value Line MCUs
+* LD - Low Density MCUs
+* LD_VL - Low Density Value Line MCUs
+* CL - Connectivity Line MCUs
+* XL - XL Density MCUs
 Build:
 Build:
  make
  make
-The result is a .elf, .bin, and hex files.
+The result is a .elf file, to build .hex:
+ make <project name>.hex
+or .bin:
+ make <project name>.bin
 For using with Eclipse CDT:
 For using with Eclipse CDT:
- cmake -DCMAKE_TOOLCHAIN_FILE=<path_to_stm32.cmake> -DCMAKE_BUILD_TYPE=Debug -G "Eclipse CDT4 - Unix Makefiles" <path_to_source_dir>
+ cmake -DSTM32_CHIP_TYPE=<chip type> -DCMAKE_TOOLCHAIN_FILE=<path_to_stm32.cmake> -DCMAKE_BUILD_TYPE=Debug -G "Eclipse CDT4 - Unix Makefiles" <path_to_source_dir>
 For release build:
 For release build:
- cmake -DCMAKE_TOOLCHAIN_FILE=<path_to_stm32.cmake> -DCMAKE_BUILD_TYPE=Release <path_to_source_dir>
+ cmake -DSTM32_CHIP_TYPE=<chip type> -DCMAKE_TOOLCHAIN_FILE=<path_to_stm32.cmake> -DCMAKE_BUILD_TYPE=Release <path_to_source_dir>

+ 81 - 0
cmake/Modules/FindCMSIS.cmake

@@ -0,0 +1,81 @@
+IF(NOT STM32_CHIP_TYPE)
+    MESSAGE(FATAL_ERROR "Select your stm32 chip using STM32_CHIP_TYPE variable. (HD, HD_VL, MD, MD_VL, LD, LD_VL, XD, CL)")
+ENDIF()
+
+IF(STM32_CHIP_TYPE STREQUAL "HD")
+    SET(CMSIS_LIB_NAME cmsis_hd)
+    SET(CMSIS_STARTUP_NAME startup_stm32f10x_hd.s)
+    SET(STM32_CHIP_DEF "-DSTM32F10X_HD")
+ELSEIF(STM32_CHIP_TYPE STREQUAL "HD_VL")
+    SET(CMSIS_LIB_NAME cmsis_hd_vl)
+    SET(CMSIS_STARTUP_NAME startup_stm32f10x_hd_vl.s)
+    SET(STM32_CHIP_DEF "-DSTM32F10X_HD_VL")
+ELSEIF(STM32_CHIP_TYPE STREQUAL "MD")
+    SET(CMSIS_LIB_NAME cmsis_md)
+    SET(CMSIS_STARTUP_NAME startup_stm32f10x_md.s)
+    SET(STM32_CHIP_DEF "-DSTM32F10X_MD")
+ELSEIF(STM32_CHIP_TYPE STREQUAL "MD_VL")
+    SET(CMSIS_LIB_NAME cmsis_md_vl)
+    SET(CMSIS_STARTUP_NAME startup_stm32f10x_md_vl.s)
+    SET(STM32_CHIP_DEF "-DSTM32F10X_MD_VL")
+ELSEIF(STM32_CHIP_TYPE STREQUAL "LD")
+    SET(CMSIS_LIB_NAME cmsis_ld)
+    SET(CMSIS_STARTUP_NAME startup_stm32f10x_ld.s)
+    SET(STM32_CHIP_DEF "-DSTM32F10X_LD")
+ELSEIF(STM32_CHIP_TYPE STREQUAL "LD_VL")
+    SET(CMSIS_LIB_NAME cmsis_ld_vl)
+    SET(CMSIS_STARTUP_NAME startup_stm32f10x_ld_vl.s)
+    SET(STM32_CHIP_DEF "-DSTM32F10X_LD_VL")
+ELSEIF(STM32_CHIP_TYPE STREQUAL "XD")
+    SET(CMSIS_LIB_NAME cmsis_xd)
+    SET(CMSIS_STARTUP_NAME startup_stm32f10x_xd.s)
+    SET(STM32_CHIP_DEF "-DSTM32F10X_XD")
+ELSEIF(STM32_CHIP_TYPE STREQUAL "CL")
+    SET(CMSIS_LIB_NAME cmsis_cl)
+    SET(CMSIS_STARTUP_NAME startup_stm32f10x_cl.s)
+    SET(STM32_CHIP_DEF "-DSTM32F10X_CL")
+ELSE()
+    MESSAGE(FATAL_ERROR "Invalid stm32 chip type.")
+ENDIF()
+
+FIND_PATH(CMSIS_INCLUDE_DIR system_stm32f10x.h core_cm3.h stm32f10x.h 
+    PATH_SUFFIXES include stm32
+)
+
+FIND_LIBRARY(CMSIS_LIBRARIES
+    NAMES ${CMSIS_LIB_NAME}
+    PATH_SUFFIXES lib
+)
+
+FIND_FILE(CMSIS_STARTUP_SOURCE
+    ${CMSIS_STARTUP_NAME}
+    PATHS ${CMAKE_FIND_ROOT_PATH}/share/cmsis/
+)
+
+FIND_FILE(CMSIS_LINKER_SCRIPT
+    stm32_flash.ld.in
+    PATHS ${CMAKE_FIND_ROOT_PATH}/share/cmsis/
+)
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(CMSIS DEFAULT_MSG CMSIS_LIBRARIES CMSIS_INCLUDE_DIR CMSIS_STARTUP_SOURCE CMSIS_LINKER_SCRIPT) 
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${STM32_CHIP_DEF}")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${STM32_CHIP_DEF}")
+
+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)
+
+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)

+ 61 - 0
cmake/Modules/FindStdPeriphLib.cmake

@@ -0,0 +1,61 @@
+IF(NOT STM32_CHIP_TYPE)
+    MESSAGE(FATAL_ERROR "Select your stm32 chip using STM32_CHIP_TYPE variable. (HD, HD_VL, MD, MD_VL, LD, LD_VL, XD, CL)")
+ENDIF()
+
+IF(STM32_CHIP_TYPE STREQUAL "HD")
+    SET(StdPeriphLib_LIB_NAME stdperiph_hd)
+ELSEIF(STM32_CHIP_TYPE STREQUAL "HD_VL")
+    SET(StdPeriphLib_LIB_NAME stdperiph_hd_vl)
+ELSEIF(STM32_CHIP_TYPE STREQUAL "MD")
+    SET(StdPeriphLib_LIB_NAME stdperiph_md)
+ELSEIF(STM32_CHIP_TYPE STREQUAL "MD_VL")
+    SET(StdPeriphLib_LIB_NAME stdperiph_md_vl)
+ELSEIF(STM32_CHIP_TYPE STREQUAL "LD")
+    SET(StdPeriphLib_LIB_NAME stdperiph_ld)
+ELSEIF(STM32_CHIP_TYPE STREQUAL "LD_VL")
+    SET(StdPeriphLib_LIB_NAME stdperiph_ld_vl)
+ELSEIF(STM32_CHIP_TYPE STREQUAL "XD")
+    SET(StdPeriphLib_LIB_NAME stdperiph_xd)
+ELSEIF(STM32_CHIP_TYPE STREQUAL "CL")
+    SET(StdPeriphLib_LIB_NAME stdperiph_cl)
+ELSE()
+    MESSAGE(FATAL_ERROR "Invalid stm32 chip type.")
+ENDIF()
+
+FIND_PATH(StdPeriphLib_INCLUDE_DIR 
+    stm32f10x_adc.h
+    stm32f10x_bkp.h
+    stm32f10x_can.h
+    stm32f10x_cec.h
+    stm32f10x_crc.h
+    stm32f10x_dac.h
+    stm32f10x_dbgmcu.h
+    stm32f10x_dma.h
+    stm32f10x_exti.h
+    stm32f10x_flash.h
+    stm32f10x_fsmc.h
+    stm32f10x_gpio.h
+    stm32f10x_i2c.h
+    stm32f10x_iwdg.h
+    stm32f10x_pwr.h
+    stm32f10x_rcc.h
+    stm32f10x_rtc.h
+    stm32f10x_sdio.h
+    stm32f10x_spi.h
+    stm32f10x_tim.h
+    stm32f10x_usart.h
+    stm32f10x_wwdg.h
+    stm32f10x_misc.h
+    PATH_SUFFIXES include stm32
+)
+
+FIND_LIBRARY(StdPeriphLib_LIBRARIES
+    NAMES ${StdPeriphLib_LIB_NAME}
+    PATH_SUFFIXES lib
+)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_STDPERIPH_DRIVER")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_STDPERIPH_DRIVER")
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(StdPeriphLib DEFAULT_MSG StdPeriphLib_LIBRARIES StdPeriphLib_INCLUDE_DIR) 

+ 81 - 0
cmsis/CMakeLists.txt

@@ -0,0 +1,81 @@
+PROJECT(stm32cmsis)
+
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+ENABLE_LANGUAGE(ASM)
+
+IF(NOT STM32_StdPeriphLib_DIR)
+    SET(STM32_StdPeriphLib_DIR "/opt/STM32F10x_StdPeriph_Lib_V3.5.0")
+    MESSAGE(STATUS "No STM32_StdPeriphLib_DIR specified, using default: " ${STM32_StdPeriphLib_DIR})
+ENDIF()
+
+INCLUDE_DIRECTORIES(
+    ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/
+    ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/CoreSupport/
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+SET(CMSIS_SOURCES
+    ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/CoreSupport/core_cm3.c
+)
+
+SET(STM32_STARTUP_CL ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_cl.s)
+SET(STM32_STARTUP_HD ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_hd.s)
+SET(STM32_STARTUP_HD_VL ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_hd_vl.s)
+SET(STM32_STARTUP_LD ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_ld.s)
+SET(STM32_STARTUP_LD_VL ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_ld_vl.s)
+SET(STM32_STARTUP_MD ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_md.s)
+SET(STM32_STARTUP_MD_VL ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_md_vl.s)
+SET(STM32_STARTUP_XL ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_xl.s)
+
+ADD_LIBRARY(cmsis_cl ${CMSIS_SOURCES})
+SET_TARGET_PROPERTIES(cmsis_cl PROPERTIES COMPILE_FLAGS "-DSTM32F10X_CL")
+
+ADD_LIBRARY(cmsis_hd ${CMSIS_SOURCES})
+SET_TARGET_PROPERTIES(cmsis_hd PROPERTIES COMPILE_DEFINITIONS "STM32F10X_HD")
+
+ADD_LIBRARY(cmsis_hd_vl ${CMSIS_SOURCES})
+SET_TARGET_PROPERTIES(cmsis_hd_vl PROPERTIES COMPILE_DEFINITIONS "STM32F10X_HD_VL")
+
+ADD_LIBRARY(cmsis_ld ${CMSIS_SOURCES})
+SET_TARGET_PROPERTIES(cmsis_ld PROPERTIES COMPILE_DEFINITIONS "STM32F10X_LD")
+
+ADD_LIBRARY(cmsis_ld_vl ${CMSIS_SOURCES})
+SET_TARGET_PROPERTIES(cmsis_ld_vl PROPERTIES COMPILE_DEFINITIONS "STM32F10X_LD_VL")
+
+ADD_LIBRARY(cmsis_md ${CMSIS_SOURCES})
+SET_TARGET_PROPERTIES(cmsis_md PROPERTIES COMPILE_DEFINITIONS "STM32F10X_MD")
+
+ADD_LIBRARY(cmsis_md_vl ${CMSIS_SOURCES})
+SET_TARGET_PROPERTIES(cmsis_md_vl PROPERTIES COMPILE_DEFINITIONS "STM32F10X_MD_VL")
+
+ADD_LIBRARY(cmsis_xl ${CMSIS_SOURCES})
+SET_TARGET_PROPERTIES(cmsis_xl PROPERTIES COMPILE_DEFINITIONS "STM32F10X_XL")
+
+INSTALL(TARGETS cmsis_cl cmsis_hd cmsis_hd_vl cmsis_ld cmsis_ld_vl cmsis_md cmsis_md_vl cmsis_xl
+    RUNTIME DESTINATION bin
+    LIBRARY DESTINATION lib
+    ARCHIVE DESTINATION lib
+)
+
+INSTALL(FILES 
+    ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/CoreSupport/core_cm3.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h
+    DESTINATION
+    include
+)
+
+INSTALL(FILES 
+    ${STM32_STARTUP_CL}
+    ${STM32_STARTUP_HD}
+    ${STM32_STARTUP_HD_VL}
+    ${STM32_STARTUP_MD}
+    ${STM32_STARTUP_MD_VL}
+    ${STM32_STARTUP_LD}
+    ${STM32_STARTUP_LD_VL}
+    ${STM32_STARTUP_XL}
+    ${CMAKE_CURRENT_SOURCE_DIR}/stm32_flash.ld.in
+    DESTINATION
+    share/cmsis/
+)

+ 6 - 6
stm32-blinky/stm32_flash.ld.in → cmsis/stm32_flash.ld.in

@@ -15,18 +15,18 @@
 ENTRY(Reset_Handler)
 ENTRY(Reset_Handler)
 
 
 /* Highest address of the user mode stack */
 /* Highest address of the user mode stack */
-_estack = ${STM32_STACK_ADDRESS};    /* end of RAM */
+_estack = ${STACK_ADDRESS};    /* end of RAM */
 
 
 /* Generate a link error if heap and stack don't fit into RAM */
 /* Generate a link error if heap and stack don't fit into RAM */
-_Min_Heap_Size = 0;      /* required amount of heap  */
-_Min_Stack_Size = 0x200; /* required amount of stack */
+_Min_Heap_Size = ${MIN_HEAP_SIZE};      /* required amount of heap  */
+_Min_Stack_Size = ${MIN_STACK_SIZE}; /* required amount of stack */
 
 
 /* Specify the memory areas */
 /* Specify the memory areas */
 MEMORY
 MEMORY
 {
 {
-  FLASH (rx)      : ORIGIN = ${STM32_FLASH_ORIGIN}, LENGTH = ${STM32_FLASH_SIZE}
-  RAM (xrw)       : ORIGIN = ${STM32_RAM_ORIGIN}, LENGTH = ${STM32_RAM_SIZE}
-  MEMORY_B1 (rx)  : ORIGIN = 0x60000000, LENGTH = 0K
+  FLASH (rx)      : ORIGIN = ${FLASH_ORIGIN}, LENGTH = ${FLASH_SIZE}
+  RAM (xrw)       : ORIGIN = ${RAM_ORIGIN}, LENGTH = ${RAM_SIZE}
+  MEMORY_B1 (rx)  : ORIGIN = ${EXT_RAM_ORIGIN}, LENGTH = ${EXT_RAM_SIZE}
 }
 }
 
 
 /* Define output sections */
 /* Define output sections */

+ 45 - 0
gcc_stm32.cmake

@@ -0,0 +1,45 @@
+# GCC toolchain prefix
+IF(NOT TOOLCHAIN_PREFIX)
+     SET(TOOLCHAIN_PREFIX "/opt/arm-2011.09")
+     MESSAGE(STATUS "No TOOLCHAIN_PREFIX specified, using default: " ${TOOLCHAIN_PREFIX})
+ENDIF()
+
+IF(NOT TARGET_TRIPLET)
+    SET(TARGET_TRIPLET "arm-none-eabi")
+    MESSAGE(STATUS "No TARGET_TRIPLET specified, using default: " ${TARGET_TRIPLET})
+ENDIF()
+
+SET(TOOLCHAIN_BIN_DIR ${TOOLCHAIN_PREFIX}/bin)
+SET(TOOLCHAIN_INC_DIR ${TOOLCHAIN_PREFIX}/${TARGET_TRIPLET}/include)
+SET(TOOLCHAIN_LIB_DIR ${TOOLCHAIN_PREFIX}/${TARGET_TRIPLET}/lib)
+
+SET(CMAKE_SYSTEM_NAME Generic CACHE INTERNAL "system name")
+SET(CMAKE_SYSTEM_PROCESSOR arm CACHE INTERNAL "processor")
+
+SET(CMAKE_C_COMPILER ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-gcc CACHE INTERNAL "c compiler")
+SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-g++ CACHE INTERNAL "cxx compiler")
+SET(CMAKE_ASM_COMPILER ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-as CACHE INTERNAL "asm compiler")
+
+SET(CMAKE_OBJCOPY ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-objcopy CACHE INTERNAL "objcopy")
+SET(CMAKE_OBJDUMP ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-objdump CACHE INTERNAL "objdump")
+
+SET(CMAKE_C_FLAGS "-isystem ${TOOLCHAIN_INC_DIR} -mthumb -mcpu=cortex-m3 -fno-builtin -Wall -std=gnu99 -fdata-sections -ffunction-sections" CACHE INTERNAL "c compiler flags")
+SET(CMAKE_CXX_FLAGS "-isystem ${TOOLCHAIN_INC_DIR} -mthumb -mcpu=cortex-m3 -fno-builtin -Wall  -fdata-sections -ffunction-sections" CACHE INTERNAL "cxx compiler flags")
+SET(CMAKE_ASM_FLAGS "-mthumb -mcpu=cortex-m3" CACHE INTERNAL "asm compiler flags")
+
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g -gstabs+" CACHE INTERNAL "c debug compiler flags")
+SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -gstabs+" CACHE INTERNAL "cxx debug compiler flags")
+SET(CMAKE_ASM_FLAGS_DEBUG "-g -gstabs+" CACHE INTERNAL "asm debug compiler flags")
+
+SET(CMAKE_C_FLAGS_RELEASE "-Os" CACHE INTERNAL "c release compiler flags")
+SET(CMAKE_CXX_FLAGS_RELEASE "-Os" CACHE INTERNAL "cxx release compiler flags")
+SET(CMAKE_ASM_FLAGS_RELEASE "" CACHE INTERNAL "asm release compiler flags")
+
+SET(CMAKE_EXE_LINKER_FLAGS "-nostartfiles -Wl,--gc-sections -mthumb -mcpu=cortex-m3" CACHE INTERNAL "exe link flags")
+SET(CMAKE_MODULE_LINKER_FLAGS "-L${TOOLCHAIN_LIB_DIR}" CACHE INTERNAL "module link flags")
+SET(CMAKE_SHARED_LINKER_FLAGS "-L${TOOLCHAIN_LIB_DIR}" CACHE INTERNAL "shared link flags")
+
+SET(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_PREFIX}/${TARGET_TRIPLET} CACHE INTERNAL "cross root directory")
+SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH CACHE INTERNAL "")
+SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY CACHE INTERNAL "")
+SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY CACHE INTERNAL "")

+ 113 - 0
stdperiph/CMakeLists.txt

@@ -0,0 +1,113 @@
+PROJECT(stm32stdperiph)
+
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+ENABLE_LANGUAGE(ASM)
+
+IF(NOT STM32_StdPeriphLib_DIR)
+    SET(STM32_StdPeriphLib_DIR "/opt/STM32F10x_StdPeriph_Lib_V3.5.0")
+    MESSAGE(STATUS "No STM32_StdPeriphLib_DIR specified, using default: " ${STM32_StdPeriphLib_DIR})
+ENDIF()
+
+INCLUDE_DIRECTORIES(
+    ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/
+    ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/CoreSupport/
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+SET(LIB_SOURCES
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/misc.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_adc.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_bkp.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_can.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_cec.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_crc.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_dac.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_dbgmcu.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_dma.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_exti.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_flash.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_fsmc.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_gpio.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_i2c.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_iwdg.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_pwr.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rtc.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_sdio.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_spi.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_tim.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_usart.c
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_wwdg.c
+)
+
+IF(USE_ASSERT)
+    ADD_DEFINITIONS("-D\"assert_param(expr)\"=\"((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))\"")
+ELSE()
+    ADD_DEFINITIONS("-D\"assert_param(expr)\"=\"((void)0)\"")
+ENDIF()
+
+ADD_LIBRARY(stdperiph_cl ${LIB_SOURCES})
+SET_TARGET_PROPERTIES(stdperiph_cl PROPERTIES COMPILE_DEFINITIONS "STM32F10X_CL")
+
+ADD_LIBRARY(stdperiph_hd ${LIB_SOURCES})
+SET_TARGET_PROPERTIES(stdperiph_hd PROPERTIES COMPILE_DEFINITIONS "STM32F10X_HD")
+
+ADD_LIBRARY(stdperiph_hd_vl ${LIB_SOURCES})
+SET_TARGET_PROPERTIES(stdperiph_hd_vl PROPERTIES COMPILE_DEFINITIONS "STM32F10X_HD_VL")
+
+ADD_LIBRARY(stdperiph_ld ${LIB_SOURCES})
+SET_TARGET_PROPERTIES(stdperiph_ld PROPERTIES COMPILE_DEFINITIONS "STM32F10X_LD")
+
+ADD_LIBRARY(stdperiph_ld_vl ${LIB_SOURCES})
+SET_TARGET_PROPERTIES(stdperiph_ld_vl PROPERTIES COMPILE_DEFINITIONS "STM32F10X_LD_VL")
+
+ADD_LIBRARY(stdperiph_md ${LIB_SOURCES})
+SET_TARGET_PROPERTIES(stdperiph_md PROPERTIES COMPILE_DEFINITIONS "STM32F10X_MD")
+
+ADD_LIBRARY(stdperiph_md_vl ${LIB_SOURCES})
+SET_TARGET_PROPERTIES(stdperiph_md_vl PROPERTIES COMPILE_DEFINITIONS "STM32F10X_MD_VL")
+
+ADD_LIBRARY(stdperiph_xl ${LIB_SOURCES})
+SET_TARGET_PROPERTIES(stdperiph_xl PROPERTIES COMPILE_DEFINITIONS "STM32F10X_XL")
+
+INSTALL(TARGETS stdperiph_cl stdperiph_hd stdperiph_hd_vl stdperiph_ld stdperiph_ld_vl stdperiph_md stdperiph_md_vl stdperiph_xl
+    RUNTIME DESTINATION bin
+    LIBRARY DESTINATION lib
+    ARCHIVE DESTINATION lib
+)
+
+INSTALL(FILES 
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_adc.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_bkp.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_can.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_cec.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_crc.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_dac.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_dbgmcu.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_dma.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_exti.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_flash.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_fsmc.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_gpio.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_i2c.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_iwdg.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_pwr.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rcc.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rtc.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_sdio.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_spi.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_tim.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_usart.h
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_wwdg.h
+    DESTINATION
+    include
+)
+
+INSTALL(FILES 
+    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/misc.h
+    RENAME
+    stm32f10x_misc.h
+    DESTINATION
+    include
+)

+ 13 - 61
stm32-blinky/CMakeLists.txt

@@ -1,74 +1,26 @@
-# Project name
 PROJECT(stm32-blinky)
 PROJECT(stm32-blinky)
 
 
 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 ENABLE_LANGUAGE(ASM)
 ENABLE_LANGUAGE(ASM)
 
 
-# Select your memory sizes here
-# Flash size
-SET(STM32_FLASH_SIZE "512K")
-# RAM size
-SET(STM32_RAM_SIZE "64K")
-# Stack address - bottom of RAM => RAM origin + RAM size
-SET(STM32_STACK_ADDRESS "0x20010000")
+FIND_PACKAGE(CMSIS REQUIRED)
+FIND_PACKAGE(StdPeriphLib REQUIRED)
 
 
-# Origins
-SET(STM32_FLASH_ORIGIN "0x08000000")
-SET(STM32_RAM_ORIGIN "0x20000000")
-
-# Compiler definitions for std. periph. library
-# Select your chip type here
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSTM32F10X_HD")
-SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSTM32F10X_HD")
-
-# Startup sources
-# Select your chip type here
-SET(STARTUP_SOURCE ${STM32_STARTUP_HD})
+STM32_SET_PARAMS("512K" "64K" "0x20010000")
+SET(CMAKE_EXE_LINKER_FLAGS "-T${CMAKE_CURRENT_BINARY_DIR}/stm32_flash.ld ${CMAKE_EXE_LINKER_FLAGS}")
 
 
-# Uncomment needed modules
-SET(MOD_SOURCES
-  ${STM32_MISC_SOURCE}
-#  ${STM32_ADC_SOURCE}
-#  ${STM32_BKP_SOURCE}
-#  ${STM32_CAN_SOURCE}
-#  ${STM32_CEC_SOURCE}
-#  ${STM32_CRC_SOURCE}
-#  ${STM32_DAC_SOURCE}
-#  ${STM32_DBGMCU_SOURCE}
-#  ${STM32_DMA_SOURCE}
-#  ${STM32_EXTI_SOURCE}
-#  ${STM32_FLASH_SOURCE}
-#  ${STM32_FSMC_SOURCE}
-  ${STM32_GPIO_SOURCE}
-#  ${STM32_I2C_SOURCE}
-#  ${STM32_IWDG_SOURCE}
-#  ${STM32_PWR_SOURCE}
-  ${STM32_RCC_SOURCE}
-#  ${STM32_RTC_SOURCE}
-#  ${STM32_SDIO_SOURCE}
-#  ${STM32_SPI_SOURCE}
-  ${STM32_TIM_SOURCE}
-#  ${STM32_USART_SOURCE}
-#  ${STM32_WWDG_SOURCE}
+INCLUDE_DIRECTORIES(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMSIS_INCLUDE_DIR}
+    ${StdPeriphLib_INCLUDE_DIR}
 )
 )
 
 
-# Project sources
 SET(PROJECT_SOURCES
 SET(PROJECT_SOURCES
-  main.c
-)
-
-# Configuring linker script for our target
-CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/stm32_flash.ld.in ${CMAKE_CURRENT_BINARY_DIR}/stm32_flash.ld)
-SET(CMAKE_EXE_LINKER_FLAGS "-T${CMAKE_CURRENT_BINARY_DIR}/stm32_flash.ld ${CMAKE_EXE_LINKER_FLAGS}")
-
-INCLUDE_DIRECTORIES(
-  ${CMAKE_CURRENT_SOURCE_DIR}/.
-  ${STM32_StdPeriphLib_INCLUDE_DIRS}
+    main.c
 )
 )
 
 
-# Compile executable (*.elf)
-ADD_EXECUTABLE(${CMAKE_PROJECT_NAME}.elf ${PROJECT_SOURCES} ${MOD_SOURCES} ${STARTUP_SOURCE} ${STM32_SYSTEM_SOURCE})
+ADD_EXECUTABLE(${CMAKE_PROJECT_NAME}.elf ${PROJECT_SOURCES} ${CMSIS_STARTUP_SOURCE})
+TARGET_LINK_LIBRARIES(${CMAKE_PROJECT_NAME}.elf ${CMSIS_LIBRARIES} ${StdPeriphLib_LIBRARIES})
 
 
-# Convert elf to bin and hex
-ADD_CUSTOM_COMMAND(TARGET ${CMAKE_PROJECT_NAME}.elf POST_BUILD COMMAND ${CMAKE_OBJCOPY} ARGS -Oihex ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.hex)
-ADD_CUSTOM_COMMAND(TARGET ${CMAKE_PROJECT_NAME}.elf POST_BUILD COMMAND ${CMAKE_OBJCOPY} ARGS -Obinary ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.bin)
+ADD_CUSTOM_TARGET(${CMAKE_PROJECT_NAME}.hex DEPENDS ${CMAKE_PROJECT_NAME}.elf COMMAND ${CMAKE_OBJCOPY} -Oihex ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.hex)
+ADD_CUSTOM_TARGET(${CMAKE_PROJECT_NAME}.bin DEPENDS ${CMAKE_PROJECT_NAME}.elf COMMAND ${CMAKE_OBJCOPY} -Obinary ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.bin)

+ 4 - 51
stm32-blinky/stm32f10x_conf.h

@@ -1,30 +1,8 @@
-/**
-  ******************************************************************************
-  * @file    stm32f10x_conf.h 
-  * @author  MCD Application Team
-  * @version V3.5.0
-  * @date    08-April-2011
-  * @brief   Library configuration file.
-  ******************************************************************************
-  * @attention
-  *
-  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
-  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
-  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
-  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
-  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-  *
-  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
 #ifndef __STM32F10x_CONF_H
 #ifndef __STM32F10x_CONF_H
 #define __STM32F10x_CONF_H
 #define __STM32F10x_CONF_H
 
 
-/* Includes ------------------------------------------------------------------*/
 /* Uncomment/Comment the line below to enable/disable peripheral header file inclusion */
 /* Uncomment/Comment the line below to enable/disable peripheral header file inclusion */
+
 // #include "stm32f10x_adc.h"
 // #include "stm32f10x_adc.h"
 // #include "stm32f10x_bkp.h"
 // #include "stm32f10x_bkp.h"
 // #include "stm32f10x_can.h"
 // #include "stm32f10x_can.h"
@@ -47,31 +25,6 @@
  #include "stm32f10x_tim.h"
  #include "stm32f10x_tim.h"
 // #include "stm32f10x_usart.h"
 // #include "stm32f10x_usart.h"
 // #include "stm32f10x_wwdg.h"
 // #include "stm32f10x_wwdg.h"
- #include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-/* Uncomment the line below to expanse the "assert_param" macro in the 
-   Standard Peripheral Library drivers code */
-/* #define USE_FULL_ASSERT    1 */
-
-/* Exported macro ------------------------------------------------------------*/
-#ifdef  USE_FULL_ASSERT
-
-/**
-  * @brief  The assert_param macro is used for function's parameters check.
-  * @param  expr: If expr is false, it calls assert_failed function which reports 
-  *         the name of the source file and the source line number of the call 
-  *         that failed. If expr is true, it returns no value.
-  * @retval None
-  */
-  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
-/* Exported functions ------------------------------------------------------- */
-  void assert_failed(uint8_t* file, uint32_t line);
-#else
-  #define assert_param(expr) ((void)0)
-#endif /* USE_FULL_ASSERT */
-
-#endif /* __STM32F10x_CONF_H */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
+ #include "stm32f10x_misc.h"
+ 
+#endif

+ 14 - 62
stm32-newlib/CMakeLists.txt

@@ -1,75 +1,27 @@
-# Project name
 PROJECT(stm32-newlib)
 PROJECT(stm32-newlib)
 
 
 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 ENABLE_LANGUAGE(ASM)
 ENABLE_LANGUAGE(ASM)
 
 
-# Select your memory sizes here
-# Flash size
-SET(STM32_FLASH_SIZE "512K")
-# RAM size
-SET(STM32_RAM_SIZE "64K")
-# Stack address - bottom of RAM => RAM origin + RAM size
-SET(STM32_STACK_ADDRESS "0x20010000")
+FIND_PACKAGE(CMSIS REQUIRED)
+FIND_PACKAGE(StdPeriphLib REQUIRED)
 
 
-# Origins
-SET(STM32_FLASH_ORIGIN "0x08000000")
-SET(STM32_RAM_ORIGIN "0x20000000")
-
-# Compiler definitions for std. periph. library
-# Select your chip type here
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSTM32F10X_HD")
-SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSTM32F10X_HD")
-
-# Startup sources
-# Select your chip type here
-SET(STARTUP_SOURCE ${STM32_STARTUP_HD})
+STM32_SET_PARAMS("512K" "64K" "0x20010000")
+SET(CMAKE_EXE_LINKER_FLAGS "-T${CMAKE_CURRENT_BINARY_DIR}/stm32_flash.ld ${CMAKE_EXE_LINKER_FLAGS}")
 
 
-# Uncomment needed modules
-SET(MOD_SOURCES
-  ${STM32_MISC_SOURCE}
-#  ${STM32_ADC_SOURCE}
-  ${STM32_BKP_SOURCE}
-#  ${STM32_CAN_SOURCE}
-#  ${STM32_CEC_SOURCE}
-#  ${STM32_CRC_SOURCE}
-#  ${STM32_DAC_SOURCE}
-#  ${STM32_DBGMCU_SOURCE}
-#  ${STM32_DMA_SOURCE}
-#  ${STM32_EXTI_SOURCE}
-#  ${STM32_FLASH_SOURCE}
-#  ${STM32_FSMC_SOURCE}
-  ${STM32_GPIO_SOURCE}
-#  ${STM32_I2C_SOURCE}
-#  ${STM32_IWDG_SOURCE}
-  ${STM32_PWR_SOURCE}
-  ${STM32_RCC_SOURCE}
-  ${STM32_RTC_SOURCE}
-#  ${STM32_SDIO_SOURCE}
-#  ${STM32_SPI_SOURCE}
-#  ${STM32_TIM_SOURCE}
-  ${STM32_USART_SOURCE}
-#  ${STM32_WWDG_SOURCE}
+INCLUDE_DIRECTORIES(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMSIS_INCLUDE_DIR}
+    ${StdPeriphLib_INCLUDE_DIR}
 )
 )
 
 
-# Project sources
 SET(PROJECT_SOURCES
 SET(PROJECT_SOURCES
-  main.c
-  newlib.c
-)
-
-# Configuring linker script for our target
-CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/stm32_flash.ld.in ${CMAKE_CURRENT_BINARY_DIR}/stm32_flash.ld)
-SET(CMAKE_EXE_LINKER_FLAGS "-T${CMAKE_CURRENT_BINARY_DIR}/stm32_flash.ld ${CMAKE_EXE_LINKER_FLAGS}")
-
-INCLUDE_DIRECTORIES(
-  ${CMAKE_CURRENT_SOURCE_DIR}/.
-  ${STM32_StdPeriphLib_INCLUDE_DIRS}
+    main.c
+    newlib.c
 )
 )
 
 
-# Compile executable (*.elf)
-ADD_EXECUTABLE(${CMAKE_PROJECT_NAME}.elf ${PROJECT_SOURCES} ${MOD_SOURCES} ${STARTUP_SOURCE} ${STM32_SYSTEM_SOURCE})
+ADD_EXECUTABLE(${CMAKE_PROJECT_NAME}.elf ${PROJECT_SOURCES} ${CMSIS_STARTUP_SOURCE})
+TARGET_LINK_LIBRARIES(${CMAKE_PROJECT_NAME}.elf ${CMSIS_LIBRARIES} ${StdPeriphLib_LIBRARIES})
 
 
-# Convert elf to bin and hex
-ADD_CUSTOM_COMMAND(TARGET ${CMAKE_PROJECT_NAME}.elf POST_BUILD COMMAND ${CMAKE_OBJCOPY} ARGS -Oihex ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.hex)
-ADD_CUSTOM_COMMAND(TARGET ${CMAKE_PROJECT_NAME}.elf POST_BUILD COMMAND ${CMAKE_OBJCOPY} ARGS -Obinary ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.bin)
+ADD_CUSTOM_TARGET(${CMAKE_PROJECT_NAME}.hex DEPENDS ${CMAKE_PROJECT_NAME}.elf COMMAND ${CMAKE_OBJCOPY} -Oihex ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.hex)
+ADD_CUSTOM_TARGET(${CMAKE_PROJECT_NAME}.bin DEPENDS ${CMAKE_PROJECT_NAME}.elf COMMAND ${CMAKE_OBJCOPY} -Obinary ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.bin)

+ 0 - 152
stm32-newlib/stm32_flash.ld.in

@@ -1,152 +0,0 @@
-/*
-*****************************************************************************
-**
-**  Linker script for STM32F10x devices
-**
-**  Set heap size, stack size and stack location according
-**    to application requirements.
-**
-**  Set memory bank area and size if external memory is used.
-**
-*****************************************************************************
-*/
-
-/* Entry Point */
-ENTRY(Reset_Handler)
-
-/* Highest address of the user mode stack */
-_estack = ${STM32_STACK_ADDRESS};    /* end of RAM */
-
-/* Generate a link error if heap and stack don't fit into RAM */
-_Min_Heap_Size = 0;      /* required amount of heap  */
-_Min_Stack_Size = 0x200; /* required amount of stack */
-
-/* Specify the memory areas */
-MEMORY
-{
-  FLASH (rx)      : ORIGIN = ${STM32_FLASH_ORIGIN}, LENGTH = ${STM32_FLASH_SIZE}
-  RAM (xrw)       : ORIGIN = ${STM32_RAM_ORIGIN}, LENGTH = ${STM32_RAM_SIZE}
-  MEMORY_B1 (rx)  : ORIGIN = 0x60000000, LENGTH = 0K
-}
-
-/* Define output sections */
-SECTIONS
-{
-  /* The startup code goes first into FLASH */
-  .isr_vector :
-  {
-    . = ALIGN(4);
-    KEEP(*(.isr_vector)) /* Startup code */
-    . = ALIGN(4);
-  } >FLASH
-
-  /* The program code and other data goes into FLASH */
-  .text :
-  {
-    . = ALIGN(4);
-    *(.text)           /* .text sections (code) */
-    *(.text*)          /* .text* sections (code) */
-    *(.rodata)         /* .rodata sections (constants, strings, etc.) */
-    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
-    *(.glue_7)         /* glue arm to thumb code */
-    *(.glue_7t)        /* glue thumb to arm code */
-
-    KEEP (*(.init))
-    KEEP (*(.fini))
-
-    . = ALIGN(4);
-    _etext = .;        /* define a global symbols at end of code */
-  } >FLASH
-
-
-   .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
-    .ARM : {
-    __exidx_start = .;
-      *(.ARM.exidx*)
-      __exidx_end = .;
-    } >FLASH
-
-  .ARM.attributes : { *(.ARM.attributes) } > FLASH
-
-  .preinit_array     :
-  {
-    PROVIDE_HIDDEN (__preinit_array_start = .);
-    KEEP (*(.preinit_array*))
-    PROVIDE_HIDDEN (__preinit_array_end = .);
-  } >FLASH
-  .init_array :
-  {
-    PROVIDE_HIDDEN (__init_array_start = .);
-    KEEP (*(SORT(.init_array.*)))
-    KEEP (*(.init_array*))
-    PROVIDE_HIDDEN (__init_array_end = .);
-  } >FLASH
-  .fini_array :
-  {
-    PROVIDE_HIDDEN (__fini_array_start = .);
-    KEEP (*(.fini_array*))
-    KEEP (*(SORT(.fini_array.*)))
-    PROVIDE_HIDDEN (__fini_array_end = .);
-  } >FLASH
-
-  /* used by the startup to initialize data */
-  _sidata = .;
-
-  /* Initialized data sections goes into RAM, load LMA copy after code */
-  .data : AT ( _sidata )
-  {
-    . = ALIGN(4);
-    _sdata = .;        /* create a global symbol at data start */
-    *(.data)           /* .data sections */
-    *(.data*)          /* .data* sections */
-
-    . = ALIGN(4);
-    _edata = .;        /* define a global symbol at data end */
-  } >RAM
-
-  /* Uninitialized data section */
-  . = ALIGN(4);
-  .bss :
-  {
-    /* This is used by the startup in order to initialize the .bss secion */
-    _sbss = .;         /* define a global symbol at bss start */
-    __bss_start__ = _sbss;
-    *(.bss)
-    *(.bss*)
-    *(COMMON)
-
-    . = ALIGN(4);
-    _ebss = .;         /* define a global symbol at bss end */
-    __bss_end__ = _ebss;
-  } >RAM
-
-  PROVIDE ( end = _ebss );
-  PROVIDE ( _end = _ebss );
-
-  /* User_heap_stack section, used to check that there is enough RAM left */
-  ._user_heap_stack :
-  {
-    . = ALIGN(4);
-    . = . + _Min_Heap_Size;
-    . = . + _Min_Stack_Size;
-    . = ALIGN(4);
-  } >RAM
-
-  /* MEMORY_bank1 section, code must be located here explicitly            */
-  /* Example: extern int foo(void) __attribute__ ((section (".mb1text"))); */
-  .memory_b1_text :
-  {
-    *(.mb1text)        /* .mb1text sections (code) */
-    *(.mb1text*)       /* .mb1text* sections (code)  */
-    *(.mb1rodata)      /* read-only data (constants) */
-    *(.mb1rodata*)
-  } >MEMORY_B1
-
-  /* Remove information from the standard libraries */
-  /DISCARD/ :
-  {
-    libc.a ( * )
-    libm.a ( * )
-    libgcc.a ( * )
-  }
-}

+ 4 - 51
stm32-newlib/stm32f10x_conf.h

@@ -1,30 +1,8 @@
-/**
-  ******************************************************************************
-  * @file    stm32f10x_conf.h 
-  * @author  MCD Application Team
-  * @version V3.5.0
-  * @date    08-April-2011
-  * @brief   Library configuration file.
-  ******************************************************************************
-  * @attention
-  *
-  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
-  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
-  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
-  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
-  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-  *
-  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
 #ifndef __STM32F10x_CONF_H
 #ifndef __STM32F10x_CONF_H
 #define __STM32F10x_CONF_H
 #define __STM32F10x_CONF_H
 
 
-/* Includes ------------------------------------------------------------------*/
 /* Uncomment/Comment the line below to enable/disable peripheral header file inclusion */
 /* Uncomment/Comment the line below to enable/disable peripheral header file inclusion */
+
 // #include "stm32f10x_adc.h"
 // #include "stm32f10x_adc.h"
  #include "stm32f10x_bkp.h"
  #include "stm32f10x_bkp.h"
 // #include "stm32f10x_can.h"
 // #include "stm32f10x_can.h"
@@ -47,31 +25,6 @@
 // #include "stm32f10x_tim.h"
 // #include "stm32f10x_tim.h"
  #include "stm32f10x_usart.h"
  #include "stm32f10x_usart.h"
 // #include "stm32f10x_wwdg.h"
 // #include "stm32f10x_wwdg.h"
- #include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-/* Uncomment the line below to expanse the "assert_param" macro in the 
-   Standard Peripheral Library drivers code */
-/* #define USE_FULL_ASSERT    1 */
-
-/* Exported macro ------------------------------------------------------------*/
-#ifdef  USE_FULL_ASSERT
-
-/**
-  * @brief  The assert_param macro is used for function's parameters check.
-  * @param  expr: If expr is false, it calls assert_failed function which reports 
-  *         the name of the source file and the source line number of the call 
-  *         that failed. If expr is true, it returns no value.
-  * @retval None
-  */
-  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
-/* Exported functions ------------------------------------------------------- */
-  void assert_failed(uint8_t* file, uint32_t line);
-#else
-  #define assert_param(expr) ((void)0)
-#endif /* USE_FULL_ASSERT */
-
-#endif /* __STM32F10x_CONF_H */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
+ #include "stm32f10x_misc.h"
+ 
+#endif

+ 12 - 61
stm32-template/CMakeLists.txt

@@ -1,74 +1,25 @@
-# Project name
 PROJECT(stm32-template)
 PROJECT(stm32-template)
 
 
 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 ENABLE_LANGUAGE(ASM)
 ENABLE_LANGUAGE(ASM)
 
 
-# Select your memory sizes here
-# Flash size
-SET(STM32_FLASH_SIZE "512K")
-# RAM size
-SET(STM32_RAM_SIZE "64K")
-# Stack address - bottom of RAM => RAM origin + RAM size
-SET(STM32_STACK_ADDRESS "0x20010000")
+FIND_PACKAGE(CMSIS REQUIRED)
 
 
-# Origins
-SET(STM32_FLASH_ORIGIN "0x08000000")
-SET(STM32_RAM_ORIGIN "0x20000000")
-
-# Compiler definitions for std. periph. library
-# Select your chip type here
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSTM32F10X_HD")
-SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSTM32F10X_HD")
-
-# Startup sources
-# Select your chip type here
-SET(STARTUP_SOURCE ${STM32_STARTUP_HD})
+STM32_SET_PARAMS("512K" "64K" "0x20010000")
+SET(CMAKE_EXE_LINKER_FLAGS "-T${CMAKE_CURRENT_BINARY_DIR}/stm32_flash.ld ${CMAKE_EXE_LINKER_FLAGS}")
 
 
-# Uncomment needed modules
-SET(MOD_SOURCES
-  ${STM32_MISC_SOURCE}
-#  ${STM32_ADC_SOURCE}
-#  ${STM32_BKP_SOURCE}
-#  ${STM32_CAN_SOURCE}
-#  ${STM32_CEC_SOURCE}
-#  ${STM32_CRC_SOURCE}
-#  ${STM32_DAC_SOURCE}
-#  ${STM32_DBGMCU_SOURCE}
-#  ${STM32_DMA_SOURCE}
-#  ${STM32_EXTI_SOURCE}
-#  ${STM32_FLASH_SOURCE}
-#  ${STM32_FSMC_SOURCE}
-  ${STM32_GPIO_SOURCE}
-#  ${STM32_I2C_SOURCE}
-#  ${STM32_IWDG_SOURCE}
-#  ${STM32_PWR_SOURCE}
-  ${STM32_RCC_SOURCE}
-#  ${STM32_RTC_SOURCE}
-#  ${STM32_SDIO_SOURCE}
-#  ${STM32_SPI_SOURCE}
-  ${STM32_TIM_SOURCE}
-#  ${STM32_USART_SOURCE}
-#  ${STM32_WWDG_SOURCE}
+INCLUDE_DIRECTORIES(
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMSIS_INCLUDE_DIR}
+    ${StdPeriphLib_INCLUDE_DIR}
 )
 )
 
 
-# Project sources
 SET(PROJECT_SOURCES
 SET(PROJECT_SOURCES
-  main.c
-)
-
-# Configuring linker script for our target
-CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/stm32_flash.ld.in ${CMAKE_CURRENT_BINARY_DIR}/stm32_flash.ld)
-SET(CMAKE_EXE_LINKER_FLAGS "-T${CMAKE_CURRENT_BINARY_DIR}/stm32_flash.ld ${CMAKE_EXE_LINKER_FLAGS}")
-
-INCLUDE_DIRECTORIES(
-  ${CMAKE_CURRENT_SOURCE_DIR}/.
-  ${STM32_StdPeriphLib_INCLUDE_DIRS}
+    main.c
 )
 )
 
 
-# Compile executable (*.elf)
-ADD_EXECUTABLE(${CMAKE_PROJECT_NAME}.elf ${PROJECT_SOURCES} ${MOD_SOURCES} ${STARTUP_SOURCE} ${STM32_SYSTEM_SOURCE})
+ADD_EXECUTABLE(${CMAKE_PROJECT_NAME}.elf ${PROJECT_SOURCES} ${CMSIS_STARTUP_SOURCE})
+TARGET_LINK_LIBRARIES(${CMAKE_PROJECT_NAME}.elf ${CMSIS_LIBRARIES} ${StdPeriphLib_LIBRARIES})
 
 
-# Convert elf to bin and hex
-ADD_CUSTOM_COMMAND(TARGET ${CMAKE_PROJECT_NAME}.elf POST_BUILD COMMAND ${CMAKE_OBJCOPY} ARGS -Oihex ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.hex)
-ADD_CUSTOM_COMMAND(TARGET ${CMAKE_PROJECT_NAME}.elf POST_BUILD COMMAND ${CMAKE_OBJCOPY} ARGS -Obinary ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.bin)
+ADD_CUSTOM_TARGET(${CMAKE_PROJECT_NAME}.hex DEPENDS ${CMAKE_PROJECT_NAME}.elf COMMAND ${CMAKE_OBJCOPY} -Oihex ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.hex)
+ADD_CUSTOM_TARGET(${CMAKE_PROJECT_NAME}.bin DEPENDS ${CMAKE_PROJECT_NAME}.elf COMMAND ${CMAKE_OBJCOPY} -Obinary ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.bin)

+ 0 - 152
stm32-template/stm32_flash.ld.in

@@ -1,152 +0,0 @@
-/*
-*****************************************************************************
-**
-**  Linker script for STM32F10x devices
-**
-**  Set heap size, stack size and stack location according
-**    to application requirements.
-**
-**  Set memory bank area and size if external memory is used.
-**
-*****************************************************************************
-*/
-
-/* Entry Point */
-ENTRY(Reset_Handler)
-
-/* Highest address of the user mode stack */
-_estack = ${STM32_STACK_ADDRESS};    /* end of RAM */
-
-/* Generate a link error if heap and stack don't fit into RAM */
-_Min_Heap_Size = 0;      /* required amount of heap  */
-_Min_Stack_Size = 0x200; /* required amount of stack */
-
-/* Specify the memory areas */
-MEMORY
-{
-  FLASH (rx)      : ORIGIN = ${STM32_FLASH_ORIGIN}, LENGTH = ${STM32_FLASH_SIZE}
-  RAM (xrw)       : ORIGIN = ${STM32_RAM_ORIGIN}, LENGTH = ${STM32_RAM_SIZE}
-  MEMORY_B1 (rx)  : ORIGIN = 0x60000000, LENGTH = 0K
-}
-
-/* Define output sections */
-SECTIONS
-{
-  /* The startup code goes first into FLASH */
-  .isr_vector :
-  {
-    . = ALIGN(4);
-    KEEP(*(.isr_vector)) /* Startup code */
-    . = ALIGN(4);
-  } >FLASH
-
-  /* The program code and other data goes into FLASH */
-  .text :
-  {
-    . = ALIGN(4);
-    *(.text)           /* .text sections (code) */
-    *(.text*)          /* .text* sections (code) */
-    *(.rodata)         /* .rodata sections (constants, strings, etc.) */
-    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
-    *(.glue_7)         /* glue arm to thumb code */
-    *(.glue_7t)        /* glue thumb to arm code */
-
-    KEEP (*(.init))
-    KEEP (*(.fini))
-
-    . = ALIGN(4);
-    _etext = .;        /* define a global symbols at end of code */
-  } >FLASH
-
-
-   .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
-    .ARM : {
-    __exidx_start = .;
-      *(.ARM.exidx*)
-      __exidx_end = .;
-    } >FLASH
-
-  .ARM.attributes : { *(.ARM.attributes) } > FLASH
-
-  .preinit_array     :
-  {
-    PROVIDE_HIDDEN (__preinit_array_start = .);
-    KEEP (*(.preinit_array*))
-    PROVIDE_HIDDEN (__preinit_array_end = .);
-  } >FLASH
-  .init_array :
-  {
-    PROVIDE_HIDDEN (__init_array_start = .);
-    KEEP (*(SORT(.init_array.*)))
-    KEEP (*(.init_array*))
-    PROVIDE_HIDDEN (__init_array_end = .);
-  } >FLASH
-  .fini_array :
-  {
-    PROVIDE_HIDDEN (__fini_array_start = .);
-    KEEP (*(.fini_array*))
-    KEEP (*(SORT(.fini_array.*)))
-    PROVIDE_HIDDEN (__fini_array_end = .);
-  } >FLASH
-
-  /* used by the startup to initialize data */
-  _sidata = .;
-
-  /* Initialized data sections goes into RAM, load LMA copy after code */
-  .data : AT ( _sidata )
-  {
-    . = ALIGN(4);
-    _sdata = .;        /* create a global symbol at data start */
-    *(.data)           /* .data sections */
-    *(.data*)          /* .data* sections */
-
-    . = ALIGN(4);
-    _edata = .;        /* define a global symbol at data end */
-  } >RAM
-
-  /* Uninitialized data section */
-  . = ALIGN(4);
-  .bss :
-  {
-    /* This is used by the startup in order to initialize the .bss secion */
-    _sbss = .;         /* define a global symbol at bss start */
-    __bss_start__ = _sbss;
-    *(.bss)
-    *(.bss*)
-    *(COMMON)
-
-    . = ALIGN(4);
-    _ebss = .;         /* define a global symbol at bss end */
-    __bss_end__ = _ebss;
-  } >RAM
-
-  PROVIDE ( end = _ebss );
-  PROVIDE ( _end = _ebss );
-
-  /* User_heap_stack section, used to check that there is enough RAM left */
-  ._user_heap_stack :
-  {
-    . = ALIGN(4);
-    . = . + _Min_Heap_Size;
-    . = . + _Min_Stack_Size;
-    . = ALIGN(4);
-  } >RAM
-
-  /* MEMORY_bank1 section, code must be located here explicitly            */
-  /* Example: extern int foo(void) __attribute__ ((section (".mb1text"))); */
-  .memory_b1_text :
-  {
-    *(.mb1text)        /* .mb1text sections (code) */
-    *(.mb1text*)       /* .mb1text* sections (code)  */
-    *(.mb1rodata)      /* read-only data (constants) */
-    *(.mb1rodata*)
-  } >MEMORY_B1
-
-  /* Remove information from the standard libraries */
-  /DISCARD/ :
-  {
-    libc.a ( * )
-    libm.a ( * )
-    libgcc.a ( * )
-  }
-}

+ 0 - 77
stm32-template/stm32f10x_conf.h

@@ -1,77 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32f10x_conf.h 
-  * @author  MCD Application Team
-  * @version V3.5.0
-  * @date    08-April-2011
-  * @brief   Library configuration file.
-  ******************************************************************************
-  * @attention
-  *
-  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
-  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
-  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
-  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
-  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-  *
-  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32F10x_CONF_H
-#define __STM32F10x_CONF_H
-
-/* Includes ------------------------------------------------------------------*/
-/* Uncomment/Comment the line below to enable/disable peripheral header file inclusion */
-// #include "stm32f10x_adc.h"
-// #include "stm32f10x_bkp.h"
-// #include "stm32f10x_can.h"
-// #include "stm32f10x_cec.h"
-// #include "stm32f10x_crc.h"
-// #include "stm32f10x_dac.h"
-// #include "stm32f10x_dbgmcu.h"
-// #include "stm32f10x_dma.h"
-// #include "stm32f10x_exti.h"
-// #include "stm32f10x_flash.h"
-// #include "stm32f10x_fsmc.h"
-// #include "stm32f10x_gpio.h"
-// #include "stm32f10x_i2c.h"
-// #include "stm32f10x_iwdg.h"
-// #include "stm32f10x_pwr.h"
-// #include "stm32f10x_rcc.h"
-// #include "stm32f10x_rtc.h"
-// #include "stm32f10x_sdio.h"
-// #include "stm32f10x_spi.h"
-// #include "stm32f10x_tim.h"
-// #include "stm32f10x_usart.h"
-// #include "stm32f10x_wwdg.h"
-// #include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-/* Uncomment the line below to expanse the "assert_param" macro in the 
-   Standard Peripheral Library drivers code */
-/* #define USE_FULL_ASSERT    1 */
-
-/* Exported macro ------------------------------------------------------------*/
-#ifdef  USE_FULL_ASSERT
-
-/**
-  * @brief  The assert_param macro is used for function's parameters check.
-  * @param  expr: If expr is false, it calls assert_failed function which reports 
-  *         the name of the source file and the source line number of the call 
-  *         that failed. If expr is true, it returns no value.
-  * @retval None
-  */
-  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
-/* Exported functions ------------------------------------------------------- */
-  void assert_failed(uint8_t* file, uint32_t line);
-#else
-  #define assert_param(expr) ((void)0)
-#endif /* USE_FULL_ASSERT */
-
-#endif /* __STM32F10x_CONF_H */
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/

+ 0 - 102
stm32.cmake

@@ -1,102 +0,0 @@
-# CodeSourcery toolchain prefix
-IF(NOT TOOLCHAIN_PREFIX)
-    SET(TOOLCHAIN_PREFIX "/usr")
-    MESSAGE(STATUS "No TOOLCHAIN_PREFIX specified, using default: " ${TOOLCHAIN_PREFIX})
-ENDIF()
-
-
-# STM Library directory
-IF(NOT STM32_StdPeriphLib_DIR)
-    SET(STM32_StdPeriphLib_DIR "/opt/STM32F10x_StdPeriph_Lib_V3.5.0")
-    MESSAGE(STATUS "No STM32_StdPeriphLib_DIR specified, using default: " ${STM32_StdPeriphLib_DIR})
-ENDIF()
-
-IF(NOT TARGET_TRIPLET)
-    SET(TARGET_TRIPLET "arm-none-eabi")
-    MESSAGE(STATUS "No TARGET_TRIPLET specified, using default: " ${TARGET_TRIPLET})
-ENDIF()
-
-SET(STM32_StdPeriphLib_INCLUDE_DIRS 
-    ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/inc/
-    ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/
-    ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/CoreSupport/
-)
-
-SET(TOOLCHAIN_BIN_DIR ${TOOLCHAIN_PREFIX}/bin)
-SET(TOOLCHAIN_LIBC_DIR ${TOOLCHAIN_PREFIX}/${TARGET_TRIPLET}/libc)
-SET(TOOLCHAIN_INC_DIR ${TOOLCHAIN_LIBC_DIR}/include)
-SET(TOOLCHAIN_LIB_DIR ${TOOLCHAIN_LIBC_DIR}/usr/lib)
-
-SET(CMAKE_SYSTEM_NAME Linux CACHE INTERNAL "system name")
-SET(CMAKE_SYSTEM_PROCESSOR arm CACHE INTERNAL "processor")
-
-SET(CMAKE_C_COMPILER ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-gcc CACHE INTERNAL "")
-SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-g++ CACHE INTERNAL "")
-SET(CMAKE_ASM_COMPILER ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-as CACHE INTERNAL "")
-
-SET(CMAKE_OBJCOPY ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-objcopy CACHE INTERNAL "")
-SET(CMAKE_OBJDUMP ${TOOLCHAIN_BIN_DIR}/${TARGET_TRIPLET}-objdump CACHE INTERNAL "")
-
-SET(CMAKE_C_FLAGS "-isystem ${TOOLCHAIN_INC_DIR} -mthumb -mcpu=cortex-m3 -fno-builtin -Wall -std=gnu99 -fdata-sections -ffunction-sections -DUSE_STDPERIPH_DRIVER" CACHE INTERNAL "c compiler flags")
-SET(CMAKE_CXX_FLAGS "-isystem ${TOOLCHAIN_INC_DIR} -mthumb -mcpu=cortex-m3 -fno-builtin -Wall  -fdata-sections -ffunction-sections -DUSE_STDPERIPH_DRIVER" CACHE INTERNAL "cxx compiler flags")
-SET(CMAKE_ASM_FLAGS "-mthumb -mcpu=cortex-m3" CACHE INTERNAL "asm compiler flags")
-
-SET(CMAKE_C_FLAGS_DEBUG "-O0 -g -gstabs+" CACHE INTERNAL "c debug compiler flags")
-SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -gstabs+" CACHE INTERNAL "cxx debug compiler flags")
-SET(CMAKE_ASM_FLAGS_DEBUG "-g -gstabs+" CACHE INTERNAL "asm debug compiler flags")
-
-SET(CMAKE_C_FLAGS_RELEASE "-Os" CACHE INTERNAL "c release compiler flags")
-SET(CMAKE_CXX_FLAGS_RELEASE "-Os" CACHE INTERNAL "cxx release compiler flags")
-SET(CMAKE_ASM_FLAGS_RELEASE "" CACHE INTERNAL "asm release compiler flags")
-
-SET(CMAKE_EXE_LINKER_FLAGS "-nostartfiles -Wl,-Map -Wl,main.map -Wl,--gc-sections -mthumb -mcpu=cortex-m3" CACHE INTERNAL "exe link flags")
-SET(CMAKE_MODULE_LINKER_FLAGS "-L${TOOLCHAIN_LIB_DIR}" CACHE INTERNAL "module link flags")
-SET(CMAKE_SHARED_LINKER_FLAGS "-L${TOOLCHAIN_LIB_DIR}" CACHE INTERNAL "shared lnk flags")
-set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
-set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
-
-SET(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_LIBC_DIR} CACHE INTERNAL "cross root directory")
-SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH CACHE INTERNAL "")
-SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY CACHE INTERNAL "")
-SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY CACHE INTERNAL "")
-
-# Startup sources
-SET(STM32_STARTUP_CL ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_cl.s)
-SET(STM32_STARTUP_HD ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_hd.s)
-SET(STM32_STARTUP_HD_VL ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_hd_vl.s)
-SET(STM32_STARTUP_LD ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_ld.s)
-SET(STM32_STARTUP_LD_VL ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_ld_vl.s)
-SET(STM32_STARTUP_MD ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_md.s)
-SET(STM32_STARTUP_MD_VL ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_md_vl.s)
-SET(STM32_STARTUP_XL ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_xl.s)
-
-# System source
-SET(STM32_SYSTEM_SOURCE 
-    ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c
-    ${STM32_StdPeriphLib_DIR}/Libraries/CMSIS/CM3/CoreSupport/core_cm3.c
-)
-
-SET(STM32_MISC_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/misc.c)
-SET(STM32_ADC_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_adc.c)
-SET(STM32_BKP_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_bkp.c)
-SET(STM32_CAN_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_can.c)
-SET(STM32_CEC_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_cec.c)
-SET(STM32_CRC_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_crc.c)
-SET(STM32_DAC_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_dac.c)
-SET(STM32_DBGMCU_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_dbgmcu.c)
-SET(STM32_DMA_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_dma.c)
-SET(STM32_EXTI_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_exti.c)
-SET(STM32_FLASH_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_flash.c)
-SET(STM32_FSMC_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_fsmc.c)
-SET(STM32_GPIO_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_gpio.c)
-SET(STM32_I2C_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_i2c.c)
-SET(STM32_IWDG_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_iwdg.c)
-SET(STM32_PWR_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_pwr.c)
-SET(STM32_RCC_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c)
-SET(STM32_RTC_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rtc.c)
-SET(STM32_SDIO_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_sdio.c)
-SET(STM32_SPI_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_spi.c)
-SET(STM32_TIM_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_tim.c)
-SET(STM32_USART_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_usart.c)
-SET(STM32_WWDG_SOURCE ${STM32_StdPeriphLib_DIR}/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_wwdg.c)
-