搜档网
当前位置:搜档网 › Getting started with STM32CubeF4 firmware package for STM32F4xx series

Getting started with STM32CubeF4 firmware package for STM32F4xx series

June 2014DocID025922 Rev 21/24

UM1730

User manual

Getting started with STM32CubeF4 firmware package

for STM32F4xx series

Introduction

The STMCube ? initiative was originated by STMicroelectronics to ease developers life by reducing development efforts, time and cost. STM32Cube covers the STM32 portfolio.STM32Cube Version 1.x includes:

?

The STM32CubeMX, a graphical software configuration tool that allows to generate C initialization code using graphical wizards ? A comprehensive embedded software platform, delivered per series (such as STM32CubeF4 for STM32F4 series)

The STM32Cube HAL, an STM32 abstraction layer embedded software, ensuring maximized portability across the STM32 portfolio –

A consistent set of middleware components such as RTOS, USB, TCP/IP and graphics –All embedded software utilities coming with a full set of examples.

This user manual describes how to get started with the STM32CubeF4 firmware package. Section 1 describes the main features of STM32CubeF4 firmware, part of the STMCube ? initiative.

Section 2 and Section 3 provide an overview of the STM32CubeF4 architecture and

firmware package structure.

https://www.sodocs.net/doc/5a3243625.html,

Contents UM1730

Contents

1STM32CubeF4 main features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2STM32CubeF4 architecture overview . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3STM32CubeF4 firmware package overview . . . . . . . . . . . . . . . . . . . . . 10

3.1Supported STM32F4 devices and hardware . . . . . . . . . . . . . . . . . . . . . . 10

3.2Firmware package overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11

4Getting started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4.1How to run your first example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4.2How to develop your own application . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4.3Using STM32CubeMX for generating the initialization C code . . . . . . . . 19

4.4How to get STM32CubeF4 release updates . . . . . . . . . . . . . . . . . . . . . . 20

4.4.1How to install and run the STM32CubeUpdater program . . . . . . . . . . . 20 5FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 6Revision history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

2/24DocID025922 Rev 2

UM1730List of tables List of tables

Table 1.Macros for STM32F4 series. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Table 2.Evaluation and Discovery boards for STM32F4 series. . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Table 3.Number of examples available for each board. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Table 4.Document revision history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

DocID025922 Rev 23/24

List of figures UM1730 List of figures

Figure 1.STM32CubeF4 firmware components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Figure 2.STM32CubeF4 firmware architecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Figure 3.STM32CubeF4 firmware package structure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Figure 4.STM32CubeF4 examples overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4/24DocID025922 Rev 2

1 STM32CubeF4 main features

STM32CubeF4 gathers together, in a single package, all the generic embedded software

components required to develop an application on STM32F4 microcontrollers. In line with

the STMCube? initiative, this set of components is highly portable, not only within the

STM32F4 series but also to other STM32 series.

STM32CubeF4 is fully compatible with STM32CubeMX code generator that allows the user

to generate initialization code. The package includes a low level hardware abstraction layer

(HAL) that covers the microcontroller hardware, together with an extensive set of examples

running on STMicroelectronics boards. The HAL is available in an open-source BSD license

for user convenience.

STM32CubeF4 package also contains a set of middleware components with the

corresponding examples. They come with very permissive license terms:

?Full USB Host and Device stack supporting many classes.

–Host Classes: HID, MSC, CDC, Audio, MTP

–Device Classes: HID, MSC, CDC, Audio, DFU

?Graphics

–STemWin, a professional graphical stack solution available in binary format and based on the emWin solution from ST's partner SEGGER

–LibJPEG, an open source implementation on STM32 for JPEG images encoding and decoding.

?CMSIS-RTOS implementation with FreeRTOS open source solution

?FAT File system based on open source FatFS solution

?TCP/IP stack based on open source LwIP solution

?SSL/TLS secure layer based on open source PolarSSL

A demonstration implementing all these middleware components is also provided in the

STM32CubeF4 package.

DocID025922 Rev 25/24

6/24DocID025922 Rev 2

2 STM32CubeF4 architecture overview

The STM32CubeF4 firmware solution is built around three independent levels that can

easily interact with each other as described in the Figure 1 below:

Level 0: This level is divided into three sub-layers:

