samedi 25 août 2018

blue pill, programmation avec Arduino IDE

Dans cet article j'explique comment installer ArduinoIDE sur Ubuntu et comment le configurer pour l'utilisation avec la carte blue pill.

Arduio a fait ses début avec des cartes de développement basé sur des µC Atmel AVR mais ajourd'hui le support pour d'autre µC a été ajouté entre autre pour les µC à coeur ARM Cortex M. La carte blue pill utilise un µC stm32f103c8t6 avec un CPU Cortex M3.

Les références utilisées pour l'écriture de cet article sont les suivantes:

Installation de ArduinoIDE

  1. Téléchargez la version d'ArduinoIDE qui convient à votre système. Mon Système est en Ubuntu 16.04 64 bits.
  2. Il s'agit d'une archive TAR zippée. On la place dans le dossier où on veut installer le programme. Par exemple
    
    mkdir ~/ArduinoIDE
    tar -xzf arduino-1.8.5-linux64.tar.xz
    
    Il y a maintenant un dossier ~/ArduinoIDE/arduino-1.8.5
  3. Allez dans le dossier ~/ArduinoIDE/arduino-1.8.5. Il faut rendre le fichier install.sh exécutable
    
    chmod +x intall.sh
    
  4. Exécutez le programme d'installation qui va créer un raccourci sur votre bureau.
    
    ./install.sh
    
  5. S'il y a une erreur au démarrage de l'IDE, examinez le contenu dans un éditeur de texte.
    
    gedit ~/Bureau/arduino-arduinoide.desktop
    
    Mon raccourci ne fonctionnais pas car il y avait un espace dans le chemin de l'exécutable. Pour corriger j'ai simplement mis le chemin au complet entre guillemets comme on le voie dans la capture d'écran.
  6. Une fois l'IDE démarré on ajoute l'URL qui va permettre à l'IDE de télécharger les librairies de STM32duino.
    Allez dans le menu Fichier - Préférences ajoutez http://dan.drown.org/stm32duino/package_STM32duino_index.json dans le champ URL de gestionnaire de cartes supplémentaires et refermez la fenêtre.
  7. Allez dans le menu Outils - Type de carte - gestionnaire de carte. Il faut sélectionner la dernière version de STM32F1xx/GD32F1xx
    Après avoir fait l'installation revenez sélectionné le même item dans la liste et cliquez sur le bouton mise à jour pour être certain d'avoir la dernière version installlée.

Installation du boot loader

En réalité le boot loader n'est pas nécessaire car l'environnement ArduinoIDE permet de programmer la carte en utilisant le programmeur stlink/v2. Je vais quand d'écrire l'installation du boot loader.

  1. Clonez le dépôt https://github.com/rogerclarkmelbourne/STM32duino-bootloader sur votre ordinateur
    
    cd ~/Téléchargements
    git clone https://github.com/rogerclarkmelbourne/STM32duino-bootloader
    
    Il y a un dossier binaries dans le dépôt où se trouve plusieurs fichiers .bin
    
    cd ~/Téléchargements/STM32duino-bootloader/binaries
    
    J'ai installé le fichier generic_boot20_pc13.bin car sur la carte blue pill que j'ai la LED verte est branchée à PC13.
  2. Pour programmer le boot loader il faut mettre le cavalier boot0 sur la carte blue pill à la position 1. La commande à exécuter est la suivante.
    
    st-flash --reset write generic_boot20_pc13.bin 0x8000000
    
    S'il n'y a pas d'erreur remettez le cavalier boot0 à sa position initiale et pesez sur le bouton reset de la carte. Au démarrage la LED verte clignote rapidement puis lentement 5 fois.
  3. Il faut maintenant débrancher le programmeur stlink/v2, remettre le cavalier boot0 à la position 0 et brancher la carte au PC avec un cable USB. Un périphérique ttyACM0 devrait maintenant être visible dans le dossier /dev.

Premier projet

  1. Lancez ArduinoIDE Il faut maintenant sélectionner le type de carte, la variante ainsi que le méthode de téléversement (i.e. Upload method)
    • Type de carte: Generic STM32F103 series
    • Variant: STM32F103C8 (20K RAM, 64K Flash)
    • Upload Method: STM32duino bootloader
  2. Comme premier projet nous allons sélectionner dans Fichier - exemples - A_STM32_Examples - digital - Blink
    Puisque sur ma carte la LED verte est sur PC13 J'ai du modifié l'exemple en remplaçant PB1 par PC13
  3. Dans la barre d'outils d'ArduinoIDE cliquez sur le bouton crochet pour compiler le programme. Les messages s'affiche en bas dans la fenêtre en noir.
  4. Si le programme a compiler correctement pressez le bouton reset de la carte blue pill et dans la barre d'outils cliquez sur la flèche téléverser pour programmer la carte.
Problème sur mon ordinateur ça ne fonctionne pas. Voici le message d'erreur qui apparaît dans la fenêtre du bas d'ArduinoIDE.

