STM32 DUINO

Pour ceux qui ont envie de se lancer dans l'aventure STM32 à moindre frais, voici un petit tutoriel.
La carte STM32F103C8 "blue pills" peut se trouver facilement sur AliExpress ou EBay et permet pour un prix modique de développer des applications sur un processeur bien plus performant que nos ATMEGA328P, tout en restant dans le monde ARDUINO.

Bonnes bidouilles
@+

Salut

Comme il est dit dans le tuto :
Large gamme de tension d'utilisation de 2V à 3.6V, pas simplement 3.3V.

Les sorties PC13 à PC15 sont effectivement limitées en courant :

The GPIOs (general-purpose inputs/outputs) can sink or source up to ±8 mA, and sink or source up to ±20 mA (with a relaxed VOL /VOH) except PC13, PC14 and PC15 which can sink or source up to +/-3mA.

La carte peut être alimentée en 5V par la broche 3 ou l'USB. Elle embarque un régulateur 3.3V pour alimenter le processeur.
Elle peut être alimentée entre 2V et 3.6V par la broche 1.

J'ai ajouté le lien sur la datasheet du processeur en bas de page.

La table 5 (Table 5. Medium-density STM32F103xx pin definitions) décrit les IOs du processeur. Les pins marquées FT sont tolérantes au 5V. Attention, ne considérer que les pins correspondant au boîtier LQFP48.
Comme il est dit dans le tuto :
La carte "Blue Pills" vous permet d'exploiter 32 ports sur les 37 disponibles.
Reportez-vous au schéma (lien en bas de page).

@+

La vérité est que
50% des entrées/sorties sont 5V tolérantes ce qu'aucun micro Atmel ne fait, ni d'autre fondeurs. C'est peut-être un brevet ST.
On trouve au moins UN accès série, un accès I2C, un accès SPI 5V tolérant ce qui est loin d'être négligeable.
Si on compare avec le modèle de micro équivalent utilisé dans la DUE (pour combien de temps encore avant que la carte soit abandonnée?) par arduino, la DUE a un max d' E/S limitées à seulement 5 mA.

De toute façon je ne changerais jamais d'avis : il faut séparer l'intelligence (le micro) de l'interface de puissance.
Le cas des avr est très particulier, et même avec ses "grosses" capacités à fournir du courant il suffit de regarder la datasheet pour voir qu'avec un courant de 20 mA on perd (de mémoire, à vérifier) 0,5 à 0,6 V dans les Rdson des transistors de sortie.

Il en est bien évidement de même avec tous les micro-controleur y compris avec les STM32 il suffit de lire leur datasheet qui indique la perte de tension pour un courant de 20 mA.
Ne pas oublier que tous les ARM sont gravés plus fin qu'un avr donc ils ont de plus petits transistors de sortie, même si on "pourrait" me rétorquer que les transistors de sortie sont "grossis" par rapport aux transistors internes.
Ce qui confirme ma conception de la séparation intelligence/puissance.

Un avantage des STM32 qui a été oublié , dans stmduino et je pense aussi mbed, c'est que l'on peut choisir 3 bandes passantes pour les transistors de sortie.
Casser la bande passante quand on n'en a pas besoin simplifie et sécurise énormément les câblages avec des micros à 72 MHz d'horloge, et même beaucoup plus avec certains STM32.
Je pense, cela reste à vérifier, que stmduino et mbed sélectionnent la bande passante la plus faible par mesure conservatrice.
Ce qui limite "bêtement" l'utilisation de ces micros.

Cette carte fonctionne parfaitement bien sous 2.4V. Deux batteries NI-MH suffisent.

Pendant le développement j'utilise un convertisseur USB / série pour le chargement du code, comme indiqué dans le tuto. Le port USB n'est jamais utilisé.

Il n'y a pas de contre indication à appliquer sur la sortie d'un régulateur une tension inférieure à sa tension de sortie
théorique à partir du moment où son entrée n'est pas alimentée.

Le seul inconvénient est que cette sortie consomme qq dizaines de µA et qu'il est préférable de couper la patte de sortie du régulateur si l'on désire travailler en low-power. Dans ce cas il est évidemment conseillé de supprimer la LED D1.

Cette opération peut être pratiquée aussi sur une ARDUINO PRO MINI.

Quelqu'un a t-il déjà essayé cette carte ?

Pour ceux qui sont intéressés je joins la feuille d'affectation des broches que je me suis fait.
Concernant les sous fonctions elle n'est pas complète : c'est un compromis personnel entre la lisibilité et l'exhaustivité.
Comme d'habitude rien ne remplace la lecture de la datasheet.