?Board Support Package (BSP): this layer offers a set of APIs related to the hardware components on the hardware boards (Audio codec, I/O expander, Touchscreen, SRAM

driver, LCD drivers. etc…) and composed of two parts:

–Component: is the driver related to the external device on the board and not

related to the STM32, the component driver provides specific APIs to the BSP

driver’s external components and can be ported to any board.

–BSP driver: it enables the component driver to be linked to a specific board and provides a set of user-friendly APIs. The API naming rule is

BSP_FUNCT_Action(): ex. BSP_LED_Init(),BSP_LED_On()

It's based on a modular architecture that allows it to be ported easily to any hardware

by just implementing the low level routines.

?Hardware Abstraction Layer (HAL): this layer provides the low level drivers and the hardware interfacing methods to interact with the upper layers (application, libraries

and stacks). It provides generic, multi instance and function-oriented APIs which allow

to offload the user application implementation by providing ready-to-use processes. For

example, for the communication peripherals (I2S, UART…) it provides APIs allowing to

DocID025922 Rev 27/24

initialize and configure the peripheral, manage data transfer based on polling, interrupt

or DMA process, and manage communication errors that may raise during

communication. The HAL Drivers APIs are split in two categories, generic APIs which

provides common and generic functions to all the STM32 series and extension APIs

which provides specific and customized functions for a specific family or a specific part

number.

?Basic peripheral usage examples: this layer contains examples of basic operation of the STM32F4 peripherals using only the HAL and BSP resources.

Level 1: This level is divided into two sub-layers:

?Middleware components: a set of Libraries covering USB Host and Device Libraries, STemWin, LibJPEG, FreeRTOS, FatFS, LwIP, and PolarSSL. Horizontal interactions

between the components of this layer are done directly by calling the feature APIs while

the vertical interaction with the low level drivers is done through specific callbacks and

static macros implemented in the library system call interface. For example, the FatFs

implements the disk I/O driver to access microSD drive or the USB Mass Storage

Class.

The main features of each Middleware component are as follows:

USB Host and Device Libraries

–Several USB classes supported (Mass-Storage, HID, CDC, DFU, AUDIO, MTP)

–Supports multi packet transfer features: allows sending big amounts of data

without splitting them into max packet size transfers.

–Uses configuration files to change the core and the library configuration without changing the library code (Read Only).

–Includes 32-bit aligned data structures to handle DMA-based transfer in High-

speed modes.

–Supports multi USB OTG core instances from user level through configuration file (allows operation with more than one USB host/device peripheral).

–RTOS and Standalone operation

–The link with low-level driver is done through an abstraction layer using the

configuration file to avoid any dependency between the Library and the low-level

drivers.

STemWin Graphical stack

–Professional grade solution for GUI development based on Segger’s emWin

solution

–Optimized display drivers

–Software tools for code generation and bitmap editing (STemWin Builder…)

LibJPEG

–Open source standard

– C implementation for JPEG image encoding and decoding.

FreeRTOS

–Open source standard

–CMSIS compatibility layer

–Tickless operation during low-power mode

–Integration with all STM32Cube Middleware modules

8/24DocID025922 Rev 2

FAT File system

–FATFS FAT open source library

–Long file name support

–Dynamic multi-drive support

–RTOS and standalone operation

–Examples with microSD and USB host Mass-storage class

LwIP TCP/IP stack

–Open source standard

–RTOS and standalone operation

?Examples based on the Middleware components: each Middleware component comes with one or more examples (called also Applications) showing how to use it.

Integration examples that use several Middleware components are provided as well. Level 2: This level is composed of a single layer which is a global real-time and graphical demonstration based on the Middleware service layer, the low level abstraction layer and the applications that make basic use of the peripherals for board-based functions.

DocID025922 Rev 29/24

10/24DocID025922 Rev 2

3

STM32CubeF4 firmware package overview 3.1 Supported STM32F4 devices and hardware

STM32Cube offers a highly portable Hardware Abstraction Layer (HAL) built around a

generic and modular architecture allowing the upper layers, Middleware and Application, to

implement its functions without in-depth knowledge of the MCU being used. This improves

the library code re-usability and guarantees an easy portability from one device to another.