Failed to open serial device.
No DFU capable USB device found
Et la commande dmesg rapporte l'erreur suivante:

[ 7356.893978] cdc_acm 2-1.7:1.0: ttyACM0: USB ACM device
[ 7363.474986] usb 2-1.7: USB disconnect, device number 21
[ 7363.477217] cdc_acm 2-1.7:1.0: failed to set dtr/rts
Mes recherche m'ont conduit à ceci et à celà. Il semblerais donc que d'utiliser ce bootloader ne fonctionne pas! J'en arrive donc à la deuxième méthode qui fonctionne très bien.

Utiliser le programmeur STLINK/V2 avec ArduinoIDE

D'abord je désinstalle le bootloader en mettant le cavalier boot0 à 1 en en rebranchant le programmeur.


st-flash erase
Ensuite:
  1. Débranchez le fil 3v3 du programmeur côté de la carte blue pill
  2. Remettez le cavalier boot0 à 0.
  3. Brancher le cable USB à l'autre bout de la carte et au PC. Maintenant la carte est alimentée par le cable USB.
  4. Dans le menu Outils - Upload Method: sélectionnez STLINK
  5. Cliquez pour téléverser Blink à nouveau. Bingo ça fonctionne!

Donc maintenant on utilise STLINK/V2 pour programmer la carte blue pill et le cable USB lui sert simple à communiquer avec le Terminal sériel disponible dans Outils - Moniteur série.

L'exemple Fichier - exemples - A_STM32_Examples - General - InternalTempSensor fait la lecture de la sonde de température et envoie des informations au Moniteur Serie. Encore une fois j'ai du adapter cet exemple à la carte blue pill

Voici une capture d'écran du Moniteur série. Le moniteur série doit-être configuré à 115200 BAUD.


retour à blue pill (introduction)

mardi 21 août 2018

blue pill (introduction)

Il y a 1 peu plus d'un an j'ai découvert l'existence d'une carte de développement très économique basée sur un µC STM32F103C8T6. Il s'agit d'un µC 32 bits Cortex M3. Suite à la lecture de l'article suivant sur hackaday, j'en ai commander 5 sur ebay.ca. Cette carte a étée bâptisée blue pill.

Cet article est le premier d'une série sur la programmation de la blue pill en utilisant différents outils.

  • Programmation en utilisant Arduino IDE.
  • Programmation en C en utilisant les outils GNU arm-none-eabi.
  • Programmation en utilisant MECRISP Forth.
  • Programmation en utilisant la plateforme WEB mbed.
  • J'ai créé un dépôt sur github pour cet série d'articles.

Pré-requis

Je travaille sous Ubuntu 16.04 LTS les descriptions que je vais faire sont donc pour cette plateforme. Ça devrait aussi être valide pour une autre distribution Linux basé sur Debian-Linux.

Dans cette première partie je vais décrire comment installer les outils de développement qui seront nécessaires pour les prochains articles.

Blue pill

Voici la schématique de la carte blue pill

Sur les cartes que j'ai en main la résistance R10 a une valeur de 10k au lieu des 4k7 montré sur cette schématique. Ce sera à prendre en considération lorsque viendra le temps d'utiliser cette carte avec Ardruino IDE.

Discription des broches

STM32F103C8T6

Voici les principales caractéristiques du µC qui est installé sur cette carte.

  • Coeur ARM Cortex M3, Fsys maximale 72Mhz.
  • Mémoire flash 64Ko
  • Mémoire RAM 20Ko
  • 3 timers usage général et 1 avancé.
  • 2 SPI
  • 2 I2C
  • 3 USART
  • 1 USB
  • 1 CAN
  • 37 GPIO
  • 2 ADC 10 canaux résolution 12 bits
  • datasheet

STLINK-V2

Pour programmer la carte il faut un programmeur STLINK-V2. Heureusement un clone de ce programmeur est aussi disponible sur ebay.ca à petit prix.

Installation des outils logiciels.

Pour les étapes d'installation logicielle vous devez être membre du groupe sudo car des privilèges root sont requis pour certaines étapes.

utilitaire ST-LINK