Vous pourrez y trouver les sorties qui sont 5V tolérantes.

Plan de brochage a completer.pdf (22.6 KB)

Pour des tensions inférieures, la consommation du régulateur reste limitée à une centaine de microampères. Il faut considérer le type d'application pour voir si cela reste acceptable.

A titre de comparaison j'avais relevé 75µA sur une ARDUINO PRO MINI dans les mêmes conditions.

À ceci près que les cartes Arduino Pro Mini officielles (conçues par Sparkfun) présentent un strap prévu à cet effet, de sorte qu'il n'est pas nécessaire de d'intervenir au niveau du régulateur et de la led ON ou de sa résistance pour réduire la consommation.

C'est exactement ce qui est indiqué sur mon blog (voir lien précédent : ARDUINO PRO MINI).


68tjs, tu as donc déjà utilisé ces cartes ?
As-tu déjà tenté le NRF24L01 ?

@+

Alors j'annonce de suite : la radio et moi cela n'a jamais collé, c'est dans les gênes, désolé ce n'est pas à mon age que cela va changer.

Un petit effort, je m'y suis mis à soixante balais. Il n'est jamais trop tard.
Une petite remarque toutefois, j'arrêterai la radio quand cela créera des perturbations dans mon futur sonotone.

:confused:

@+

Je comprends parfaitement l'argumentation.
J'en connais qui ont été jusqu'à poser dans leur maison des gaines électriques anti rayonnement électrique et électromagnétique. Ils se méfient même du 50Hz.

@+

Salut à tous

Je pense sincèrement que ces échanges hostiles devraient faire l'objet d'un topic à part, ou bien se faire par MP.
Vous m'avez complètement pourri mon tuto.

Cordialement
Henri
@+

Tu as raison, pour ma part j'ai effacé tout ce qui n'est pas strictement technique.

Excellent.
Merci pour cette réaction. Je n'en attendais pas moins de vous.

@+

Salut à tous

Constatant les progrès énormes réalisés par l'équipe STM32DUINO j'ai ajouté par mal de renseignements dans mon tuto à propos du support des cartes ST Microelectronics, NUCLEO, DISCOVERY, que je connais bien :

Un STM32 c'est bien mais que peut-on bien faire avec ?


TFT ST7735 1.8"


TFT ILI9341 2.8"

Sur une F401RE, sans aucune difficulté, avec les librairies ARDUINO bien sûr :

Remarque : la librairie UTFT refuse ce genre de processeur.

STM32DUINO : il y a des options d'optimisation dans le menu Outils / Optimize, dont une attire mon attention, je dirais même "me titille" :

Debug (-g)

Pourquoi ne pas essayer ?

Compilation puis chargement : OK

Lancement du serveur gdb :

riton@alpha:/mnt/sdc1/riton$ st-util
2019-03-27T22:48:51 INFO src/stlink-common.c: Loading device parameters....
2019-03-27T22:48:51 INFO src/stlink-common.c: Device connected is: F4 device (Dynamic Efficency), id 0x10006433
2019-03-27T22:48:51 INFO src/stlink-common.c: SRAM size: 0x18000 bytes (96 KiB), Flash: 0x80000 bytes (512 KiB) in pages of 16384 bytes
2019-03-27T22:48:51 INFO gdbserver/gdb-server.c: Chip ID is 00000433, Core ID is  2ba01477.
2019-03-27T22:48:51 INFO gdbserver/gdb-server.c: Target voltage is 3270 mV.
2019-03-27T22:48:51 INFO gdbserver/gdb-server.c: Listening at *:4242...

Lancement du debugger :