The STM32CubeF4 offers full support for all STM32F4 Series devices. You only have to

define the right macro in stm32f4xx.h.

Table 1 below lists which macro to define depending on the STM32F4 device you are using

(this macro can also be defined in the compiler preprocessor).

STM32CubeF4 features a rich set of examples and demonstrations at all levels making it

easy to understand and use any HAL driver and/or Middleware components. These Table 1. Macros for STM32F4 series

Macro defined in

stm32f4xx.h STM32F4 devices

STM32F405xx STM32F405RG, STM32F405VG and STM32F405ZG

STM32F415xx STM32F415RG, STM32F415VG and STM32F415ZG

STM32F407xx STM32F407VG, STM32F407VE, STM32F407ZG, STM32F407ZE,

STM32F407IG and STM32F407IE

STM32F417xx STM32F417VG, STM32F417VE, STM32F417ZG, STM32F417ZE,

STM32F417IG and STM32F417IE

STM32F427xx STM32F427VG, STM32F427VI, STM32F427ZG, STM32F427ZI,

STM32F427IG and STM32F427II

STM32F437xx STM32F437VG, STM32F437VI, STM32F437ZG, STM32F437ZI,

STM32F437IG and STM32F437II

STM32F429xx STM32F429VG, STM32F429VI, STM32F429ZG, STM32F429ZI,

STM32F429BG, STM32F429BI, STM32F429NG, STM32F439NI,

STM32F429IG and STM32F429II

STM32F439xx STM32F439VG, STM32F439VI, STM32F439ZG, STM32F439ZI,

STM32F439BG, STM32F439BI, STM32F439NG, STM32F439NI,

STM32F439IG and STM32F439II

STM32F401xC STM32F401CB, STM32F401CC, STM32F401RB, STM32F401RC,

STM32F401VB and STM32F401VC

STM32F401xE STM32F401CD, STM32F401RD, STM32F401VD, STM32F401CE,

STM32F401RE and STM32F401VE

STM32F411xD/E

STM32F411CD, STM32F411RD, STM32F411VD, STM32F411CE,

STM32F411RE and STM32F411VE

DocID025922 Rev 211/24

examples can be run on any of the STMicroelectronics boards as listed in Table 2 below:

The STM32CubeF4 firmware is able to run on any compatible hardware. This means you

can simply update the BSP drivers to port the provided examples to your own board, if it has

the same hardware functions (LED, LCD display, pushbuttons...etc.).

3.2 Firmware package overview

The STM32CubeF4 firmware solution is provided in a single zip package with the structure

shown in Figure 3 below.Table 2. Evaluation and Discovery boards for STM32F4 series

Board STM32F4 devices supported

STM324x9I_EVAL STM32F429xx and STM32F439xx

STM324xG_EVAL STM32F407xx and STM32F417xx

STM32F4-Discovery STM32F407xx

STM32F401-Discovery

STM32F401xC STM32F429I-Discovery STM32F429xx

STM32F401RE-Nucleo STM32F401xE

STM32F411RE-Nucleo STM32F411xE

For each board, a set of examples are provided with preconfigured projects for EWARM,

MDK-ARM and TrueSTUDIO toolchains.

Figure 4 shows the project structure for the STM324xG-EVAL board. The structure is

identical for other boards.

The examples are classified depending on the STM32Cube level they apply to, and are

named as follows:

?Examples in level 0 are called Examples, that use HAL drivers without any Middleware component

?Examples in level 1 are called Applications, that provide typical use cases of each Middleware component

?Examples in level 2 are called Demonstration, that implement all the HAL, BSP and Middleware components

A Template project is provided to allow you to quickly build any firmware application on a

given board.

12/24DocID025922 Rev 2

All examples have the same structure,

?\Inc folder that contains all header files

?\Src folder for the sources code

?\EWARM, \MDK-ARM and \TrueSTUDIO folders contain the preconfigured project for each toolchain.

?readme.txt describing the example behavior and the environment required to make it work

DocID025922 Rev 213/24

Figure 4. STM32CubeF4 examples overview

14/24

DocID025922 Rev 2

Table 3 provides the number of examples, applications and demonstrations available for each board.

Table 3. Number of examples available for each board

Board Examples Applications Demonstration STM324x9I_EVAL83531

