lundi 22 février 2021

STM8S : Premier Contact

 

STM8S : Premier Contact

 

Aujourd'hui nous allons essayer de programmer un petit microcontrôleur 8 bits : le STM8S de chez ST Microelectronics.

Pour cela j'ai investi dans une petite carte équipée d'un STM8S105K4T6 :

  • fréquence d'horloge : 16MHz
  • mémoire FLASH : 16 Kbytes
  • mémoire RAM : 2 Kbytes
  • mémoire EEPROM : 1 Kbyte
  • communication : UART, I2C, SPI
  • ADC : 10 bits 
  • 30 broches, mais plus large qu'une carte ARDUINO NANO

Pour de petits projets d'autres cartes existent :

STM8S103F3P6

  • fréquence d'horloge : 16MHz
  • mémoire FLASH : 8 Kbytes
  • mémoire RAM : 1 Kbyte
  • mémoire EEPROM : 640 bytes
  • communication : UART, I2C, SPI
  • ADC : 10 bits 
  • 20 broches, même largeur qu'une carte ARDUINO PRO MINI, et plus courte

Il est à noter que ces cartes sont moins chères qu'une carte ARDUINO PRO MINI, spécialement la STM8S103K3T6 : 0.68€.

La quantité de mémoire FLASH est moins importante que sur un ATMEGA328P (32 Kbytes), ce qui n'est pas un handicap pour la majeure partie des projets.

La carte officielle ST (STM8S Discovery) à base de STM8S105C6T6 a une quantité de FLASH de 32Kbytes, comme un ARDUINO, mais son prix est largement supérieur.

Ces cartes peuvent être alimentées entre 2.95V et 5.5V.

Elles possèdent un port µUSB mais apparemment ce connecteur ne peut servir qu'à l'alimentation de la carte. Il faudra donc ajouter un convertisseur USB / série pour bénéficier du terminal (moniteur série), comme sur une carte ARDUINO PRO MINI.

Les cartes STM8S ont une consommation de 10µA en veille. Il existe une série STM8L, ayant des performances plus intéressantes : 0.35 µA en veille ! Je n'ai pas connaissance de cartes STM8L accessibles au grand public. Cela viendra.

1. Le matériel

Pour programmer un STM8S, il est indispensable de se procurer un programmateur STLINK-V2, que l'on trouve pour moins de 2€ sur AliExpress :

4 fils suffisent pour programmer la carte :

  • 3.3V
  • GND
  • RST
  • SWIM

Ces 4 broches sont situées en bout de carte.

2. L'IDE ARDUINO

Nous allons utiliser une librairie core nommée SDUINO :

https://tenbaht.github.io/sduino/

Comme dit sur la page d’accueil, il faut d'abord ajouter la ligne suivante à notre liste de cartes supplémentaires :

https://github.com/tenbaht/sduino/raw/master/package_sduino_stm8_index.json

Pour cela il faut ouvrir la boîte de dialogue préférences : menu "Fichier / Préférences", et ajouter l'URL à la ligne "URL Gestionnaire de cartes supplémentaires". Si cette ligne n'est pas vide, utiliser une virgule comme séparateur :

https://dl.espressif.com/dl/package_esp32_index.json,http://arduino.esp8266.com/stable/package_esp8266com_index.json,https://downloads.arduino.cc/packages/package_avr_3.6.0_index.json,https://github.com/tenbaht/sduino/raw/master/package_sduino_stm8_index.json

Ensuite, ouvrir le gestionnaire de cartes : menu "Outils / Type de carte / Gestionnaire de cartes.

Rechercher sduino, choisir une version, et cliquer sur installer.

Personnellement j'ai installé la version 0.4.0 

Les cartes supportées sont les suivantes :

STM8S103F3P6


STM8S Discovery (la carte officielle ST)

STM8S105K4T6

SDUINO UNO

La librairie STM32DUINO possède elle aussi un support STM8, mais uniquement pour les cartes STM8 officielles :

STM8S208RB Nucleo

Le format de ces cartes (UNO) me parait inadapté à la réalisation de projets de dimensions raisonnables.

3. Premier sketch

Après avoir chargé le sketch exemple Blink (menu Fichier / Exemples / 01.Basics / Blink), il suffit de cliquer sur l'icône téléverser :

Le croquis utilise 2622 octets (16%) de l'espace de stockage de programmes. Le maximum est de 16384 octets.
Les variables globales utilisent 70 octets (3%) de mémoire dynamique, ce qui laisse 1978 octets pour les variables locales. Le maximum est de 2048 octets.
/home/riton/.arduino15/packages/sduino/tools/STM8Tools/2018.12.07/linux/stm8flash -cstlinkv2 -pstm8s105?4 -s flash -w /tmp/arduino_build_582971/Blink.ino.hex
Determine FLASH area
Due to its file extension (or lack thereof), "/tmp/arduino_build_582971/Blink.ino.hex" is considered as INTEL HEX format!
2757 bytes at 0x8000... OK
Bytes written: 2757

