Skip to content

ProMake® STM32duino Nano

Description

Arduino Nano as one of the smallest boards after the great success of a bigger Arduino Uno board. Because of its small size, Arduino Nano board is an ideal component for small projects of electronic devices Moreover, it can also be used to create interesting loT projects and home-based circuits. For that matter, Nano boards can be used as a perfect tool for beginners in programming of embedded systems as well as for experienced programmers. Arduino Nano board has gained popularity due to simplicity of use, compatibility and versatility. Appreciated both by the amateurs and professionals, it is a perfect tool for working on interesting projects and developing cooperation.

As a result of this popularity, ProMake STM32 Nano board has introduced which based on Famous STM32 Series of Microcontrollers that helps the users to create high performance & low power Designs in different applications especially in IOT.

This compact STM32L0 development board can be well embedded in your projects. Featuring the STM32L053C8T, this chip has 64KB of ROM, 20KB of SRAM and runs at 32MHz and it is fully compatible with Arduino Nano on pinout and sizes.

The board features a Type-C connector and a 3.3V 1000mA LDO regulator. Also, a diode is connected in series to prevent power backflow.

The modern USB-C connector makes it easy to program under the Arduino IDE but for more advanced users who prefer to use the power and speed of professional tools, we've also exposed the JTAG connector.

With so much functionality, it is an ideal choice for your Internet of Things project.

There are both 25Mhz 9pF high-speed and 32.768Khz 6pF low-speed crystals on board.

Features

  • Powered by Low-Power STM32L053C8T core processor (48-pin package)
  • 25MHZ high-speed crystal & 32.768Khz 6PF low-speed crystal
  • Reset button, BOOT0 button
  • User & Power LEDs
  • Use the latest original ST chip, high-quality crystal oscillator
  • Development using Arduino IDE thanks to STM32duino project
  • Development using STM32Cube IDE with comprehensive free software libraries and examples
  • USB Type-C for Programming and Power
  • SWD programmer interface
  • Flexible power-supply options: USB VBUS, Battery or external sources(5V)
  • Breadboard-friendly

Specification

  • Microcontroller: STM32L0
  • Clock Speed: 32Mhz
  • Bootloader: ?
  • DC Supply: USB Powered or External 5V DC
  • Compatible with the Arduino Nano pin mapping
  • Digital I/O Pins: 22
  • Analog Input Pins: 8 (Multiplex)
  • External Interrupt: 22 (D0~D21)
  • I2C/IWC: 18 (Default SDA), 19 (Default SCL)
  • SRAM: 20K
  • Flash: 64K
  • SPI: SPI
    • SPI 12(MISO), 11(MOSI), 13(SCK)
  • Serial Port: 1 (Serial1)
    • Serial1 0(Rx1) & 1(Tx1)

SHIPPING LIST

  • STM32L0 Development Board x1
  • 20Pin Straight Pin x2
  • 4Pin Curved Pin x1

Important Notes

  • You need ST-Link programmer or your other favorite tool for programming the STM32 chip.
  • You may need to install STM32 Virtual COM Port Driver in order to use Serial Monitor.
  • Some Arduino libraries may not work with STM32 platform and may need to get patched.

Resource

Board Schematic

Software

Porting to Arduino IDE

First you need to install STM32duino using https://github.com/stm32duino/wiki/wiki/Getting-Started

By installing the stm32 core thanks the Boards Manager, the extracted package is located here:

Go to the local Arduino directory. (The location is displayed in the "Preferences" dialog.)

It should be:

  • /home/\<USERNAME\>/.arduino15/ (Linux)
  • /Users/\<USERNAME\>/Library/Arduino15/ (Mac)
  • c:\Users\\<USERNAME\>\AppData\Local\Arduino15\ (Windows 10, Windows 7)
  • c:\Users\\<USERNAME\>\AppData\Roaming\Arduino15\ (Windows Vista)
  • c:\Documents and Settings\\<USERNAME\>\Application Data\Arduino15\ (Windows XP)

Then, go to "/packages/STMicroelectronics/hardware/stm32/" directory. Directory named with the STM32 Core version installed is present. Example: 2.0.0

If you use the portable IDE as described here then the location is in your Arduino install directory:

  • \<Arduino IDE install path\>/portable/ (Linux/Mac)
  • \<Arduino IDE install path\>\portable\ (Windows)

Open the boards.txt file and append the following text to it:

################################################################################
# EZ IOT boards

EZIOT.name=EZ IoT boards
EZIOT.build.core=arduino
EZIOT.build.board=EZ32duino
EZIOT.build.variant_h=variant_{build.board}.h
EZIOT.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}

