Comment développer pour la découverte STM32 sous Linux? [fermé]

26

J'ai une carte de découverte STM32 et j'aimerais pouvoir la programmer sur Linux.

Quelle est la manière la plus simple de faire ça?

Gordon Williams
la source
J'ai installé Codesourcery sur LinuxhUbuntu et un peu empilé: PATH est ok mais le programme n'apparaît pas sur le tableau de bord ou le centre logiciel. C'est peut-être l'Ubuntu que je changerais en quelque sorte mais je ne sais pas comment. Si vous avez une idée, veuillez écrire. Merci. Tom
Tom Rert
1
@ TomRitzmann PeterJ a raison, veuillez ne pas utiliser de réponses pour poser des questions. De plus, les problèmes logiciels sont hors sujet ici, SuperUser est le bon endroit.
clabacchio

Réponses:

12

Un moyen facile de programmer et de déboguer la carte de découverte STM32 (ou tout STM32 utilisant un programmateur ST-Link) consiste à utiliser le projet 'stlink' https://github.com/texane/stlink (mais OpenOCD semble aussi populaire)

Les cartes ST Nucleo apparaissent également comme un périphérique flash USB, donc vous n'avez même pas besoin stlink- copiez simplement le fichier dessus.

Il existe de bonnes pages sur la façon de développer pour la découverte STM32 sur Linux, telles que http://gpio.kaltpost.de/?page_id=131 et http://torrentula.to.funpic.de/2012/03/22/ setup-up-the-stm32f4-arm-development-toolchain / et http://jethomson.wordpress.com/2011/11/17/getting-started-with-the-stm32f4discovery-in-linux/

Cependant, j'ai trouvé le dernier lien le plus utile. Il montre comment construire les projets STM32 de ST tels quels - Le seul changement est d'ajouter son Makefile, qui semble être une solution parfaite.

Sur les versions récentes d'Ubuntu, il existe un package que vous pouvez installer qui contient un compilateur ARM:

sudo apt-get install gcc-arm-none-eabi

Notez que les processeurs sont tous un peu différents. STM32F0..4 aura tous besoin de drapeaux de compilateur différents, et le script de l'éditeur de liens sera légèrement différent pour chacun (bien que ce ne soit vraiment qu'en raison de la taille modifiée de la RAM et du Flash).

Edit: si vous voulez commencer très rapidement, vous pouvez également consulter http://www.espruino.com . C'est un interpréteur JavaScript qui s'exécute sur le STM32 lui-même, donc une fois que vous avez 'stlink' installé afin que vous puissiez flasher sur la carte, vous pouvez simplement télécharger une image à partir de ce site, la flasher, puis vous connecter avec une application de terminal et commencer la programmation.

