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
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épondreSupprimerLe 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.
SupprimerLa commande sera légèrement différente :
Supprimerstm8flash -c stlinkv2 -p stm8s103f3 -s opt -w optdefault.bin
Elle doit être entrée dans un terminal (ligne de commande) autrement dit CMD.EXE
J'ai modifié l'article pour donner plus d'informations pour les utilisateurs WINDOWS.
SupprimerBonjour. 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épondreSupprimerIl faut ajouter un convertisseur USB / série.
SupprimerLe raccordement est facile à trouver :
https://circuitdigest.com/microcontroller-projects/serial-monitor-on-stm8s-using-cosmic-and-stvd