STM324xG_EVAL69501

STM32F4-Discovery2321

STM32F401-Discovery1921

STM32F401RE-Nucleo3NA NA

STM32F411RE-Nucleo4NA1

STM32F429I-Discovery25101

DocID025922 Rev 215/24

Getting started UM173016/24DocID025922 Rev 2

4 Getting started

4.1 How to run your first example

This section explains how simple it is to run a first example with STM32CubeF4. As an

illustration let's consider to run a simple LED toggling example running on the STM32F4-

Discovery board:

1.After downloading the STM32CubeF4 firmware package, unzip it into a directory of

your choice, you just need to ensure that the package structure is not modified (as

shown in Figure 3 above).

2. Browse to \Projects\STM32F4-Discovery\Examples.

3. Open \GPIO, then the \GPIO_EXTI folder.

4. Open the project with your preferred toolchain.

5. Rebuild all files and load your image into target memory.

6. Run the example: each time you press User button 4, the LEDs will toggle (for more

details, refer to the example readme file).

You will get a quick overview of how to open, build and run an example with the

supported toolchains.

?EWARM

Under the example folder, open the \EWARM subfolder –

Open the Project.eww workspace (a)–

Rebuild all files: Project->Rebuild all –

Load project image: Project->Debug –

Run program: Debug->Go(F5)?

MDK-ARM –

Under the example folder, open the \MDK-ARM subfolder –

Open the Project.uvproj workspace (a)–

Rebuild all files: Project->Rebuild all target files –

Load project image: Debug->Start/Stop Debug Session –

Run program: Debug->Run (F5) ?

TrueSTUDIO

Open the TrueSTUDIO toolchain –

Click on File->Switch Workspace->Other and browse to the TrueSTUDIO workspace directory –

Click on File->Import, select General->'Existing Projects into Workspace' and then click “Next”. –Browse to the TrueSTUDIO workspace directory, select the project –

Rebuild all project files: Select the project in the “Project explorer” window then click on Project->build project menu.–Run program: Run->Debug (F11)a.The workspace name may change from one example to another

UM1730Getting started

4.2 How to develop your own application

This section describes the required steps needed to create your own application using

STM32CubeF4.

1.Create your project: to create a new project you can either start from the Template

project provided for each board under \Projects\\Templates or from

any available project under \Projects\\Examples or

\Projects\\Applications ( refers to the board name, ex.

STM32F4-Discovery).

The Template project provides an empty main loop function, this is a good starting point

to allow you to get familiar with the project settings for STM32CubeF4. It has the

following characteristics:

a) It contains sources of the HAL, CMSIS and BSP drivers which are the minimum

required components to develop code for a given board

b) It contains the include paths for all the firmware components

c) It defines the STM32F4 device supported, allowing to have the right configuration

for the CMSIS and HAL drivers

d) It provides ready-to-use user files preconfigured as follows:

- HAL is initialized

- SysTick ISR implemented for HAL_Delay() purpose

- System clock is configured with the maximum frequency of the device

Note:If you copy an existing project to another location, then you need to update the include paths.

2. Add the necessary Middleware to your project (optional): available Middleware

stacks are: USB Host and Device Libraries, STemWin, LibJPEG, FreeRTOS, FatFS,

LwIP, and PolarSSL. To find out which source files you need to add to the project files

list, refer to the documentation provided for each Middleware, you can also have a look

at the applications available under \Projects\STM32xx_xxx\Applications\

( refers to the Middleware stack, for example USB_Device) to get a better

idea of the source files to be added and the include paths.

3. Configure the firmware components: the HAL and Middleware components offer a

set of build time configuration options using macros declared with “#define” in a header

file. A template configuration file is provided within each component, which you have to

copy to the project folder (usually the configuration file is named xxx_conf_template.h.

The word “_template” needs to be removed when copying it to the project folder). The

configuration file provides enough information to know the effect of each configuration

DocID025922 Rev 217/24

Getting started UM1730 option. More detailed information is available in the documentation provided for each

component.

4. Start the HAL Library: after jumping to the main program, the application code needs

to call HAL_Init() API to initialize the HAL Library, which does the following:

a) Configures the Flash prefetch, instruction and data caches (user-configurable by

macros defined in stm32f4xx_hal_conf.h)

