How to configure Ubuntu to program STM32

OpenOCD installation

The Open On-Chip Debugger (OpenOCD http://openocd.org/) aims to provide debugging, in-system programming and boundary-scan testing for embedded target devices. If you using Ubuntu or any Debian like OS, OpenOCD could be installed by running following command:

sudo apt-get install openocd

ARM toolchain installation

Now we need compiler, linker and assembler (toolchain) for ARM Cortex architecture (https://launchpad.net/gcc-arm-embedded).

sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt-get update
sudo apt-get install gcc-arm-embedded

Eclipse

First install Eclipse IDE (https://eclipse.org/). After installation run Eclipse and install plugin for STM32 procesors development. Follow this instruction http://gnuarmeclipse.github.io/plugins/install/ .

USB rules

Next thing is to add proper permission to new devices.

cd /etc/udev/rules.d/
sudo nano 50-usb-stlink.rules

After opening 50-usb-stlink.rules (you can chose number to be anything integer under 99) file in nano, paste following rules for different ST-Link devices.

#FT232
ATTRS{idProduct}=="6014", ATTRS{idVendor}=="0403", MODE="666", GROUP="plugdev"
#FT2232
ATTRS{idProduct}=="6010", ATTRS{idVendor}=="0403", MODE="666", GROUP="plugdev"
#FT230X
ATTRS{idProduct}=="6015", ATTRS{idVendor}=="0403", MODE="666", GROUP="plugdev"
#STLINK V1
ATTRS{idProduct}=="3744", ATTRS{idVendor}=="0483", MODE="666", GROUP="plugdev"
#STLINK V2 and V2.1
ATTRS{idProduct}=="3748", ATTRS{idVendor}=="0483", MODE="666", GROUP="plugdev"

If you have different programmer you should change idProduct and idVendor. To find out your numbers first plug your USB device and then type lsusb

~$ lsusb
Bus 002 Device 007: ID 041e:323d Creative Technology, Ltd 
Bus 002 Device 005: ID 04d9:1702 Holtek Semiconductor, Inc. Keyboard LKS02
Bus 002 Device 004: ID 09da:9090 A4Tech Co., Ltd. XL-730K / XL-750BK / XL-755BK Mice
Bus 002 Device 003: ID 0424:2504 Standard Microsystems Corp. USB 2.0 Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 064e:a219 Suyin Corp. 1.3M WebCam (notebook emachines E730, Acer sub-brand)
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

In the end restart USB service by pasting to terminal

sudo service udev restart

Testing

For tests I am using ST-Link 2.1 programmer from NUCLEO-F401RE board and  STM32F103C8T6 procesor in my USB Accelerometer device connected to Nucleo by SWD.

sudo openocd -f /usr/share/openocd/scripts/interface/stlink-v2-1.cfg -f /usr/share/openocd/scripts/target/stm32f1x.cfg

That’s it. If you had any troubles preparing you Ubuntu to program STM microcontrollers please let me know in the comment section below.

 

How to plot serial data from Serial port or Arduino

Sometimes there is a need to visualize data from serial port in real time, like I had in my USB Accelerometer sensor project. The goal can be reach hard way by writing your own software but there is no need to do so. Smart people already write many good and free solutions and in this post I want to show you how to use them in your electronic project. For these who want to code this functionality by their own I will show how to plot serial data in Python and Matlab at the very end of this article.

1. SerialPlot



SerialPlot is my favorite project that has many configuration features and it is easy to use. It is a Qt based software for plotting data from serial port in real time. It can be installed in Linux and Windows! Here is the hackday website of the project: https://hackaday.io/project/5334-serialplot-realtime-plotting-software

SerialPlot accepts 3 different types of data input:

  • Simple binary stream, supports different number formats (unsigned/signed – 8/16/32 bits and float)
  •  ASCII data in CSV format
  • User defined custom frame format (frame start byte, frame size, checksum etc..)

2. CuteCom


CuteCom is a graphical serial terminal, like minicom. It can not plot the data but it is very useful for debugging and communicating with embedded device. Currently it runs on Linux, FreeBSD and Mac OS X. Website of the project http://cutecom.sourceforge.net/

 

How to chose resistor for LED diode

LED diodes are non linear elements whom I-V characteristic depend from many external parameters such as temperature and manufacture. Mathematically I(U) dependence is described by Shockley diode equation. Unfortunately this exponential dependence, after adding resistor in series, becomes implicit function of current and supply voltage witch can be only solve numerically. That is why we have to simplify things for practical purposes. Here is useful table witch I use for fast choice of resistor for LED diode. It contains values of resistance calculated for four most common supply voltages at 20 mA current.

Color Voltage drop at 20 mA Resistor for 3.3 V Resistor for 5 V Resistor for 9 V Resistor for 12 V
Infrared 1.6 V 85 Ω 170 Ω 370Ω 520Ω
Red 2.2 V 55 Ω 140 Ω 340 Ω 490 Ω
Green 2.0 V 65 Ω 150 Ω 350 Ω 500 Ω
Blue 3.2 V 5 Ω 90 Ω 290 Ω 440 Ω
White 3.4 V 0 Ω 80 Ω 280 Ω 430 Ω
Ultraviolet 3.8 V 0 Ω 60 Ω 260 Ω 410 Ω