dimanche 27 mars 2016

Utilisation du STM32 VL/L discovery sous Linux

C'est possible et on peut se faciliter la vie avec un bon makefile. Auparavant ils vous faut installer l'ensemble des outils : le compilateur et l'outil de flashage/déboggage.

Cross compiler pour ARM

Installation du compilateur gcc-arm-none-eabi

Il devrait être fourni par la majorité des distributions :

#Debian/Ubuntu
sudo apt-get install gcc-arm-none-eabi
#Archlinux
yaourt gcc-arm-none-eabi

Sinon vous trouverez ici les sources et binaires.

https://github.com/esden/summon-arm-toolchain

Le tarball :

https://launchpad.net/gcc-arm-embedded/+download

Example de compilation

Compilation d'un fichier main.c

/usr/bin/arm-none-eabi-gcc -O1 -c -mcpu=cortex-m3 -mthumb \
-msoft-float -gdwarf-2 -mno-sched-prolog -fno-hosted -mtune=cortex-m3 -march=armv7-m -mfix-cortex-m3-ldrd \
-DSTM32F10X_MD_VL -DUSE_STDPERIPH_DRIVER -I"/home/toto/ROM_READER/cmsis" -I"/home/toto/ROM_READER/device"\
-I"/home/toto/ROM_READER/inc" -I"/home/toto/ROM_READER/stm32lib/inc" /home/toto/ROM_READER/src/main.c

Édition des liens (connection des fichiers compilés)

/usr/bin/arm-none-eabi-gcc -o Demo.elf -O1  -g -Wall \
-Werror  -fno-exceptions -ffunction-sections -fdata-sections -nostartfiles -Wl,--gc-sections,\
-T/home/toto/ROM_READER/device/linker/STM32F100RB_FLASH.ld  core_cm3.o system_stm32f10x.o \
stm32f10x_gpio.o stm32f10x_rcc.o main.o startup_stm32f10x_md_vl.o 

Convertion du binaire au format elf en binaire exécutable par le systême.

/usr/bin/arm-none-eabi-objcopy -O binary Demo.elf Demo.bin

Liste de la taille des sections et la taille totale.

/usr/bin/arm-none-eabi-size -B Demo.hex

Flasher le STM-32

Installation de st-link

Si vous n'avez pas de "flasheur" JTAG comme le bus pirate, les kit de développment ont une puce (un autre stm32) qui convertie la liaison série en JTAG. Cela parmet de programmer directement votre STM32 par USB.

Pour communiquer avec cette puce vous avez besoin de st-link (https://github.com/texane/stlink). St-link foruni une bibliothèque de communication (libstlink), un serveur de déboggage GDB (st-util), et un outil de flashage (st-flash). Les dépendances requises sont libusb, pkg-config et autotools.

git clone stlink
cd stlink
./autogen.sh
./configure
make

Exemple pour charger un fichier

Il vous faudra utiliser l'option v1 pour votre vl discovery et v2 pour votre l discovery (v2 l'est par défaut). Stlink vous permet de lire et d'écrire la rom flash du stm32.

# Lecture de 4096 addresses d'un VL et transfert dans out.bin
./st-flash read v1 out.bin 0x8000000 4096
# De même avec un v2
./st-flash read out.bin 0x8000000 4096
# Écriture du binaire in.bin dans la rom
./st-flash write v1 in.bin 0x8000000 

Pour lancer le programme, n'oubliez pas de resetter votre stm32 après le chargement du binaire.

Si vous n'aimez pas la ligne de commande, reportez vous sur l'interface graphique stlink-gui:



Un makefile

Pour vous faciliter la vie voici un Makefile et les sources fournies par STM pour le VL-Discovery (https://github.com/z3bu/STM32VL-Discovery).

git clone https://github.com/z3bu/STM32VL-Discovery
cd STM32VL-Discovery
#Compilation de la démo
make
#Écriture de la flash
make load

Les bibliothèques fournies par STM sont dans le dossier stm32lib. Les fichiers core sont dans cmsis, l'éditeure de lien, le fichier assembleur de startup, et d'autres définitions pour le STM32 sont dans le dossier device.

Décommentez ou ajoutez dans le Makefile et inc/stm32f10x_conf.h lorsque vous voulez utiliser de nouvelles bibliothèques dans votre programme.

Aucun commentaire:

Enregistrer un commentaire