riton@alpha:~/arduino-1.8.5/examples/02.Digital/BlinkWithoutDelay$ ~/.arduino15/packages/STM32/tools/arm-none-eabi-gcc/6-2017-q2-update/bin/arm-none-eabi-gdb /tmp/arduino_build_30137/BlinkWithoutDelay.ino.elf
...
Reading symbols from /tmp/arduino_build_30137/BlinkWithoutDelay.ino.elf...done.
(gdb) target extended-remote :4242 // connexion au serveur gdb
Remote debugging using :4242
0x08000620 in Reset_Handler ()
(gdb) c // on continue
Continuing.
^C // on arrête
Program received signal SIGTRAP, Trace/breakpoint trap.
0x08000534 in loop () at /mnt/sdc1/riton/arduino-1.8.5/examples/02.Digital/BlinkWithoutDelay/BlinkWithoutDelay.ino:57
57 if (currentMillis - previousMillis >= interval) {
(gdb) p currentMillis // affiche la variable currentMillis
$1 = 10288
(gdb) n // un petit pas en avant
main () at /home/riton/.arduino15/packages/STM32/hardware/stm32/1.5.0/cores/arduino/main.cpp:65
65 if (serialEventRun) serialEventRun(); // on est sorti de la loop()
(gdb) b BlinkWithoutDelay.ino:55 // on place un petit point d'arrêt ?
Breakpoint 1 at 0x800052e: file /mnt/sdc1/riton/arduino-1.8.5/examples/02.Digital/BlinkWithoutDelay/BlinkWithoutDelay.ino, line 55.
(gdb) c // on continue
Continuing.

Breakpoint 1, loop () at /mnt/sdc1/riton/arduino-1.8.5/examples/02.Digital/BlinkWithoutDelay/BlinkWithoutDelay.ino:55
55 unsigned long currentMillis = millis(); // point d'arrêt atteint
(gdb)

Ça marche. Top cool 8)

Bien sûr avec une interface graphique se serait plus sympa, et ça existe : Eclipse ou PlatformIO.

Un debugger, c'est ce qui me manque le plus sur ARDUINO

Là clairement tu a touché dans le mile sauf que je n'ai toujours rien compris à l'utilisation de gdb, openocd, etc..... ni ce qu'on peut faire avec.

Un tuto simple pour "ignares" en débogage serait fortement apprécié.

Edit :
ce bus est aussi présent sur les cartes Due, Zero et Mkr même s'il est confidentiel : sur les photos on voit que le circuit imprimé n'est pas équipé de connecteur.
Le débogage des micro ARM Atmel devrait aussi être possible.

Dans le cas du STM32 c'est très simple. OpenOCD est inutile.
Il suffit de lancer Le serveur gdb st-util. Il tourne en arrière plan et attend sur une socket (port tcp 4242).

Ensuite sous gdb il y a une petite commande pour se connecter dessus :

target extended-remote :4242

Un tuto simple pour "ignares" en débogage serait fortement apprécié.

Pourquoi pas mais il faudrait que je le fasse avec une interface graphique.

merci pour le commentaire

Un tuto simple pour "ignares" en débogage serait fortement apprécié.

BON. A la demande générale (surtout 68tjs) je m'y suis collé.

Un tuto simple ?

Pas vraiment ... mais c'est fait.

Des restes de mon ancien métier, simplement pour que vous sachiez qu'il n'y a pas qu'ARDUINO dans la vie.

Mais cela reste de l'ARDUINO quand même puisqu'il s'agit de STM32DUINO.

Un debugger peut aider pas mal à déverminer une application et surtout extraire certaines bestioles indésirables : les bugs !

Et une photo de la belle qui m'a aidé dans cette tâche :

Elle a des connecteurs ARDUINO UNO vous avez remarqué ?

100% compatible, mais une fréquence d'horloge différente d'un ARDUINO : 84MHz !
Ça décoiffe :smiling_imp:

J'ai fait avec la même carte des essais d'ADC, PCF8574, MAX7219, TFT, DS3231, et ce n'est pas fini.

@+ et bonne bidouilles.

Chapeau bas.

Maintenant que Buster (Debian testing) est passée à l'état "Frozen" je vais l'installer et ensuite promis j'essaye.

Encore une question : le boîtier "STmicro" permet-il de faire plus que ce que tu appelle le clone chinois.
Si je pose la question ce n'est pas parce que je veux en faire plus, il faut déjà digérer ton tuto, mais c'est par curiosité personnelle car il me semble avoir compris que JTAG utilise davantage de pins.

Non je ne pense pas que le ST en fasse plus.

Tu veux essayer sur quelle carte ?

La blue pill, mais j'ai aussi un Nucléo L15xmachin dans un tiroir.

Je parle sur le plan de brochage http://reblag.dk/wordpress/wp-content/uploads/2016/07/The-Generic-STM32F103-Pinout-Diagram.pdf des broches JTDI, JTDO, JTRST et sur le connacteur SWD : JTMS, SWIO et SWCLK/JTCK.
Ou alors je confond JTAG avec le débogage.

D'un autre coté le "boîtier" STMicro possède plus de connecteurs et il existe une carte sur Ebay d'un F103 avec justement un gros connecteur comme celui du boîtier ST.
Ma petite tête me fait penser que plus de broches au connecteur ce n'est peut-être pas pour rien.

Je reprécise : c'est juste de la curiosité.