Gordon Williams
la source
Voici une liste des cartes de découverte STM32x prises en charge par OpenOCD: github.com/openrisc/openOCD/tree/master/tcl/board (recherchez «découverte» à l'aide de votre navigateur)
rbaleksandar
8

Si vous préférez les éditeurs de texte et les Makefiles au lieu d'utiliser une interface graphique, vous pouvez faire:

  • Installez une chaîne d'outils fournissant arm-none-eabi-gcc. Sur Archlinux, vous auriez besoin de communauté / arm-none-eabi-binutils, arm-none-eabi-gcc et arm-none-eabi-newlib (et arm-none-eabi-gdb si vous souhaitez déboguer) tous de la communauté repo, ou https://launchpad.net/gcc-arm-embedded (qui peut être trouvé dans l'AUR d'Archlinux sous gcc-arm-none-eabi-bin).
  • Décidez si et quelle bibliothèque vous souhaitez utiliser pour accéder au matériel. Du haut de ma tête, il y a trois options courantes:
    1. Aucun. Vous écrivez tout à partir de zéro. Déconseillé aux débutants.
    2. STM32Cube : bibliothèque AC fournie par ST elle-même.
    3. Libopencm3 : une librairie open source prenant en charge un grand nombre de cœurs cortex-m de différents fournisseurs.
    4. STM32PLUS : une bibliothèque C ++. Cependant, je ne peux pas en dire beaucoup plus à ce sujet car je ne l'ai pas testé.
  • Créez ou copiez votre premier projet.
    1. Sans bibliothèque, écrivez votre propre makefile, script de l'éditeur de liens, code de démarrage et lancez un simple makefile. Bonne chance ;)
    2. Avec STM32Cube: Téléchargez et installez STM32CubeMX . Une fois décompressé, le fichier * .exe n'est en fait qu'un fichier java et vous pouvez l'exécuter en utilisant "java -jar filename.exe". L'installation nécessite sudo. Une fois terminé, créez un projet et générez le code pour "Truestudio". Cela devrait vous donner un point de départ avec un script de l'éditeur de liens, un code de démarrage, une fonction principale triviale (et un makefile si je me souviens bien). En fait, même si vous n'utilisez pas la bibliothèque STM32Cube, le STM32CubeMX est idéal pour calculer les valeurs de l'arbre d'horloge et valider si vous pouvez configurer la puce comme vous le pensez.
    3. Avec libopencm3: Obtenez les exemples de libopencm3 , trouvez un exemple correspondant à votre carte et utilisez-le comme point de départ. Les exemples doivent être prêts à fonctionner. Tapez simplement "make". Utilisez ensuite cet exemple comme point de départ pour votre propre développement.
    4. Avec STM32Plus: je ne sais pas. Désolé.
  • Obtenez votre projet au conseil d'administration. Soit utiliser

    1. Le chargeur de démarrage série: stm32flash fonctionne très bien.
    2. Le port de débogage: vous pouvez utiliser openocd pour parler à l'adaptateur de débogage fourni sur la carte. Openocd est génial, mais la documentation n'est pas toujours la meilleure. En cas de doute, rejoignez le canal irc openocd. Les gens là-bas sont vraiment sympas.
  • Codez dans un éditeur de texte et utilisez les outils de ligne de commande. Ce tutoriel fournira de nombreux conseils.

Prendre plaisir

mox
la source
5

Eclipse , GCC et OpenOCD sont une chaîne d'outils. Il est recommandé par EMCU-IT et il y a des informations supplémentaires ici . Ces pages recommandent également d'utiliser un RTOS comme FreeRTOS.org , mais cela dépend de vous.

Et pour aider à compiler les exemples STM32 sous Linux allez ici . Ce lien pointe vers un makefile pour les exemples qui peuvent être invoqués avec

git clone git://github.com/snowcap-electronics/stm32-examples.git
cd stm32-examples
wget http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32_f105-07_f2xx_usb-host-device_lib.zip
unzip stm32_f105-07_f2xx_usb-host-device_lib.zip

Quelques corrections de code mineures sont également documentées, mais la plupart du projet devrait fonctionner avec

make CROSS_COMPILE=/path/to/arm-2011.03/bin/arm-none-eabi-
embedded.kyle
la source
1
Merci! Je n'avais jamais vu ces liens auparavant. Je suis étonné qu'il n'y ait pas de guide plus définitif quelque part, car les différents panneaux de découverte ont des drapeaux de construction subtilement différents.
Gordon Williams
Ouais, ST a fabriqué une carte très bon marché et en a donné des milliers, et le STM32 lui-même est une puce géniale, jusqu'à F4, mais les programmer est une énorme douleur dans le cul. Leurs pilotes sont incroyablement mal documentés et mal nommés, et trouver un IDE et une chaîne d'outils qui fonctionnent bien ensemble gratuitement n'est pas trop facile.
hak8 ou
1

J'ai eu du succès avec https://github.com/JorgeAparicio/bareCortexM (voir aussi les articles de blog liés). Je suis stupéfait de pouvoir simplement parcourir le code en une seule étape ou parcourir la mémoire de l'appareil au lieu d'insérer des instructions de débogage dans mon code ou de deviner ce qui se passe à l'intérieur de la puce.

Le projet bareCortexM est un modèle Eclipse pour le développement avec la série Cortex M, en particulier STM32, en C ++ sans OS. Il est configuré pour utiliser openocd, gcc et possède des scripts pour flasher et déboguer vers plusieurs cibles, y compris certaines des cartes de découverte. En suivant les instructions et en installant les plugins Eclipse recommandés, j'ai pu utiliser mon STM32VLDISCOVERY sur Ubuntu.

Comme recommandé, j'ai combiné le modèle eclipse avec la bibliothèque de modèles C ++ libstm32pp du même auteur pour le matériel STM32. libstm32pp fournit un remplacement étonnamment complet de CMSIS et des pilotes STM32 souvent critiqués avec un modèle de programmation qui vous permet de dire des choses comme PB10::setMode(gpio::cr::GP_OPEN_DRAIN_2MHZ)et / PINB::setLow()ou la PINB::setHigh()plupart du temps en grande partie compilées en ligne grâce aux modèles C ++. La configuration est très sympa.

joeforker
la source
Je ne recommande plus le bareCortexM non entretenu; consultez stm32plus sur andybrown.me.uk/wk
joeforker
Le problème avec ces pilotes de périphérique est qu'ils sont inefficaces. Pour les pilotes de périphérique à haute vitesse appropriés qui ne gaspillent pas les cycles de processeur, vous avez besoin d'un rtos en dessous pour pouvoir faire une planification appropriée.
Martin
0

Ce serait peut-être utile à quelqu'un: mon court article (sur le russe) et mon projet simple . Tout sous Linux et sans choses inutiles comme l'éclipse.

Les bibliothèques proviennent du site Web de ST, makefile - d'un des nombreux exemples de GPL sur Internet.

Eddy_Em
la source
0

Voici un petit projet de modèle innovant pour un démarrage rapide en utilisant la carte de découverte STM32F0 sous Linux ou tout autre système d'exploitation:

https://github.com/dobromyslov/stm32f0-chibios-template

Notez que le projet utilise ChibiOS - un système d'exploitation en temps réel gratuit et open source, il ne s'agit donc pas exactement d'une implémentation à part entière.

Viacheslav Dobromyslov
la source
0

J'utilise vim et arm-none-eabi-gcc avec tous les outils de développement Linux habituels. Linux est à mon avis un environnement de développement supérieur pour le travail embarqué de loin. Pour le débogage, j'utilise stlink et arm-none-eabi-gdb.

Martin
la source
0

Considérez platformio . Si vous êtes à l'aise avec la ligne de commande, vous constaterez que platformio facilite considérablement le processus de développement. pio initpeut être utilisé pour mettre en place un projet. pio runexploite la chaîne d'outils pour compiler. pio run --target uploadenvoie le code à l'appareil. Platformio prend en charge le téléchargement des composants de la chaîne d'outils, des bibliothèques, etc. selon les besoins.

dat
la source