Go Down

Topic: STM32 DUINO (Read 5331 times) previous topic - next topic

hbachetti

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
@+
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

hbachetti

#1
Apr 02, 2018, 09:53 am Last Edit: Apr 02, 2018, 09:57 am by hbachetti
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 :

Quote
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).

@+
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

68tjs

#2
Apr 02, 2018, 10:30 am Last Edit: Apr 02, 2018, 10:33 am by 68tjs
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.

hbachetti

#3
Apr 02, 2018, 11:29 am Last Edit: Apr 02, 2018, 11:29 am by hbachetti
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 ?

Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

68tjs

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.

hbachetti

Quote
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.

Quote
À 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 ?

@+
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

hbachetti

Quote
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.

 :smiley-confuse:

@+
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

hbachetti

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.

@+
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

hbachetti

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
@+
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

68tjs

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

hbachetti

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

@+
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

hbachetti

#11
Mar 23, 2019, 01:15 pm Last Edit: Mar 23, 2019, 01:16 pm by hbachetti
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 :

https://riton-duino.blogspot.com/2018/03/stm32f103c8t6-et-arduino.html#boards


Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

hbachetti

#12
Mar 27, 2019, 02:34 pm Last Edit: Mar 27, 2019, 02:48 pm by hbachetti
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 :

https://github.com/adafruit/Adafruit-ST7735-Library
https://github.com/adafruit/Adafruit_ILI9341

Remarque : la librairie UTFT refuse ce genre de processeur.
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

hbachetti

#13
Mar 27, 2019, 11:17 pm Last Edit: Mar 27, 2019, 11:19 pm by hbachetti
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 :

Code: [Select]

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 :

Quote
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

Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

68tjs

#14
Mar 28, 2019, 01:20 pm Last Edit: Mar 28, 2019, 01:34 pm by 68tjs
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.

Go Up