Les utilitaires ST-LINK sont disponibles en open-source sur https://github.com/texane/stlink.
Étapes à suivre à partir de la ligne de commande i.e. sous Ubuntu on fait <CTRL>-<ALT>-T pour ouvrir la console de comamdes.

  1. Installer les outils de développement gcc et binutils.
    sudo apt install gcc binutils
  2. Installer l'utilitaire cmake.
    sudo apt install cmake
  3. Installer libusb-dev
    sudo apt install libusb-dev
  4. Cloner le dépôt https://github.com/texane/stlink.
    J'ai créé un dossier ~/Documents/blue pill dans lequel j'ai cloné le dépôt:
    git clone https://github.com/texane/stlink
  5. Lancer cmake à partir du dossier stlink pour créer les fichiers de configurations utilisés par make. N'oubliez pas le point après cmake pour indiquer à cmake qu'il travaille à partir du répertoire courant.
    cmake .
  6. Lancer make
    make
  7. Lancer make install. Utilisez sudo car les privilèges root sont requis.
    sudo make install.
    Les utilitaires sont installés dans /usr/local
  8. Modifier /etc/ld.so.conf pour indiquer le chemin des librairies utilisées par st-link. Utilisez votre éditeur de texte préféré et ajouter à la fin du fichier /etc/ld.so.conf la ligne /usr/local/lib et sauvegarder. sudo est requis.
    sudo gedit /etc/ld.so.conf
    cat /etc/ld.so.conf
    include /etc/ld.so.conf.d/*.conf
    /usr/local/lib
    On recharge la configuration avec la commande.
    $ sudo ldconfig
  9. Maintenant branchez le programmeur ST LINK v2 dans un port USB. Faites la commande
    $ lsusb
    Bus 002 Device 007: ID 0483:3748 STMicroelectronics ST-LINK/V2
    Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 004: ID 0461:0010 Primax Electronics, Ltd HP PR1101U / Primax PMX-KPR1101U Keyboard
    Bus 001 Device 003: ID 0000:0538
    Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Assurez-vous que votre système a bien détecter le programmeur identifié par STMicroelectronics ST-LINK/V2

Branchement de la carte blue pill

Le programmeur viens avec un petit cable à 4 fils. Les connections sont bien identifiées sur le programmeur et sur le connecteur à 4 broches qui dépassent au bout de la carte blue pill.

broche programmeurbroche carte
GND (4)GND
3v3 (8)3v3
SWCLK (6)SWCLK
SWDIO (2)SWIO

Maintenant on va essayer l'utilitaire st-info avec l'option --probe qui devrait nous afficher les informations sur le programmeur et la µC qui y est branché.

$ st-info --probe
Found 1 stlink programmers
serial: 483f6e066772574857351967
openocd: "\x48\x3f\x6e\x06\x67\x72\x57\x48\x57\x35\x19\x67"
flash: 65536 (pagesize: 1024)
sram: 20480
chipid: 0x0410
descr: F1 Medium-density device
$
On obtient les informations sur le µC branché au programmeur c'est bon signe, on devrait pouvoir le programmer en utilisant st-flash

Nous avons donc complété la première étape de cette série d'articles dans le prochain article nous allons voir comment programmer la blue pill à partir de l'environnement Arduino IDE.

blue pill, programmation avec mbed

mbed.com est une plateforme de développement en ligne pour les µC à base de CPU Cortex-M. Dans cet article j'explique comment utiliser cette plateforme pour programmer la carte blue pill. L'utilisation de cette plateforme est gratuite mais il faut s'enregistrer en créant un compte.

Configuration

  1. Créer un compte.
  2. Lorsque votre session est ouverte cliquez sur le bouton compiler
  3. Dans la fenêtre de L'IDE en haut à droite il y a un texte qui indique la plateforme sélectionnée pour le projet en cours. Il faut cliquez sur ce nom pour ouvrir la fenêtre qui permet de sélectionner la carte désirée.
  4. Dans cette fenêtre cliquez sur add board. Un nouvel onglet va s'ouvrir dans votre navigateur. Avec la liste de toutes les cartes disponibles. La carte blue pill ne fait pas parti du lot mais on va choisir la carte qui si rapproche le plus. Dans la liste Target vendor cochez STMicroelectronics. Dans la liste des cartes cliquez sur NUCLEO_F103RB
  5. Sur cette page en défilant vers le bas vous verrez à droite un bouton add to your Mbed Compiler sur lequel vous devez cliquez pour ajouter cette carte à votre environnement de développement. C'est tout ce qu'il y a à faire. Notez que la carte NUCLEO-F130RB utilise un µC différent de la carte blue pill. Il s'agit du stm32f103RBT6. Les différences sont
    • Emballage LQFP64 au lieu de LQFP48
    • 128Ko de flash au lieu de 64Ko
    • 51 E/S au lieu de 37
    • 16 canaux ADC au lieu de 10

Importer des programmes et librairies

Il y a sur le site de mbed de nombreux programmes et librairies qui sont déjà configurés pour la carte blue pill ou pour le µC STM32F103C8T6.

  1. Cliquez sur le bouton import
  2. Sélectionnez l'onglet programs dans la nouvelle vue.
  3. Dans la fenêtre search entrez blue pill et cliquez le bouton search. Voici la liste que j'obtiens
    Encore mieux si je fais une recherche sur le nom du µC STM32F103C8T6.
    18 pages!
  4. Dans la liste obtenue avec search blue pill j'ai sélectionné STM32F103C8T6_Hello pour l'importer.
  5. Dans la fenêtre import program cliquez sur le bouton import.

Cliquez sur Compile. Lorsque la compilation est terminée la fenêtre de sauvegarde s'ouvre pour vous permettre de sauvegarder le fichier binaire sur votre ordinateur.


st-flash write STM32F103C8T6_Hello.bin 0x8000000
Et ça fonctionne du premier coup.


retour à l'introduction