« Microcontrôleur » : différence entre les versions

De Wiki Clubelek
Clementin.granier1 (discussion | contributions)
Aucun résumé des modifications
Clementin.granier1 (discussion | contributions)
Ajout source ESP32 et prog STM32
 
Ligne 69 : Ligne 69 :


=== Pinout d'un ESP32 classique et pins à éviter ===
=== Pinout d'un ESP32 classique et pins à éviter ===
Tous les pins sont capables du PWM.
Tous les pins sont capables du PWM. Voir ici pour plus de détails : https://lastminuteengineers.com/esp32-pinout-reference/
{| class="wikitable"
{| class="wikitable"
|+Classification des pins d'un ESP32
|+Classification des pins d'un ESP32
Ligne 223 : Ligne 223 :


* STM32CubeProgrammer<ref>https://www.st.com/en/development-tools/stm32cubeprog.html</ref> : Pour flash les MCU avec les fichiers compilés.
* STM32CubeProgrammer<ref>https://www.st.com/en/development-tools/stm32cubeprog.html</ref> : Pour flash les MCU avec les fichiers compilés.
=== Overview du process de programmation classique ===
Vous pouvez ouvrir STM32CubeMX, choisir votre mcu et configurer les périphériques. Il faudra sélectionner les pins que vous voulez utiliser, par exemple en tant qu'ADC, les mettre sur le bon périphérique, puis aller dans le menu à gauche et chercher le périphérique que vous voulez pour terminer de le configurer (baud rate sur l'UART, source des clocks, ...).
Votre pin devra passer de orange à vert lorsqu'il est bien configuré.
Une fois tout bien configuré, vous pouvez cliquer sur suivant puis générer le code.
Une fois cela fait, vous pouvez éditer le code situé dans /[dossier]/src/main.c avec votre IDE préféré, puis le compiler à l'aide STM32CubeIDE (il vous faut importer le projet d'abord).
Une fois votre fichier .elf généré, vous pouvez ouvrir STM32CubeProgrammer, sélectionner votre méthode de programmation (UART, STLink, JTAG), puis cliquez sur Connect et attendez que votre board se connecte. Une fois la connection réussie, allez dans l'onglet Upload, choississez votre .elf et cliquez sur Upload. Une fois que c'est terminé, il ne vous reste plus qu'à reset le mcu en mode normal et tout devrait marcher !
=== Tips & Tricks ===
==== État du pin BOOT0 ====
C'est rarement précisé dans les datasheet, mais si le pin BOOT0 est à l'état haut le MCU sera en mode bootloader, à l'état bas il sera en mode normal
{{Warning}}C'est l'inverse des ESP32 !
==== GPIO_Analog ====
Beaucoup de pins sont capables de passer en mode "GPIO_Analog". Mais aucun rapport avec l'ADC ! Cela veut simplement dire qu'ils sont déconnectés du circuit numérique qui est derrière. Une option dans STM32CubeMX passe tous les pins non utilisés en GPIO_Analog afin de réduire la consommation.
==== UART et bootloader ====
Les pins d'UART1 peuvent être rebind une fois le MCU démarré, mais ces modifications ne s'appliquent pas dans le bootloader ! Il faudra flasher la carte avec les pins par défaut...


