Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Thomas Rix
committed
Jul 12, 2015
1 parent
185c80f
commit bfa90fe
Showing
12 changed files
with
1,057 additions
and
119 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,89 +1,92 @@ | ||
# About | ||
This project is used to develop applications for stm32 - ST's ARM Cortex-M3(4) MCUs, using cmake, GCC, newlib (libc), STM32CubeMX package or ChibiOS. | ||
|
||
Requirements: | ||
This project is used to develop applications for the STM32 - ST's ARM Cortex-M3(4) MCUs. It uses cmake and GCC, along with newlib (libc), STM32CubeMX or ChibiOS. | ||
|
||
## Requirements | ||
|
||
* cmake >= 2.8 | ||
* GCC toolchain with newlib (optionally). | ||
* STM32CubeMX package for STM32F1 or STM32F4 families. | ||
Project contains: | ||
* CMake common toolchain file, that configures cmake to use arm toolchain. | ||
* CMake family-specific toolchain file, that configures family-specific parameters. | ||
* CMake modules to find and configure CMSIS ans STM32HAL components. | ||
* GCC toolchain with newlib (optional). | ||
* STM32CubeMX package for STM32F1, STM32F2 or STM32F4 families. | ||
|
||
## Project contains | ||
|
||
* CMake common toolchain file, that configures cmake to use the arm toolchain. | ||
* CMake toolchain file that can generate a tunable linker script | ||
* CMake STM32 family-specific toolchain file, that configures family-specific parameters. | ||
* CMake modules to find and configure CMSIS and STM32HAL components. | ||
* CMake modules to find and configure ChibiOS components. | ||
* CMake project template. | ||
* Example projects: | ||
* stm32-blinky - blink LED using timers and PWM. | ||
* stm32-newlib - show date using uart and libc functions from newlib | ||
* stm32-chibios - blink led using ChibiOS/NIL | ||
|
||
## Examples | ||
|
||
* `stm32-blinky` - blink LED using timers and PWM. | ||
* `stm32-newlib` - show date using uart and libc functions from newlib. | ||
* `stm32-chibios` - blink led using ChibiOS/NIL. | ||
|
||
# Usage | ||
First of all you need to configure toolchain and libraries, you can do this by editing gcc_stm32.cmake or (better way) pass it throught command line. | ||
Variables for toolchain: | ||
* TOOLCHAIN_PREFIX - where toolchain is located, **default**: /usr | ||
* TARGET_TRIPLET - toolchain target triplet, **default**: arm-none-eabi | ||
* STM32_CHIP - STM32 device code, e.g. STM32F407VG or STM32F103VG | ||
* STM32_FAMILY - STM32 family (F0, F1, F4, etc.) currently, F1 and F4 family are supported. **Note:** If STM32_CHIP variable is set, STM32_FAMILY is optional. | ||
* STM32Cube_DIR - path to STM32CubeMX directory **default**: /opt/STM32Cube_FW_F1_V1.1.0 /opt/STM32Cube_FW_F4_V1.6.0 | ||
|
||
For using scripts you'll need to copy contents of cmake folder into cmake's modules path, or use CMAKE_MODULE_PATH variable. | ||
Template project can be found in stm32-template folder. | ||
First of all you need to configure toolchain and libraries, you can do this by editing `gcc_stm32.cmake` or, preferably, by passing it through the command line. | ||
|
||
## Configuration | ||
|
||
## Configure | ||
Common usage: | ||
* `TOOLCHAIN_PREFIX` - where toolchain is located, **default**: `/usr` | ||
* `TARGET_TRIPLET` - toolchain target triplet, **default**: `arm-none-eabi` | ||
* `STM32_CHIP` - STM32 device code, e.g. `STM32F407VG` or `STM32F103VG` | ||
* `STM32_FAMILY` - STM32 family (F0, F1, F4, etc.) currently, F1, F2 and F4 family are supported. **Note:** If `STM32_CHIP` variable is set, `STM32_FAMILY` is optional. | ||
* `STM32Cube_DIR` - path to STM32CubeMX directory **default**: `/opt/STM32Cube_FW_F1_V1.1.0 /opt/STM32Cube_FW_F2_V1.1.0 /opt/STM32Cube_FW_F4_V1.6.0` | ||
|
||
``` cmake -DSTM32_CHIP=<chip> -DCMAKE_TOOLCHAIN_FILE=<path_to_gcc_stm32.cmake> -DCMAKE_BUILD_TYPE=Debug <path_to_source_dir> ``` | ||
To use the toolchain, you'll need to copy contents of the `cmake` folder into cmake's modules path, or use the `CMAKE_MODULE_PATH` variable. | ||
|
||
Where <chip> - stm32 chip name (e.g. STM32F100C8, STM32F407IG). | ||
This command will generate Makefile for project. | ||
Scripts will try to detected chip parameters (type, flash/ram size) from chip name. | ||
You can set this parameters directly using following cmake variables: | ||
* STM32_CHIP_TYPE - family-depended chip type. Global variable STM32_CHIP_TYPES contains list of valid types for current family | ||
* STM32_FLASH_SIZE - chip flash size (e.g. 64K) | ||
* STM32_RAM_SIZE - chip RAM size (e.g. 4K) | ||
## Common usage | ||
|
||
For using with Eclipse CDT: | ||
cmake -DSTM32_CHIP=<chip> -DCMAKE_TOOLCHAIN_FILE=<path_to_gcc_stm32.cmake> -DCMAKE_BUILD_TYPE=Debug <path_to_source_dir> | ||
|
||
``` cmake -DSTM32_CHIP=<chip> -DCMAKE_TOOLCHAIN_FILE=<path_to_gcc_stm32.cmake> -DCMAKE_BUILD_TYPE=Debug -G "Eclipse CDT4 - Unix Makefiles" <path_to_source_dir> ``` | ||
Where `<chip>` is the STM32 chip name (e.g. `STM32F100C8`, `STM32F407IG`). | ||
|
||
For release build: | ||
This command will generate Makefile for project. For a `Release` build, change `CMAKE_BUILD_TYPE`. | ||
|
||
``` cmake -DSTM32_CHIP=<chip> -DCMAKE_TOOLCHAIN_FILE=<path_to_gcc_stm32.cmake> -DCMAKE_BUILD_TYPE=Release <path_to_source_dir> ``` | ||
The script will try to detect chip parameters automatically from the chip name (type, flash/ram size), or, you can set these directly with these variables: | ||
|
||
## Build | ||
* `STM32_CHIP_TYPE` - family-dependent chip type. Global variable `STM32_CHIP_TYPES` contains list of valid types for current family (e.g `207xG`) | ||
* `STM32_FLASH_SIZE` - chip flash size (e.g. 64K) | ||
* `STM32_RAM_SIZE` - chip RAM size (e.g. 4K) | ||
|
||
To build elf file: | ||
### Usage with Eclipse CDT: | ||
|
||
``` make ``` | ||
|
||
To build .hex: | ||
cmake -DSTM32_CHIP=<chip> -DCMAKE_TOOLCHAIN_FILE=<path_to_gcc_stm32.cmake> -DCMAKE_BUILD_TYPE=Debug -G "Eclipse CDT4 - Unix Makefiles" <path_to_source_dir> | ||
|
||
``` make <project name>.hex ``` | ||
|
||
or .bin: | ||
## Building | ||
|
||
``` make <project name>.bin ``` | ||
* To build elf file: `make` | ||
* To build .hex: `make <project name>.hex` | ||
* To build .bin: `make <project name>.bin` | ||
|
||
## Linker script variables | ||
Next cmake variables are useful for linker tuning: | ||
* STM32_LINKER_SCRIPT - Path to custom linker script. You can use cmake variables (listed below) in itd. | ||
* STM32_FLASH_ORIGIN - Start address of flash (**default**: 0x08000000) | ||
* STM32_RAM_ORIGIN - Start address of RAM (**default**: 0x20000000) | ||
* STM32_CCRAM_ORIGIN - Start address of Core-Coupled RAM (only for F4 family) (**default**: 0x10000000) | ||
* STM32_FLASH_SIZE - Flash size (**default**: from chip name) | ||
* STM32_RAM_SIZE - RAM size (**default**: from chip name) | ||
* STM32_CCRAM_SIZE - Core-Coupled RAM size (only for F4 family) (**default**: 64 KiB) | ||
* STM32_MIN_STACK_SIZE - Minimum stack size for error detection at link-time (**default**: 512 bytes) | ||
* STM32_MIN_HEAP_SIZE - Minimum heap size for error detection at link-time (**default**: 0 bytes) | ||
## Linker script & variables | ||
|
||
You can use cmake variables below to tune the generated linker. To specify a custom linker script, set `STM32_LINKER_SCRIPT` (you can still use these variables in your custom script). | ||
|
||
* `STM32_FLASH_ORIGIN` - Start address of flash (**default**: 0x08000000) | ||
* `STM32_RAM_ORIGIN` - Start address of RAM (**default**: 0x20000000) | ||
* `STM32_FLASH_SIZE` - Flash size (**default**: from chip name) | ||
* `STM32_RAM_SIZE` - RAM size (**default**: from chip name) | ||
* `STM32_MIN_STACK_SIZE` - Minimum stack size for error detection at link-time (**default**: 512 bytes) | ||
* `STM32_MIN_HEAP_SIZE` - Minimum heap size for error detection at link-time (**default**: 0 bytes) | ||
* `STM32_CCRAM_ORIGIN` - Start address of Core-Coupled RAM (only for F4 family) (**default**: 0x10000000) | ||
* `STM32_CCRAM_SIZE` - Core-Coupled RAM size (only for F4 family) (**default**: 64 KiB) | ||
|
||
## Useful cmake macros | ||
* STM32_GET_CHIP_TYPE(CHIP CHIP_TYPE) - gets chip type from chip name. | ||
* STM32_GET_CHIP_PARAMETERS(CHIP FLASH_SIZE RAM_SIZE) - gets chip ram/flash size from chip name. | ||
* STM32_SET_CHIP_DEFINITIONS(TARGET CHIP_TYPE) - sets chip family and type-specific compiler flags for target. | ||
* STM32_SET_FLASH_PARAMS(TARGET ...) - sets chip flash/ram parameters for targer. | ||
* STM32_SET_TARGET_PROPERTIES(TARGET) - sets all needed parameters and compiler flags for target. | ||
* STM32_GENERATE_LIBRARIES(NAME SOURCES LIBRARIES) - generates libraries for all chip types in family. Resulting libraries stored in LIBRARIES and have names in ${NAME}_${FAMILY}_${CHIP_TYPE} format. | ||
|
||
## ChibiOS Support | ||
This projects also supports ChibiOS v3.x.x (both nil and rt kernels). | ||
CMake modules for ChibiOS can find specified ChibiOS components using COMPONENTS directive. | ||
See project stm32-chibios for example usage. | ||
|
||
* `STM32_GET_CHIP_TYPE(CHIP CHIP_TYPE)` - gets chip type from chip name. | ||
* `STM32_GET_CHIP_PARAMETERS(CHIP FLASH_SIZE RAM_SIZE)` - gets chip ram/flash size from chip name. | ||
* `STM32_SET_FLASH_PARAMS(TARGET ...)` - sets chip flash/ram parameters for target. | ||
* `STM32_SET_CHIP_DEFINITIONS(TARGET CHIP_TYPE)` - sets chip family and type-specific compiler flags for target. | ||
* `STM32_SET_TARGET_PROPERTIES(TARGET)` - sets all needed parameters and compiler flags for target. | ||
* `STM32_GENERATE_LIBRARIES(NAME SOURCES LIBRARIES)` - generates libraries for all chip types in family. Resulting libraries stored in LIBRARIES and have names in ${NAME}_${FAMILY}_${CHIP_TYPE} format. | ||
|
||
# ChibiOS Support | ||
|
||
This project also supports ChibiOS v3.x.x (both nil and rt kernels). | ||
|
||
CMake modules for ChibiOS can find specified ChibiOS components using the COMPONENTS directive. | ||
|
||
See project `stm32-chibios` for example usage. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.