b) Configure the SysTick to generate an interrupt every 1ms. The SysTick is clocked

by the HSI (default configuration after reset)

c) Sets NVIC Group Priority to 4

d) Calls the HAL_MspInit() callback function defined in user file

stm32f4xx_hal_msp.c to do the global low level hardware initialization

5. Configure the system clock: the system clock configuration is done by calling these

two APIs

a) HAL_RCC_OscConfig(): configures the internal and/or external oscillators, PLL

source and factors. You can choose to configure one oscillator or all oscillators.

You can also skip the PLL configuration if there is no need to run the system at

high frequency

b) HAL_RCC_ClockConfig(): configures the system clock source, Flash latency and

AHB and APB prescalers

6. Peripheral initialization

a) Start by writing the peripheral HAL_PPP_MspInit function. For this function,

proceed as follows:

–Enable the peripheral clock.

–Configure the peripheral GPIOs.

–Configure DMA channel and enable DMA interrupt (if needed).

–Enable peripheral interrupt (if needed).

b) Edit the stm32f4xx_it.c to call the required interrupt handlers (peripheral and

DMA), if needed.

c) Write process complete callback functions if you plan to use peripheral interrupt or

DMA.

d) In your main.c file, initialize the peripheral handle structure, then call the function

HAL_PPP_Init() to initialize your peripheral.

7. Develop your application process: at this stage, your system is ready and you can

start developing your application code.

a) The HAL provides intuitive and ready-to-use APIs for configuring the peripheral,

and supports polling, interrupt and DMA programming models, to accommodate

any application requirements. For more details on how to use each peripheral,

refer to the rich examples set provided.

b) If your application has some real-time constraints, you can find a large set of

examples showing how to use FreeRTOS and integrate it with all Middleware

stacks provided in STM32CubeF4, it can be a good starting point for your

development.

Note:In the default HAL implementation, the SysTick timer is the timebase source. It is used to generate interrupts at regular time intervals. If HAL_Delay() is called from peripheral ISR

process, the SysTick interrupt must have higher priority (numerically lower) than the

peripheral interrupt. Otherwise, the caller ISR process is blocked. Functions affecting

timebase configurations are declared as __Weak to make override possible in case of other 18/24DocID025922 Rev 2

UM1730Getting started implementations in user file (using a general purpose timer for example or other time

source). For more details please refer to HAL_TimeBase example.

4.3 Using STM32CubeMX for generating the initialization C code

Another alternative to Steps 1 to 6 described in Section 4.2 consists in using the

STM32CubeMX tool to easily generate code for the initialization of the system, the

peripherals and middleware (Steps 1 to 6 above) through a step-by-step process:

1.Selection of the STMicroelectronics STM32 microcontroller that matches the required

set of peripherals.

2. Configuration of each required embedded software thanks to a pinout-conflict solver, a

clock-tree setting helper, a power consumption calculator, and an utility performing

MCU peripheral configuration (GPIO, USART...) and middleware stacks (USB,

TCP/IP...).

3. Generation of the initialization C code based on the configuration selected. This code is

ready to be used within several development environments. The user code is kept at

the next code generation.

For more information, please refer to “STM32CubeMX for STM32 configuration a(nd

initialization C code generation” user manual (UM1718).

DocID025922 Rev 219/24

Getting started UM173020/24DocID025922 Rev 2

4.4 How to get STM32CubeF4 release updates

The STM32CubeF4 firmware package comes with an updater utility: STM32CubeUpdater,

also available as a menu within STM32CubeMX code generation tool.

The updater solution detects new firmware releases and patches available from https://www.sodocs.net/doc/5a3243625.html, and

proposes to download them to the user’s computer.

4.4.1 How to install and run the STM32CubeUpdater program

?

Double-click SetupSTM32CubeUpdater.exe file to launch the installation.?Accept the license terms and follow the different installation steps.

Upon successful installation, STM32CubeUpdater becomes available as an STMicroelectronics program under Program Files and is automatically launched.The STM32CubeUpdater icon appears in the system tray:

?Right-click the updater icon and select Updater Settings to configure the Updater connection and whether to perform manual or automatic checks (see STM32CubeMX

User guide - UM1718 section 3 - for more details on Updater configuration).

相关主题