Go to file
Rob Newberry e23fba7b51 This set of minor patches to the STM32CubeU5 files is necessary to support
building for the STM32U545 chip.  These changes have been provided to
ST (https://github.com/STMicroelectronics/STM32CubeU5/issues/41).  However,
they have fixed the issue internally and are awaiting a future release to
push them out.

I am in the process of creating a PR for Zephyr-proper to add support for
the STM32U545 part as well as the Nucleo-U545RE-Q board.  That PR is
dependent on these changes.

Signed-off-by: Rob Newberry <rob@zenomoto.com>
2024-03-20 09:34:26 +01:00
.github/workflows ci: test: update tested Python versions 2022-03-18 18:30:28 +01:00
dts dts: New batch of pinctrl.dtsi files including I3C signals 2024-03-19 13:52:17 +01:00
lib lib: stm32wba: fix formatting & typos 2024-01-16 10:20:28 +01:00
scripts scripts: genpinctrl: Generate I3C pins 2024-03-19 13:52:17 +01:00
stm32cube This set of minor patches to the STM32CubeU5 files is necessary to support 2024-03-20 09:34:26 +01:00
zephyr lib: hci: Add stm32wba BLE controller library 2023-12-18 15:03:10 +01:00
.gitignore gitignore: add Python and editor files 2020-09-29 09:03:24 -05:00
CMakeLists.txt Licenses: Add Apache-2.0 SPDX when missing 2020-06-25 21:31:01 -05:00
LICENSE LICENSE: License root file should contain explicit licenses 2020-07-08 11:58:26 -05:00
README.rst update readme 2024-03-19 13:54:41 +01:00

README.rst

This module provides the required STM32cube packages, dtsi files and libraries
needed to build a Zephyr application running on STM32 silicon.

Packages, dtsi files and libraries are updated regularly in order for STM32
users to benefit from the latest STM32Cube versions, features and bug fixes.
Updates are generally done once in each Zephyr release, preferably soon after
the opening of the merge window to give time to users to use it, potentially
report issues if some are faced and get them fixed before the new version in
released.

STM32Cube packages
******************

How to introduce a new version of stm32cube:
============================================
Original STM32Cube tree structure has been modified to a minimum
structure for a better fit into Zephyr.
STM32Cube is divided into drivers and soc section, with:

.. code-block:: none

   drivers/
       include/ contains Cube HAL/LL files from: Drivers/STM32YYxx_HAL_Driver/Inc/*
       src/ contains: Drivers/STM32YYxx_HAL_Driver/Src/*
   soc/ contains STM32 CMSIS files from
       *Drivers/CMSIS/Device/ST/STM32F1xx/Include/*
       *Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c

Additionally ``driver/include/stm32f1xx_hal_conf_template.h`` is renamed into
``driver/include/stm32f1xx_hal_conf.h``

If there are changes in the number of *.c files the Kconfig file in the
stm32cube directory and the ``CMakeLists.txt`` files in the stm32yyxx/ directories
will have to be updated. If *.c have been removed drivers that used them will
also have to be updated.

IMPORTANT:
----------
STM32Cube, as an external library, is not supposed to be modified.
In practice, it might be required to patch it.
When updating a STM32Cube package to a new version, please have a look
to the patch list in dedicated README file, to make sure you don't overwrite
some earlier modifications of the package. Furthermore, make sure to run the
``genllheaders.py`` script in order to make sure generic LL API headers are
up-to-date.
In case of doubt, contact Zephyr code owner for stm32cube.


How to use STM32Cube:
=====================
In order to enjoy ST CMSIS definitions, ``CONFIG_HAS_STM32CUBE`` should be defined
and ``stm32yyxx.h`` should be included in ``soc.h``

.. code-block:: c

   #include <stm32f1xx.h>

Additionally, in order to use STM32Cube LL, you should include the provided
generic LL headers ``stm32_ll_foo.h`` directly in the file using the LL API:

.. code-block:: c

   #include <stm32_ll_usart.h>

Drivers and applications that need functions from the STM32Cube HAL/LL C-files
will need to add the appropriate select entries in their Kconfig files.
For example when functions from ``stm32f4xx_hal_uart.c`` are used, the following
entry should apear in driver's Kconfig file.

.. code-block:: none

	select USE_STM32_HAL_UART

should be added to the Kconfig file.


And if the driver for example needs functions from the LL I2C C-files, the
driver Kconfig file should include the following entry

.. code-block:: none

	select USE_STM32_LL_I2C


Similar to Zephyr, STM32Cube HAL and LL APIs embed asserts which are
provided for parameters checking. You can benefit from these by enabling
the following symbols:

.. code-block:: none

     CONFIG_USE_STM32_ASSERT=y
     CONFIG_ASSERT=y


Use STM32Cube in your application:
==================================
It may happen that you want to access STM32Cube APIs in your application,
either because it is not available as a zephyr API or because you want to
by-pass use of existing Zephyr API.
In this case, you need to create a Kconfig file in your application which
contains the following:

.. code-block:: none

   mainmenu "MYAPP"

   source "Kconfig.zephyr"
   config MYAPP_STM32
     default y
     bool
     select USE_STM32_HAL_FOO
     select USE_STM32_LL_BAR

Additionally, you need to add the following includes:

.. code-block:: c

   #include <soc.h>
   #include <stm32_ll_bar.h>

.dtsi files
***********

In order to provide STM32 boards pin configuration using device tree,
*-pinctrl.dtsi are made available under dts/st directory. For each STM32 SoC
package a complete and correct -pcintrl.dtsi is available. Generation use as
input the `STM32 Open Pin Data <https://github.com/STMicroelectronics/STM32_open_pin_data>`_
database.

*-pinctrl.dtsi files are generated using generation scripts available in this
repo under scripts/genpinctrl and can be generated by running::

   python3 scripts/genpinctrl/genpinctrl.py -p /path/to/stm32-open-pin-data-repository

New set of -pinctrl.dtsi files could be generated following availability of a
new version of STM32 Open Pin Data or a change in the generation script
configuration files.

STM32Cube based libraries:
**************************

For some specific features, in order to benefit from already available and
validated code. Libraries from STM32Cube packages are extracted and made
available in this module under `lib` folder.

These libraries are updated automatically by the ``ble_library.py`` script in a separate commit
directly after their STM32Cube package.