.. _mikroe_mini_m4_for_stm32:

Mikroe MINI-M4 for STM32
#########################

Overview
********

MINI-M4 for STM32 is a small ARM® Cortex™-M4 development board containing
an `STM32F415RG`_ microcontroller. It is pin compatible with PIC16F887 and
PIC18(L)F45K20 microcontrollers and it perfectly fits into a standard DIP40
socket. The board is equipped with a 16MHz SMD crystal oscillator, and
a 32.768KHz crystal which can be used for the internal RTCC module.
It has a reset button and three signal LEDs.
It operates on a 3.3V power supply. An on-board voltage regulator allows
the board to be powered directly from a USB cable.

.. image:: img/mikroe_mini_m4_for_stm32.jpg
   :align: center
   :alt: MINI-M4 for STM32

Pin Mapping
===========

This port is a starting point for your own customizations and not a complete
port for a specific board. Most of the GPIOs on the STM32 SoC have been exposed
in the external header with silk screen labels that match the SoC's pin names.

For more information on Pin Mapping, please refer to `MINI-M4 for STM32 User Manual`_.

STLinkV2 connection:
====================

The board can be flashed by using STLinkV2 with the following connections.

+------------------+---------------------+
| MINI-M4(Pin no.) | ST-Link/V2(Pin no.) |
+==================+=====================+
| PA14(36)         | TCK_SWCLK(9)        |
+------------------+---------------------+
| PA13(35)         | TMS_SWDIO(7)        |
+------------------+---------------------+
| PA15(30)         | TDI(5)              |
+------------------+---------------------+
| PB3(29)          | TDO_SWO(13)         |
+------------------+---------------------+
| GND(31)          | GND(8)              |
+------------------+---------------------+
| MCLR(1)          | NRST(15)            |
+------------------+---------------------+

.. image:: img/st-linkv2.jpg
   :width: 720px
   :align: center
   :alt: ST-Link/V2

Supported Features
==================

The MINI-M4 for STM32 board configuration supports the following hardware
features:

+-----------+------------+----------------------+
| Interface | Controller | Driver/Component     |
+===========+============+======================+
| NVIC      | on-chip    | nested vectored      |
|           |            | interrupt controller |
+-----------+------------+----------------------+
| PINMUX    | on-chip    | pinmux               |
+-----------+------------+----------------------+
| UART      | on-chip    | serial port          |
+-----------+------------+----------------------+
| GPIO      | on-chip    | gpio                 |
+-----------+------------+----------------------+
| I2C       | on-chip    | i2c                  |
+-----------+------------+----------------------+
| SPI       | on-chip    | spi                  |
+-----------+------------+----------------------+
| PWM       | on-chip    | PWM                  |
+-----------+------------+----------------------+
| USB       | on-chip    | USB                  |
+-----------+------------+----------------------+


Other hardware features are not supported by the Zephyr kernel.

The default configuration can be found in the defconfig file:

	``boards/arm/mikroe_mini_m4_for_stm32/mikroe_mini_m4_for_stm32_defconfig``

Serial Port
===========

The Zephyr console output is assigned to USART2. Default settings are 115200 8N1.

Programming and Debugging
*************************

Applications for the ``mikroe_mini_m4_for_stm32`` board configuration can
be built and flashed in the usual way (see :ref:`build_an_application` and
:ref:`application_run` for more details).

Flashing
========

The initial state of the board is set to lock.
When you flash, it will fail with the message:

.. code-block:: console

   Error: stm32x device protected

Unlocking with openocd makes it possible to flash.

.. code-block:: console

   $ openocd -f /usr/share/openocd/scripts/interface/stlink-v2.cfg \
       -f /usr/share/openocd/scripts/target/stm32f4x.cfg -c init\
       -c "reset halt" -c "stm32f4x unlock 0" -c "reset run" -c shutdown

Here is an example for the :ref:`hello_world` application.

.. zephyr-app-commands::
   :zephyr-app: samples/hello_world
   :board: mikroe_mini_m4_for_stm32
   :goals: build flash

You should see the following message on the console:

.. code-block:: console

   Hello World! mikroe_mini_m4_for_stm32

Debugging
=========

You can debug an application in the usual way.  Here is an example for the
:ref:`hello_world` application.

.. zephyr-app-commands::
   :zephyr-app: samples/hello_world
   :board: mikroe_mini_m4_for_stm32
   :maybe-skip-config:
   :goals: debug

.. _STM32F415RG:
        https://www.st.com/resource/en/datasheet/stm32f415rg.pdf
.. _MINI-M4 for STM32 User Manual:
        https://download.mikroe.com/documents/starter-boards/mini/stm32/f4/mini-m4-stm32-manual-v100.pdf