# EZ32duino board
EZIOT.menu.pnum.EZ32duino=EZ IoT STM32duino
EZIOT.menu.pnum.EZ32duino.upload.maximum_size=65536
EZIOT.menu.pnum.EZ32duino.upload.maximum_data_size=8192
EZIOT.menu.pnum.EZ32duino.build.mcu=cortex-m0plus
EZIOT.menu.pnum.EZ32duino.build.board=EZ32duino
EZIOT.menu.pnum.EZ32duino.build.series=STM32L0xx
EZIOT.menu.pnum.EZ32duino.build.product_line=STM32L053xx
EZIOT.menu.pnum.EZ32duino.build.variant=STM32L0xx/L052C(6-8)(T-U)_L053C(6-8)(T-U)_L062C8U_L063C8(T-U)
EZIOT.menu.pnum.EZ32duino.build.peripheral_pins=-DCUSTOM_PERIPHERAL_PINS
EZIOT.menu.pnum.EZ32duino.build.cmsis_lib_gcc=arm_cortexM0l_math
EZIOT.menu.pnum.EZ32duino.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} -D__CORTEX_SC=0

# Upload menu
EZIOT.menu.upload_method.swdMethod=STM32CubeProgrammer (SWD)
EZIOT.menu.upload_method.swdMethod.upload.protocol=0
EZIOT.menu.upload_method.swdMethod.upload.options=-g
EZIOT.menu.upload_method.swdMethod.upload.tool=stm32CubeProg

EZIOT.menu.upload_method.serialMethod=STM32CubeProgrammer (Serial)
EZIOT.menu.upload_method.serialMethod.upload.protocol=1
EZIOT.menu.upload_method.serialMethod.upload.options={serial.port.file} -s
EZIOT.menu.upload_method.serialMethod.upload.tool=stm32CubeProg

EZIOT.menu.upload_method.dfuMethod=STM32CubeProgrammer (DFU)
EZIOT.menu.upload_method.dfuMethod.upload.protocol=2
EZIOT.menu.upload_method.dfuMethod.upload.options=-g
EZIOT.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg

EZIOT.menu.xserial.generic=Enabled (generic 'Serial')
EZIOT.menu.xserial.none=Enabled (no generic 'Serial')
EZIOT.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
EZIOT.menu.xserial.disabled=Disabled (no Serial support)
EZIOT.menu.xserial.disabled.build.xSerial=

EZIOT.menu.usb.none=None
EZIOT.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART)
EZIOT.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC
EZIOT.menu.usb.CDC=CDC (no generic 'Serial')
EZIOT.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB
EZIOT.menu.usb.HID=HID (keyboard and mouse)
EZIOT.menu.usb.HID.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE

EZIOT.menu.xusb.FS=Low/Full Speed
EZIOT.menu.xusb.HS=High Speed
EZIOT.menu.xusb.HS.build.usb_speed=-DUSE_USB_HS
EZIOT.menu.xusb.HSFS=High Speed in Full Speed mode
EZIOT.menu.xusb.HSFS.build.usb_speed=-DUSE_USB_HS -DUSE_USB_HS_IN_FS

EZIOT.menu.opt.osstd=Smallest (-Os default)
EZIOT.menu.opt.oslto=Smallest (-Os) with LTO
EZIOT.menu.opt.oslto.build.flags.optimize=-Os -flto
EZIOT.menu.opt.o1std=Fast (-O1)
EZIOT.menu.opt.o1std.build.flags.optimize=-O1
EZIOT.menu.opt.o1lto=Fast (-O1) with LTO
EZIOT.menu.opt.o1lto.build.flags.optimize=-O1 -flto
EZIOT.menu.opt.o2std=Faster (-O2)
EZIOT.menu.opt.o2std.build.flags.optimize=-O2
EZIOT.menu.opt.o2lto=Faster (-O2) with LTO
EZIOT.menu.opt.o2lto.build.flags.optimize=-O2 -flto
EZIOT.menu.opt.o3std=Fastest (-O3)
EZIOT.menu.opt.o3std.build.flags.optimize=-O3
EZIOT.menu.opt.o3lto=Fastest (-O3) with LTO
EZIOT.menu.opt.o3lto.build.flags.optimize=-O3 -flto
EZIOT.menu.opt.ogstd=Debug (-g)
EZIOT.menu.opt.ogstd.build.flags.optimize=-g -Og

EZIOT.menu.rtlib.nano=Newlib Nano (default)
EZIOT.menu.rtlib.nanofp=Newlib Nano + Float Printf
EZIOT.menu.rtlib.nanofp.build.flags.ldspecs=--specs=nano.specs -u _printf_float
EZIOT.menu.rtlib.nanofs=Newlib Nano + Float Scanf
EZIOT.menu.rtlib.nanofs.build.flags.ldspecs=--specs=nano.specs -u _scanf_float
EZIOT.menu.rtlib.nanofps=Newlib Nano + Float Printf/Scanf
EZIOT.menu.rtlib.nanofps.build.flags.ldspecs=--specs=nano.specs -u _printf_float -u _scanf_float
EZIOT.menu.rtlib.full=Newlib Standard
EZIOT.menu.rtlib.full.build.flags.ldspecs=

Now go to the variants\STM32L0xx\L052C(6-8)(T-U)_L053C(6-8)(T-U)_L062C8U_L063C8(T-U) folder.

Running Tests and Examples

To get more familar with STM32duino and ensure that the porting process is done completely, you run the tests and examples in https://github.com/stm32duino/STM32Examples