== Ressources ==
== Ressources ==
https://github.com/yellobyte/ESP32-DevBoards-Getting-Started
https://github.com/yellobyte/ESP32-DevBoards-Getting-Started
[[Catégorie:Articles techniques d'électronique]]
[[Catégorie:Articles techniques d'électronique]]

Dernière version du 17 juin 2025 à 09:47

C'est quoi ?

Un micro-contrôleur va vous permettre de faire plein de belles choses, principalement de faire interagir du code avec le monde réel. Il existe de nombreuses puces différentes (MCU, microcontroller unit), mais elles sont souvent utilisés sur des cartes de développement (devboard) qui permettent de le faire fonctionner sans élément externe et d'avoir quelque chose de pratique. Les devboard ne sont pas recommandées si vous voulez faire un design où la place est comptée, mais il est recommandé de faire les tests sur devboard avant d'envoyer un PCB.

Arduino

Les arduino sont les plus simples des micro-contrôleurs, mais sont très lents et ont peu de fonctionnalités. Ils sont basés sur les atmega qui sont des mcus corrects. Recommandé pour les débutants et les projets très simples

ESP32

Ces MCU sont un peu spéciaux, nous y reviendrons plus tard, mais ils sont plutôt performants, ont le wifi/bluetooth intégré, pas mal de stockage, beaucoup de pins et les modules sont simples à utiliser. Ils consomment sacrément par contre. Recommandé pour les projets complexes sans contrainte de consommation.

STM32

Très bons MCU mais peu pratiques à utiliser. Recommandés car gratuits/vraiment pas chers

Raspberry Pi Pico

Basés sur le RP2040 qui est très performant, et très peu chers. Recommandés car pas chers et performants

Teensy

Extrêmement performants, blindés de pins I/O etc. Coûtent cher. Recommandés sur des projets avec du traitement en temps réel

nRF

MCU spécialisés dans le wireless basse consommation. Recommandé pour du wireless basse consommation

ESP32

Attention : les MCU d'ESP32 sont très galère à utiliser. Nous allons donc nous concentrer sur les modules, qui sont comme des devboard mais en bien plus compact.

Espressif fabrique aussi des MCU nommés ESP8266, qui sont un peu moins chers mais bien moins performants.

Les différents modèles de module ESP32

Il y a trois types de modules : WROOM, WROVER et MINI.

Les MINI sont les plus petits, suivis par les WROOM puis les WROVER. Les WROOM sont souvent le bon compromis entre fonctionnalités et taille, mais les WROVER peuvent être nécessaire s'il faut accès à tous les pins possibles.

Les différentes séries de SoC ESP32

Il existe 5 séries majeures d'ESP32 :

Série Processeur Wireless Notes et fonctionnalités supplémentaires
ESP32 Dual/Single core Xtensa (80~240 MHz) WiFi + Bluetooth Classic Attention c'est le seul sans USB intégré
ESP32-S Dual core Xtensa (240MHz) WiFi + Bluetooth BLE Attention pas de bluetooth classique
ESP32-H Single core RISC-V (96MHz) BLE + Zigbee Très basse puissance, pas de wifi !
ESP32-C Single core RISC-V (160MHz) WiFi + BLE + Zigbee
ESP32-P Dual core RISC-V (400MHz) + Single core RISC-V (40 MHz) Dernier arrivé (je connaissais pas son existence avant il y a 5 min)

A l'air très performant (et cher), à coupler avec un ESP32-C pour avoir le wifi !

Pinout d'un ESP32 classique et pins à éviter

Tous les pins sont capables du PWM. Voir ici pour plus de détails : https://lastminuteengineers.com/esp32-pinout-reference/

Classification des pins d'un ESP32
Label Fonctionnalités Remarques
Pins à utiliser en priorité
D4 ADC2_0 + Touch0
D13 ADC2_4 + Touch4 + SPI2 (MOSI)
D14 ADC2_6 + Touch6 + SPI2 (CLK)
RX2 Serial2 (RX)
TX2 Serial2 (TX)
D18 SPI1 (CLK)
D19 SPI1 (MISO)
D21 I2C (SDA)
D22 I2C (SCL)
D23 SPI1 (MOSI)
D25 ADC2_8 + DAC1
D26 ADC2_9 + DAC2
D27 ADC2_7 + Touch7
D32 ADC1_4 + Touch9
D33 ADC1_5 + Touch8
Pins à utiliser si c'est la dèche
D0 HIGH au boot et LOW pour flash
D2 ADC2_2 + Touch2 + CS LOW au boot
D5 SPI1 (CS) HIGH au boot
D12 ADC2_5 + Touch5 + SPI2 (MISO) LOW au boot
D15 ADC2_3 + Touch3 + SPI2 (CS) HIGH au boot
D34 ADC1_6 Input only
D35 ADC1_7 Input only
VP ADC1_0 + VP Input only
VN ADC1_3 + VN Input only
Pas touche à ces pins
TX0 Serial0 (TX) Communication série
RX0 Serial0 (RX) Communication série
D6 Mémoire
D7
D8
D9
D10
D11

nRF

Il existe des cartes de devs nRF52840 qui coûtent pas cher (3€) et sont très performantes et complètes, dans une footprint identique à celle d'un arduino pro micro, chercher Supermini nRF52840 sur aliexpress.

STM32

Les MCU de chez ST se divisent en deux parties principales : les STM8 qui ont des bus de données 8 bits, et les STM32 qui sont des 32 bits. D'un point de vue programmation, les STM8 sont plus complexes car moins de flash, moins de puissance de calcul etc. Par contre, ils sont encore moins chers !! Vous pouvez en trouver pour 20 centimes pièce sur LCSC. Je vais me concentrer sur les STM32 dans ce guide.

Les STM32Wx sont en wireless, les STM32Lx et Ux sont en basse consommation, les Cx, F1, F3 et F0 sont les plus classiques et les autres Fx et Hx sont en haut de gamme.[1]

Je conseille souvent les F3, ils sont plutôt solides.

Setup de programmation

Pour bien dev chez ST, il vous faudra plusieurs logiciels :

  • STM32CubeMX[2] : Très recommandé, il vous génèrera les fichiers de base (pinout, périphériques, clock...)
  • STM32CubeIDE[3] : Il permettra de compiler plus facilement votre code.
  • STM32CubeProgrammer[4] : Pour flash les MCU avec les fichiers compilés.

Overview du process de programmation classique

Vous pouvez ouvrir STM32CubeMX, choisir votre mcu et configurer les périphériques. Il faudra sélectionner les pins que vous voulez utiliser, par exemple en tant qu'ADC, les mettre sur le bon périphérique, puis aller dans le menu à gauche et chercher le périphérique que vous voulez pour terminer de le configurer (baud rate sur l'UART, source des clocks, ...).

Votre pin devra passer de orange à vert lorsqu'il est bien configuré.

Une fois tout bien configuré, vous pouvez cliquer sur suivant puis générer le code.

Une fois cela fait, vous pouvez éditer le code situé dans /[dossier]/src/main.c avec votre IDE préféré, puis le compiler à l'aide STM32CubeIDE (il vous faut importer le projet d'abord).

Une fois votre fichier .elf généré, vous pouvez ouvrir STM32CubeProgrammer, sélectionner votre méthode de programmation (UART, STLink, JTAG), puis cliquez sur Connect et attendez que votre board se connecte. Une fois la connection réussie, allez dans l'onglet Upload, choississez votre .elf et cliquez sur Upload. Une fois que c'est terminé, il ne vous reste plus qu'à reset le mcu en mode normal et tout devrait marcher !

Tips & Tricks

État du pin BOOT0

C'est rarement précisé dans les datasheet, mais si le pin BOOT0 est à l'état haut le MCU sera en mode bootloader, à l'état bas il sera en mode normal

Warning Attention: C'est l'inverse des ESP32 !

GPIO_Analog

Beaucoup de pins sont capables de passer en mode "GPIO_Analog". Mais aucun rapport avec l'ADC ! Cela veut simplement dire qu'ils sont déconnectés du circuit numérique qui est derrière. Une option dans STM32CubeMX passe tous les pins non utilisés en GPIO_Analog afin de réduire la consommation.

UART et bootloader

Les pins d'UART1 peuvent être rebind une fois le MCU démarré, mais ces modifications ne s'appliquent pas dans le bootloader ! Il faudra flasher la carte avec les pins par défaut...

Ressources

https://github.com/yellobyte/ESP32-DevBoards-Getting-Started