stm32 hello world tj blinki led

Blink led, ili hello world. Kod je pozajmljen sa https://github.com/satoshinm/pill_blink/tree/master/bare-metal. Ali je malo modifikovan kako bi nam bolje poslužio.

Kloniraćemo repozitori https://github.com/zsteva-elektro-blog/blue_pill_blink_bare_metal, zatim pokrenuti kompajliranje.

1
2
3
git clone https://github.com/zsteva-elektro-blog/blue_pill_blink_bare_metal
cd blue_pill_blink_bare_metal/bare-metal
make

U jednom prozoru pokrenemo st-util. I potom u prozoru sa projektom možemo gdb-om da se nakačimo.

Znači prvo pokrenemo gdb

1
arm-none-eabi-gdb pill_blink.elf

Zatim u okviru gdba redom komande rade: konektujemo se na na hardware preko st-util, stopiramo uredjaj, ucitamo program u uredjaj, resetujemo uredjaj i konacno sa run pokrenemo program.

1
2
3
4
5
target extended localhost:4242
monitor reset halt
load
monitor reset init
run

Rezultat treba bude LED dionda koja blinka. Da svaki put ne bi kucali sve ovo, komande su snimljene u gdbinit fajl i napravljena prečica u Makefile, tako da je dovoljno uraditi

1
make gdb

I samo nam preostaje da uradimo run.

gdb stm32 peek & poke

Pošto smo uspešno povezali razvojnu pločicu, da probamo da upalimo LED diodu na pločici.

Kod je preuzet iz https://github.com/satoshinm/pill_blink bare-metal/pill_blink.c

Pošto nam st-util prepoznaje pločicu, povezaćemo se gdb-om.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ arm-none-eabi-gdb -ex 'target extended-remote localhost:4242'
GNU gdb (GDB) 8.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-pc-linux-gnu --target=arm-none-eabi".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
Remote debugging using localhost:4242
warning: No executable has been specified and target does not support
determining executable automatically. Try using the "file" command.
0xfffffffe in ?? ()
(gdb)

Zatim uraditi potrebnu inicijalizaciju, u ovom trenutku nemam pojma šta ovo tačno radi, prepisano je iz pill_blink primera.

1
2
3
set *(unsigned int *)0x40021018 |= (1 << 4)
set *(unsigned int *)0x40011004 |= (0x00 << (((13 - 8) * 4) + 2))
set *(unsigned int *)0x40011004 |= (0x02 << ((13 - 8) * 4))

Po ovome LED na pločici ce početi da svetli. Da bi ga ugasili treba da izvšimo:

1
set *(unsigned int *)0x40011010 = (1 << 13)

I potom da upalimo:

1
set *(unsigned int *)0x40011014 = (1 << 13)

Kao u stara dobra vremena 8bitnih računara, osim što sve deluje malo komplikovanije.

stlink konektovanje

Konektovanje stlink adaptera i stm32 plocice.

Arch linux instaliranje potrebnih paketa

1
2
3

pacman -S arm-none-eabi-gcc arm-none-eabi-gdb arm-none-eabi-binutils arm-none-eabi-newlib stlink

Po povezivanju stlink adaptera u dmesg se pojavi:

1
2
3
4
5
6
usb 1-1.1: new full-speed USB device number 14 using ehci-pci
usb 1-1.1: New USB device found, idVendor=0483, idProduct=3748
usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-1.1: Product: STM32 STLink
usb 1-1.1: Manufacturer: STMicroelectronics
usb 1-1.1: SerialNumber: HÿjexUUE g

A st-util prepozna razvojnu pločicu sugerušići da smo sve lepo povezali. Ako je Chip ID 0 znači da nije prepoznao pločicu.

1
2
3
4
5
6
7
$ st-util 
st-util 1.5.0
2018-04-29T11:17:44 INFO common.c: Loading device parameters....
2018-04-29T11:17:44 INFO common.c: Device connected is: F1 Medium-density device, id 0x20036410
2018-04-29T11:17:44 INFO common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
2018-04-29T11:17:44 INFO gdb-server.c: Chip ID is 00000410, Core ID is 1ba01477.
2018-04-29T11:17:44 INFO gdb-server.c: Listening at *:4242...