From 337ba9d7cce340e2da127c0ceb4adcfccdec5cde Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Mon, 18 Sep 2017 11:47:25 -0600 Subject: [PATCH] configs/stm32f4discovery: Update README. Add summary of differences with the newest STM32F407G-DISC1 part. Remove a lot of old discussion that is really no longer helpful. --- configs/stm32f4discovery/README.txt | 313 +--------------------------- 1 file changed, 11 insertions(+), 302 deletions(-) diff --git a/configs/stm32f4discovery/README.txt b/configs/stm32f4discovery/README.txt index 9f173e38e99..2fa08cc391e 100644 --- a/configs/stm32f4discovery/README.txt +++ b/configs/stm32f4discovery/README.txt @@ -10,22 +10,24 @@ memory and 128kbytes. The board features: - LIS302DL, ST MEMS motion sensor, 3-axis digital output accelerometer, - MP45DT02, ST MEMS audio sensor, omni-directional digital microphone, - CS43L22, audio DAC with integrated class D speaker driver, - - Four LEDs and two push-buttons, + - Four user LEDs and two push-buttons, - USB OTG FS with micro-AB connector, and - Easy access to most MCU pins. Refer to http://www.st.com/internet/evalboard/product/252419.jsp for further information about this board. +NOTE: This port was developed on the original board, order code +STM32F4DISCOVERY. That board has been replaced with the new order code +STM32F407G-DISC1. The new board differs in at least these ways: + + - The ST-LINK/V2 has been updated to ST-LINK/V2-A on STM32F407G-DISC1 + with a Virtual Com port and Mass storage. + - LIS3DSH ST MEMS 3-axis accelerometer + Contents ======== - - Development Environment - - GNU Toolchain Options - - IDEs - - NuttX EABI "buildroot" Toolchain - - NuttX OABI "buildroot" Toolchain - - NXFLAT Toolchain - LEDs - RGB LED Driver - PWM @@ -34,7 +36,6 @@ Contents - Quadrature Encoder - FPU - STM32F4DIS-BB - - FSMC SRAM - SSD1289 - UG-2864AMBAG01 / UG-2864HSWEG01 - STM32F4Discovery-specific Configuration Options @@ -42,235 +43,6 @@ Contents - Testing LLVM LIBC++ with NuttX - Configurations -Development Environment -======================= - - Either Linux or Cygwin on Windows can be used for the development environment. - The source has been built only using the GNU toolchain (see below). Other - toolchains will likely cause problems. - -GNU Toolchain Options -===================== - - Toolchain Configurations - ------------------------ - The NuttX make system has been modified to support the following different - toolchain options. - - 1. The CodeSourcery GNU toolchain, - 2. The Atollic Toolchain, - 3. The devkitARM GNU toolchain, - 4. Raisonance GNU toolchain, or - 5. The NuttX buildroot Toolchain (see below). - - All testing has been conducted using the CodeSourcery toolchain for Windows. To use - the Atollic, devkitARM, Raisonance GNU, or NuttX buildroot toolchain, you simply need to - add one of the following configuration options to your .config (or defconfig) - file: - - CONFIG_ARMV7M_TOOLCHAIN_CODESOURCERYW=y : CodeSourcery under Windows - CONFIG_ARMV7M_TOOLCHAIN_CODESOURCERYL=y : CodeSourcery under Linux - CONFIG_ARMV7M_TOOLCHAIN_ATOLLIC=y : The Atollic toolchain under Windows - CONFIG_ARMV7M_TOOLCHAIN_DEVKITARM=y : devkitARM under Windows - CONFIG_ARMV7M_TOOLCHAIN_RAISONANCE=y : Raisonance RIDE7 under Windows - CONFIG_ARMV7M_TOOLCHAIN_BUILDROOT=y : NuttX buildroot under Linux or Cygwin (default) - - NOTE: the CodeSourcery (for Windows), Atollic, devkitARM, and Raisonance toolchains are - Windows native toolchains. The CodeSourcey (for Linux) and NuttX buildroot - toolchains are Cygwin and/or Linux native toolchains. There are several limitations - to using a Windows based toolchain in a Cygwin environment. The three biggest are: - - 1. The Windows toolchain cannot follow Cygwin paths. Path conversions are - performed automatically in the Cygwin makefiles using the 'cygpath' utility - but you might easily find some new path problems. If so, check out 'cygpath -w' - - 2. Windows toolchains cannot follow Cygwin symbolic links. Many symbolic links - are used in Nuttx (e.g., include/arch). The make system works around these - problems for the Windows tools by copying directories instead of linking them. - But this can also cause some confusion for you: For example, you may edit - a file in a "linked" directory and find that your changes had no effect. - That is because you are building the copy of the file in the "fake" symbolic - directory. If you use a Windows toolchain, you should get in the habit of - making like this: - - make clean_context all - - An alias in your .bashrc file might make that less painful. - - The CodeSourcery Toolchain (2009q1) - ----------------------------------- - The CodeSourcery toolchain (2009q1) does not work with default optimization - level of -Os (See Make.defs). It will work with -O0, -O1, or -O2, but not with - -Os. - - The Atollic "Pro" and "Lite" Toolchain - -------------------------------------- - One problem that I had with the Atollic toolchains is that the provide a gcc.exe - and g++.exe in the same bin/ file as their ARM binaries. If the Atollic bin/ path - appears in your PATH variable before /usr/bin, then you will get the wrong gcc - when you try to build host executables. This will cause to strange, uninterpretable - errors build some host binaries in tools/ when you first make. - - Also, the Atollic toolchains are the only toolchains that have built-in support for - the FPU in these configurations. If you plan to use the Cortex-M4 FPU, you will - need to use the Atollic toolchain for now. See the FPU section below for more - information. - - The Atollic "Lite" Toolchain - ---------------------------- - The free, "Lite" version of the Atollic toolchain does not support C++ nor - does it support ar, nm, objdump, or objdcopy. If you use the Atollic "Lite" - toolchain, you will have to set: - - CONFIG_HAVE_CXX=n - - In order to compile successfully. Otherwise, you will get errors like: - - "C++ Compiler only available in TrueSTUDIO Professional" - - The make may then fail in some of the post link processing because of some of - the other missing tools. The Make.defs file replaces the ar and nm with - the default system x86 tool versions and these seem to work okay. Disable all - of the following to avoid using objcopy: - - CONFIG_RRLOAD_BINARY=n - CONFIG_INTELHEX_BINARY=n - CONFIG_MOTOROLA_SREC=n - CONFIG_RAW_BINARY=n - - devkitARM - --------- - The devkitARM toolchain includes a version of MSYS make. Make sure that the - the paths to Cygwin's /bin and /usr/bin directories appear BEFORE the devkitARM - path or will get the wrong version of make. - -IDEs -==== - - NuttX is built using command-line make. It can be used with an IDE, but some - effort will be required to create the project. - - Makefile Build - -------------- - Under Eclipse, it is pretty easy to set up an "empty makefile project" and - simply use the NuttX makefile to build the system. That is almost for free - under Linux. Under Windows, you will need to set up the "Cygwin GCC" empty - makefile project in order to work with Windows (Google for "Eclipse Cygwin" - - there is a lot of help on the internet). - - Native Build - ------------ - Here are a few tips before you start that effort: - - 1) Select the toolchain that you will be using in your .config file - 2) Start the NuttX build at least one time from the Cygwin command line - before trying to create your project. This is necessary to create - certain auto-generated files and directories that will be needed. - 3) Set up include pathes: You will need include/, arch/arm/src/stm32, - arch/arm/src/common, arch/arm/src/armv7-m, and sched/. - 4) All assembly files need to have the definition option -D __ASSEMBLY__ - on the command line. - - Startup files will probably cause you some headaches. The NuttX startup file - is arch/arm/src/stm32/stm32_vectors.S. With RIDE, I have to build NuttX - one time from the Cygwin command line in order to obtain the pre-built - startup object needed by RIDE. - -NuttX EABI "buildroot" Toolchain -================================ - - A GNU GCC-based toolchain is assumed. The PATH environment variable should - be modified to point to the correct path to the Cortex-M3 GCC toolchain (if - different from the default in your PATH variable). - - If you have no Cortex-M3 toolchain, one can be downloaded from the NuttX - Bitbucket download site (https://bitbucket.org/nuttx/buildroot/downloads/). - This GNU toolchain builds and executes in the Linux or Cygwin environment. - - 1. You must have already configured Nuttx in /nuttx. - - cd tools - ./configure.sh STM32F4Discovery/ - - 2. Download the latest buildroot package into - - 3. unpack the buildroot tarball. The resulting directory may - have versioning information on it like buildroot-x.y.z. If so, - rename /buildroot-x.y.z to /buildroot. - - 4. cd /buildroot - - 5. cp configs/cortexm3-eabi-defconfig-4.6.3 .config - - 6. make oldconfig - - 7. make - - 8. Make sure that the PATH variable includes the path to the newly built - binaries. - - See the file configs/README.txt in the buildroot source tree. That has more - details PLUS some special instructions that you will need to follow if you are - building a Cortex-M3 toolchain for Cygwin under Windows. - - NOTE: Unfortunately, the 4.6.3 EABI toolchain is not compatible with the - the NXFLAT tools. See the top-level TODO file (under "Binary loaders") for - more information about this problem. If you plan to use NXFLAT, please do not - use the GCC 4.6.3 EABI toolchain; instead use the GCC 4.3.3 OABI toolchain. - See instructions below. - -NuttX OABI "buildroot" Toolchain -================================ - - The older, OABI buildroot toolchain is also available. To use the OABI - toolchain: - - 1. When building the buildroot toolchain, either (1) modify the cortexm3-eabi-defconfig-4.6.3 - configuration to use EABI (using 'make menuconfig'), or (2) use an exising OABI - configuration such as cortexm3-defconfig-4.3.3 - - 2. Modify the Make.defs file to use the OABI conventions: - - +CROSSDEV = arm-nuttx-elf- - +ARCHCPUFLAGS = -mtune=cortex-m3 -march=armv7-m -mfloat-abi=soft - +NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)/binfmt/libnxflat/gnu-nxflat-gotoff.ld -no-check-sections - -CROSSDEV = arm-nuttx-eabi- - -ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft - -NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)/binfmt/libnxflat/gnu-nxflat-pcrel.ld -no-check-sections - -NXFLAT Toolchain -================ - - If you are *not* using the NuttX buildroot toolchain and you want to use - the NXFLAT tools, then you will still have to build a portion of the buildroot - tools -- just the NXFLAT tools. The buildroot with the NXFLAT tools can - be downloaded from the NuttX Bitbucket download site - (https://bitbucket.org/nuttx/nuttx/downloads/). - - This GNU toolchain builds and executes in the Linux or Cygwin environment. - - 1. You must have already configured Nuttx in /nuttx. - - cd tools - ./configure.sh lpcxpresso-lpc1768/ - - 2. Download the latest buildroot package into - - 3. unpack the buildroot tarball. The resulting directory may - have versioning information on it like buildroot-x.y.z. If so, - rename /buildroot-x.y.z to /buildroot. - - 4. cd /buildroot - - 5. cp configs/cortexm3-defconfig-nxflat .config - - 6. make oldconfig - - 7. make - - 8. Make sure that the PATH variable includes the path to the newly built - NXFLAT binaries. - LEDs ==== @@ -615,58 +387,6 @@ On-board PIO usage: PC10 DAT2 ---------- ------------- ------------------------------ -FSMC SRAM -========= - -On-board SRAM -------------- -The STM32F4Discovery has no on-board SRAM. The information here is only for -reference in case you choose to add some. - -Configuration Options ---------------------- -Internal SRAM is available in all members of the STM32 family. The F4 family -also contains internal CCM SRAM. This SRAM is different because it cannot -be used for DMA. So if DMA needed, then the following should be defined -to exclude CCM SRAM from the heap: - - CONFIG_STM32_CCMEXCLUDE : Exclude CCM SRAM from the HEAP - -In addition to internal SRAM, SRAM may also be available through the FSMC. -In order to use FSMC SRAM, the following additional things need to be -present in the NuttX configuration file: - - CONFIG_STM32_FSMC=y : Enables the FSMC - CONFIG_STM32_FSMC_SRAM=y : Indicates that SRAM is available via the - FSMC (as opposed to an LCD or FLASH). - CONFIG_HEAP2_BASE : The base address of the SRAM in the FSMC - address space - CONFIG_HEAP2_SIZE : The size of the SRAM in the FSMC - address space - CONFIG_MM_REGIONS : Must be set to a large enough value to - include the FSMC SRAM - -SRAM Configurations -------------------- -There are 4 possible SRAM configurations: - - Configuration 1. System SRAM (only) - CONFIG_MM_REGIONS == 1 - CONFIG_STM32_FSMC_SRAM NOT defined - CONFIG_STM32_CCMEXCLUDE defined - Configuration 2. System SRAM and CCM SRAM - CONFIG_MM_REGIONS == 2 - CONFIG_STM32_FSMC_SRAM NOT defined - CONFIG_STM32_CCMEXCLUDE NOT defined - Configuration 3. System SRAM and FSMC SRAM - CONFIG_MM_REGIONS == 2 - CONFIG_STM32_FSMC_SRAM defined - CONFIG_STM32_CCMEXCLUDE defined - Configuration 4. System SRAM, CCM SRAM, and FSMC SRAM - CONFIG_MM_REGIONS == 3 - CONFIG_STM32_FSMC_SRAM defined - CONFIG_STM32_CCMEXCLUDE NOT defined - SSD1289 ======= @@ -890,27 +610,16 @@ STM32F4Discovery-specific Configuration Options CONFIG_ENDIAN_BIG - define if big endian (default is little endian) - CONFIG_RAM_SIZE - Describes the installed DRAM (SRAM in this case): + CONFIG_RAM_SIZE - Describes the installed RAM CONFIG_RAM_SIZE=0x00010000 (64Kb) - CONFIG_RAM_START - The start address of installed DRAM + CONFIG_RAM_START - The start address of installed RAM CONFIG_RAM_START=0x20000000 CONFIG_STM32_CCMEXCLUDE - Exclude CCM SRAM from the HEAP - In addition to internal SRAM, SRAM may also be available through the FSMC. - In order to use FSMC SRAM, the following additional things need to be - present in the NuttX configuration file: - - CONFIG_STM32_FSMC_SRAM - Indicates that SRAM is available via the - FSMC (as opposed to an LCD or FLASH). - - CONFIG_HEAP2_BASE - The base address of the SRAM in the FSMC address space (hex) - - CONFIG_HEAP2_SIZE - The size of the SRAM in the FSMC address space (decimal) - CONFIG_ARCH_FPU - The STM32F4Discovery supports a floating point unit (FPU) CONFIG_ARCH_FPU=y