Coder Social home page Coder Social logo

stm32-cmake's Introduction

Table of Contents

About

This project is used to develop applications for stm32 - ST's ARM Cortex-M3 MCUs, using cmake, GCC, newlib (libc) and STM32F10x Standard Peripherals Library.

Requirements:

  • cmake >= 2.6
  • GCC toolchain with newlib.
  • STM32F10x Standard Peripherals Library
Project contains:
  • 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.
  • Example projects
    • blinky - blink LED using timers and PWM.
    • newlib - show date from RTC using uart and libc functions from newlib

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:

  • TOOLCHAIN_PREFIX - where toolchain is located, default: /usr
  • 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):

  • 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.
Also, if you using StdPeriphLib you need to adjust modules in stm32f10x_conf.h.

Build

Generate Makefile:

 cmake -DSTM32_CHIP_TYPE=<chip type> -DCMAKE_TOOLCHAIN_FILE=<path_to_gcc_stm32.cmake> -DCMAKE_BUILD_TYPE=Debug <path_to_source_dir>

Where <chip></chip>:

  • 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:

 make

The result is a .elf file, to build .hex:

 make &lt;project&gt;&lt;/project&gt;.hex

or .bin:

 make &lt;project&gt;&lt;/project&gt;.bin

For using with Eclipse CDT:

 cmake -DSTM32_CHIP_TYPE=&lt;chip&gt;&lt;/chip&gt; -DCMAKE_TOOLCHAIN_FILE=&lt;path_to_stm32.cmake&gt;&lt;/path_to_stm32.cmake&gt; -DCMAKE_BUILD_TYPE=Debug -G "Eclipse CDT4 - Unix Makefiles" &lt;path_to_source_dir&gt;&lt;/path_to_source_dir&gt;

For release build:

 cmake -DSTM32_CHIP_TYPE=&lt;chip&gt;&lt;/chip&gt; -DCMAKE_TOOLCHAIN_FILE=&lt;path_to_stm32.cmake&gt;&lt;/path_to_stm32.cmake&gt; -DCMAKE_BUILD_TYPE=Release &lt;path_to_source_dir&gt;&lt;/path_to_source_dir&gt;

stm32-cmake's People

Contributors

obko avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.