La carte STM32 Nucleo Discovery avec l'environnement Arduino : Différence entre versions

De Wiki L.A.B
Aller à : navigation, rechercher
(Programmer la STM32 discovery)
(Pointeur sur la partie programmation.)
 
(2 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 +
Cette page décrit la mise en service de la carte STM32 Nucleo Discovery IoT dans l'environnement de développement Arduino. Nous présenterons, dans une autre page, la [[programmation de la carte Discovery]].
 +
 +
'''Note:''' L'installation est réalisée pour des raisons de facilité sur un système GNU-Linux Debian stable. Pour les autres versions de GNU-Linux, la méthode devrait être la même. Pour les systèmes privatifs, ce devrait être moins facile, mais analogue.
 +
 
Il existe plusieurs environnements de développement pour les cartes STM32 Nucleo:
 
Il existe plusieurs environnements de développement pour les cartes STM32 Nucleo:
  
Ligne 65 : Ligne 69 :
  
 
[[File:seliotdisco.png|border|Sélection du board Discovery IoT.]]
 
[[File:seliotdisco.png|border|Sélection du board Discovery IoT.]]
 +
 +
 +
=== Première programmation ===
 +
 +
 +
'''Il se pourrait qu’il y ait un bug.''' Le téléversement peut échouer avec un message indiquant qu’un fichier n’est pas trouvé. En regardant bien, il apparaît que c’est l’exécutable 32 bits qui est utilisé. Ce qui échoue sur une installation 64 bits.
 +
 +
<nowiki>
 +
...
 +
java.io.IOException: Cannot run program
 +
".../.arduino15/.../linux/massStorageCopy":
 +
error=2, Aucun fichier ou dossier de ce type
 +
</nowiki>
 +
 +
Dans ce message d’erreur, linux fait référence à la version 32 bits, il y a le répertoire linux64 à côté. Le nom du programme utilisé, ''massStorageCopy'', fait référence à un disque dur. Pour ajouter le support 32 bits, il faut ajouter l’architecture 32 bits et installer les librairies utiles en version 32 bits (i386).
 +
 +
 +
<nowiki>
 +
dpkg --add-architecture i386
 +
apt-get update
 +
apt-get install libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386
 +
</nowiki>
 +
 +
L’autre élément qui peut être délicat, c’est que le téléversement pour arduino se fait par une connexion série. Pour les stm32, ceux ci apparaissent comme une clef usb. Il suffit de copier le fichier exécutable dans le répertoire et il est exécuté automatiquement. Le message d’erreur indique (mais pas de manière claire) que le répertoire n’est pas monté :
 +
 +
 +
<nowiki>
 +
DIS_L4IOT not found. Please ensure the device is correctly connected
 +
Une erreur est survenue lors du transfert du croquis
 +
</nowiki>
 +
 +
Les logs du système indiquent les différents éléments :
 +
 +
 +
<nowiki>
 +
# ls /dev/ttyACM*
 +
ls: impossible d'accéder à '/dev/ttyACM*': Aucun fichier ou dossier de ce type
 +
# tail -f /var/log/syslog
 +
*** /// Insertion de la carte Discovery /// ***
 +
...
 +
usb 1-10: new full-speed USB device number 3 using xhci_hcd
 +
usb 1-10: New USB device found, idVendor=0483, idProduct=374b
 +
usb 1-10: New USB device strings: Mfr=1, Product=2, SerialNumber=3
 +
usb 1-10: Product: STM32 STLink
 +
usb 1-10: Manufacturer: STMicroelectronics
 +
usb 1-10: SerialNumber: 0676FF514852897267173117
 +
cdc_acm 1-10:1.2: ttyACM0: USB ACM device
 +
usbcore: registered new interface driver cdc_acm
 +
usb-storage 1-10:1.1: USB Mass Storage device detected
 +
scsi host4: usb-storage 1-10:1.1
 +
usbcore: registered new interface driver usb-storage
 +
usbcore: registered new interface driver uas
 +
scsi 4:0:0:0: Direct-Access MBED microcontroller 1.0 PQ: 0 ANSI: 2
 +
sd 4:0:0:0: Attached scsi generic sg2 type 0
 +
sd 4:0:0:0: [sdb] 2120 512-byte logical blocks: (1.09 MB/1.04 MiB)
 +
sd 4:0:0:0: [sdb] Write Protect is off
 +
sd 4:0:0:0: [sdb] Mode Sense: 03 00 00 00
 +
sd 4:0:0:0: [sdb] No Caching mode page found
 +
sd 4:0:0:0: [sdb] Assuming drive cache: write through
 +
sd 4:0:0:0: [sdb] Attached SCSI removable disk
 +
...
 +
# ls /dev/ttyACM*
 +
/dev/ttyACM0
 +
</nowiki>
 +
 +
Nous voyons qu’avant de brancher la carte, il n’y a pas de périphérique ''/dev/ttyACM0''. Après insertion, le log du système identifie le périphérique usb connecté. Il crée le connecteur série ttyACM0, qui sera utilisé pour communiquer avec la carte, et le périphérique /dev/sdb qui représente le “disque dur” constitué par la carte (pour être rigoureux, c’est un ''mass storage''.
 +
 +
Selon la configuration, ce ''mass storage'' peut se monter automatiquement (mauvaise idée) ou manuellement. Il faut donc le monter, par exemple en activant l’icône.
 +
 +
L’automontage de périphérique et pire encore l’exécution automatique, voire l’installation automatique permet de faciliter l’introduction des virus. C’est une fonctionnalité payante, offerte avec les systèmes privatifs.
 +
 +
Pour valider l’installation, il faut utiliser un programme d’exemple. Nous allons utiliser le programme ''blink'' : Fichier =>Exemples =>base => Blink . Une nouvelle fenêtre s’ouvre avec le code.
 +
 +
Si tout est bien réglé, alors la compilation s’effectue, Quelques statistiques sont affichées, et la carte clignote fièrement.
 +
 +
 +
<nowiki>
 +
Le croquis utilise 13256 octets (1%) de l'espace de stockage de pr
 +
Le croquis utilise 13256 octets (1%) de l'espace de stockage de
 +
programmes. Le maximum est de 1048576 octets.
 +
 +
 +
Les variables globales utilisent 1008 octets (1%) de mémoire
 +
dynamique, ce qui laisse 97296 octets pour les variables locales.
 +
Le maximum est de 98304 octets.
 +
 +
 +
copying /tmp/arduino_.../Blink.ino.bin to /media/stud/DIS_L4IOT
 +
 +
</nowiki>
 +
 +
L’executable créé est rangé dans ''/tmp/arduino...ino.bin''. Il est possible de conserver ce fichier pour le remettre dans une autre carte ou à un autre moment. Il ne sera plus nécessaire de relancer l’environnement arduino.

Version actuelle en date du 19 décembre 2018 à 12:34

Cette page décrit la mise en service de la carte STM32 Nucleo Discovery IoT dans l'environnement de développement Arduino. Nous présenterons, dans une autre page, la programmation de la carte Discovery.

Note: L'installation est réalisée pour des raisons de facilité sur un système GNU-Linux Debian stable. Pour les autres versions de GNU-Linux, la méthode devrait être la même. Pour les systèmes privatifs, ce devrait être moins facile, mais analogue.

Il existe plusieurs environnements de développement pour les cartes STM32 Nucleo:

  • l'IDE Arduino;
  • la chaîne de cross compilation gcc;
  • l'IDE Eclipse;
  • l'environnement web MBED;

Nous présentons ici l'utilisation de l'IDE Arduino qui est la plus simple à utiliser et qui permet de nombreux développements.

Configuration de l'IDE Arduino

L'IDE (Environnement de Développement Intégré) Arduino permet de programmer les cartes Arduino, mais aussi beaucoup d'autres.

Pour le télécharger, il faut aller sur le site arduino: site Arduino. Ensuite, il faut aller dans

software puis download puis Download the Arduino IDE. N'hésitez pas à soutenir financièrement le projet. Téléchargez l'archive.

Vous obtenez un fichier arduino-1.8.x-linux64.tar.xz. Il faut décompresser et extraire les fichiers de l'archive. Ceux ci peuvent être (devraient être) mis dans la partie système pour ne pas polluer les fichiers utilisateur.

# cd /usr/loval 
# tar xf /.../arduino-1.8.7-linux64.tar.xz 
 

Ensuite, le plus simple consiste à créer un lien symbolique avec l'exécutable arduino.

# cd /usr/local/bin/
# ln -s /.../arduino-1.8.x/arduino
 

Ainsi, il est possible de lancer l'interface directement.


Ajouter le support pour la STM32 discovery

Le support des cartes autres qu'arduino est facultatif. Il faut donc ajouter le support. Pour cela, il faut aller dans Fichier / préférences , pour ajouter le support disponible à l' https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package stm index.json.

Ajout du support pour STM32.


Ensuite, il faut aller dans Outils / Type de carte / Gestionnaire de cartes, filtrez par STM32, et installez STM32 cores by ST

Chargement des libraires STM32.

Cette action prend quelques minutes. Ensuite, il faut indiquer le type de carte Outils Type de carte Discovery.


Sélection des cartes Discovery.

Puis choisir le Board spécifique:

Sélection du board Discovery IoT.


Première programmation

Il se pourrait qu’il y ait un bug. Le téléversement peut échouer avec un message indiquant qu’un fichier n’est pas trouvé. En regardant bien, il apparaît que c’est l’exécutable 32 bits qui est utilisé. Ce qui échoue sur une installation 64 bits.

...
java.io.IOException: Cannot run program
".../.arduino15/.../linux/massStorageCopy":
error=2, Aucun fichier ou dossier de ce type

Dans ce message d’erreur, linux fait référence à la version 32 bits, il y a le répertoire linux64 à côté. Le nom du programme utilisé, massStorageCopy, fait référence à un disque dur. Pour ajouter le support 32 bits, il faut ajouter l’architecture 32 bits et installer les librairies utiles en version 32 bits (i386).


dpkg --add-architecture i386
apt-get update
apt-get install libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386

L’autre élément qui peut être délicat, c’est que le téléversement pour arduino se fait par une connexion série. Pour les stm32, ceux ci apparaissent comme une clef usb. Il suffit de copier le fichier exécutable dans le répertoire et il est exécuté automatiquement. Le message d’erreur indique (mais pas de manière claire) que le répertoire n’est pas monté :


DIS_L4IOT not found. Please ensure the device is correctly connected
Une erreur est survenue lors du transfert du croquis

Les logs du système indiquent les différents éléments :


# ls /dev/ttyACM*
ls: impossible d'accéder à '/dev/ttyACM*': Aucun fichier ou dossier de ce type
# tail -f /var/log/syslog
*** /// Insertion de la carte Discovery /// ***
...
 usb 1-10: new full-speed USB device number 3 using xhci_hcd
 usb 1-10: New USB device found, idVendor=0483, idProduct=374b
 usb 1-10: New USB device strings: Mfr=1, Product=2, SerialNumber=3
 usb 1-10: Product: STM32 STLink
 usb 1-10: Manufacturer: STMicroelectronics
 usb 1-10: SerialNumber: 0676FF514852897267173117
 cdc_acm 1-10:1.2: ttyACM0: USB ACM device
 usbcore: registered new interface driver cdc_acm
 usb-storage 1-10:1.1: USB Mass Storage device detected
 scsi host4: usb-storage 1-10:1.1
 usbcore: registered new interface driver usb-storage
 usbcore: registered new interface driver uas
 scsi 4:0:0:0: Direct-Access MBED microcontroller 1.0 PQ: 0 ANSI: 2
 sd 4:0:0:0: Attached scsi generic sg2 type 0
 sd 4:0:0:0: [sdb] 2120 512-byte logical blocks: (1.09 MB/1.04 MiB)
 sd 4:0:0:0: [sdb] Write Protect is off
 sd 4:0:0:0: [sdb] Mode Sense: 03 00 00 00
 sd 4:0:0:0: [sdb] No Caching mode page found
 sd 4:0:0:0: [sdb] Assuming drive cache: write through
 sd 4:0:0:0: [sdb] Attached SCSI removable disk
...
# ls /dev/ttyACM*
/dev/ttyACM0

Nous voyons qu’avant de brancher la carte, il n’y a pas de périphérique /dev/ttyACM0. Après insertion, le log du système identifie le périphérique usb connecté. Il crée le connecteur série ttyACM0, qui sera utilisé pour communiquer avec la carte, et le périphérique /dev/sdb qui représente le “disque dur” constitué par la carte (pour être rigoureux, c’est un mass storage.

Selon la configuration, ce mass storage peut se monter automatiquement (mauvaise idée) ou manuellement. Il faut donc le monter, par exemple en activant l’icône.

L’automontage de périphérique et pire encore l’exécution automatique, voire l’installation automatique permet de faciliter l’introduction des virus. C’est une fonctionnalité payante, offerte avec les systèmes privatifs.

Pour valider l’installation, il faut utiliser un programme d’exemple. Nous allons utiliser le programme blink : Fichier =>Exemples =>base => Blink . Une nouvelle fenêtre s’ouvre avec le code.

Si tout est bien réglé, alors la compilation s’effectue, Quelques statistiques sont affichées, et la carte clignote fièrement.


Le croquis utilise 13256 octets (1%) de l'espace de stockage de pr
Le croquis utilise 13256 octets (1%) de l'espace de stockage de
programmes. Le maximum est de 1048576 octets.


Les variables globales utilisent 1008 octets (1%) de mémoire
dynamique, ce qui laisse 97296 octets pour les variables locales.
Le maximum est de 98304 octets.


copying /tmp/arduino_.../Blink.ino.bin to /media/stud/DIS_L4IOT


L’executable créé est rangé dans /tmp/arduino...ino.bin. Il est possible de conserver ce fichier pour le remettre dans une autre carte ou à un autre moment. Il ne sera plus nécessaire de relancer l’environnement arduino.