La LED bleue de la carte clignote.

On peut modifier les temps pour accélérer le clignotement :

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(100);                       // wait for 100ms
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(100);                       // wait for 100ms
}

4. Débloquer la FLASH

Vu sa taille réduite la petite carte bleue STM8S103F3P6 est celle qui m'intéresse le plus. Par contre elle refuse toute programmation et l'IDE affiche un message "Tries exceeded". Après quelques recherches, j'ai trouvé ceci : il faut débloquer la mémoire FLASH.

Télécharger ce petit fichier :

https://github.com/vdudouyt/stm8flash/files/372158/optdefault.bin.txt

Ensuite il faut le charger sur la carte avec stm8flash.

Les chemins cités ci-après peuvent changer en fonction des versions, en particulier la date 2018.12.07.

4.1. Sous Linux

Retirer l'extension .txt et le déplacer dans le répertoire .arduino15/packages/sduino/tools/STM8Tools/2018.12.07/linux, où se trouve l'utilitaire stm8flash.

Ensuite entrer les commandes suivantes dans un terminal :

cd .arduino15/packages/sduino/tools/STM8Tools/2018.12.07/linux
./stm8flash -c stlinkv2 -p stm8s103f3 -s opt -w optdefault.bin

4.2. Sous Windows

Sous Windows ce répertoire sera situé ici :

C:\Users\username\AppData\Local\Arduino15

Retirer l'extension .txt et le déplacer dans le répertoire C:\Users\username\AppData\Local\Arduino15\packages\sduino\tools\STM8Tools\2018.12.07\win, où se trouve l'utilitaire stm8flash.exe

Comme les utilisateurs Windows ont peu l'habitude de la ligne de commande, pour ouvrir un terminal sous Windows, cliquer sur le menu Démarrer et choisissez “Exécuter”. Tapez ensuite le texte cmd :

Ensuite entrer les commandes suivantes dans un terminal :

cd C:\Users\username\AppData\Local\Arduino15\packages\sduino\tools\STM8Tools\2018.12.07\win
stm8flash -c stlinkv2 -p stm8s103f3 -s opt -w optdefault.bin

4.3. Sur Mac

Sur Mac : 

Sur Mac ce répertoire sera situé ici :

/Users/username/Library/Arduino15

Le mode opératoire ressemble à celui de Linux.

4.4. Le résultat

Determine OPT area
Due to its file extension (or lack thereof), "optdefault.bin" is considered as RAW BINARY format!
64 bytes at 0x4800... OK
Bytes written: 64

Ensuite le sketch Blink se téléverse sans problème.

5. Librairies

Un certain nombre de librairies sont livrées avec le package SDUINO :

  • EEPROM
  • I2C
  • LCD_BTHQ21605V
  • LiquidCrystal
  • LiquidCrystal_I2C
  • LiquidCrystal_pcf2119
  • Mini_SSD1306
  • PCD8544
  • Servo
  • Stepper
  • Wire

6. Conclusion

Voici de petits microcontrôleurs bien sympathiques au premier abord. Bien entendu ce n'est qu'un premier contact, il va falloir leur consacrer un peu de temps pour explorer plus en profondeur.


Cordialement

Henri


6 commentaires:

  1. Bonjour. Merci pour vos explications. Je bute sur un problème: le chemin pour mettre le fichier ...optdefault.bin et bien celui-ci: C:\Users\username\AppData\Local\Arduino15 et ensuite où entrer la commande suivante?: ./stm8flash -c stlinkv2 -p stm8s103f3 -s opt -w optdefault.bin Merci pour votre réponse. mr bricolage

    RépondreSupprimer
    Réponses
    1. Le plus simple est de le placer dans le même répertoire que l'utilitaire stm8flash.exe et d'exécuter stm8flash.exe depuis ce même répertoire.

      Supprimer
    2. La commande sera légèrement différente :
      stm8flash -c stlinkv2 -p stm8s103f3 -s opt -w optdefault.bin
      Elle doit être entrée dans un terminal (ligne de commande) autrement dit CMD.EXE

      Supprimer
    3. J'ai modifié l'article pour donner plus d'informations pour les utilisateurs WINDOWS.

      Supprimer
  2. Bonjour. Merci pour les explications, après quelques galères j'ai réussi à le faire fonctionner. Avez-vous une astuce pour faire fonctionner le monitor dans l'ide Arduino, sachant que le st-link v2 n’émet pas de port com. Mr bricolage

    RépondreSupprimer
    Réponses
    1. Il faut ajouter un convertisseur USB / série.
      Le raccordement est facile à trouver :
      https://circuitdigest.com/microcontroller-projects/serial-monitor-on-stm8s-using-cosmic-and-stvd

      Supprimer