STM32 DUINO

La NUCLEO fonctionne en USB directement. Le ST-LINK est sur la carte.

Ma petite tête me fait penser que plus de broches au connecteur ce n'est peut-être pas pour rien.

Je ne crois pas. Sur les 20 pins il y en a très peu qui sont utilisées : https://www.st.com/content/ccc/resource/technical/document/user_manual/49/56/14/ee/98/cc/4d/2c/CD00221563.pdf/files/CD00221563.pdf/jcr:content/translations/en.CD00221563.pdf

Certaines cartes sont équipées de connecteurs SWIM ou 20 pins.

Une carte OLIMEX :

Et le pinout de son connecteur :

C'est plein de GND.

Par contre il y a peut-être d'autres outils qui utilisent d'autres pins de ce connecteur sur des cartes qui fournissent plus de signaux.

Mais le ST-LINK ne les utilise pas.

Les petits ST-LINK chinois marchent bien :

Avec le petit fichier udev qui va bien :

/etc/udev/rules.d/49-stlinkv2.1.rules :

stm32 nucleo boards, with onboard st/linkv2-1

ie, STM32F0, STM32F4.

STM32VL has st/linkv1, which is quite different

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b",
MODE:="0666",
SYMLINK+="stlinkv2-1_%n"

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748",
MODE:="0666",
SYMLINK+="stlinkv2_%n"

If you share your linux system with other users, or just don't like the

idea of write permission for everybody, you can replace MODE:="0666" with

OWNER:="yourusername" to create the device owned by you, or with

GROUP:="somegroupname" and mange access using standard unix groups.

Ce fichier permet à l'utilisateur non root d'accéder au device, qu'il soit un ST-LINK ST MicroElectronics ou un ST-LINK chinois.

Alors sur ce point : faites gaffe.

Je ne sais pas si c'est toujours le cas mais il y a 2, 3 ans certains modèles de ST-Link chinois avait un circuit imprimé avec brochage différent de celui écrit sur le capot. Si on suit les indications du boîtier on provoque un court-circuit.

Comment les reconnaître si malheureusement il y en a encore qui traînent à la vente :

Méthode barbare : brancher et regarder si tout s'éteint c'est qu'il y a le court-circuit.

Méthode policée : (pour Linux)
Après connexion du St-Link regarder le résultat de
$dmesg | tail -10

Si vous lisez :
usb 2-4: SerialNumber: 9 c'est bon

Par contre si vous lisez :
usb 2-4: SerialNumber: PÿtQ\xffffffc2\xffffff87VSD3%g
Ce n'est pas bon, il faut ouvrir le capot et lire le brochage réel sur le circuit imprimé et après tout est est ok.

Information :
Les programmes ST-link et autres St-machin sont maintenant disponibles en paquet Debian. Pour Buster pas de problème, pour Stretch il faut activer les dépôts backport.

Dans l'ancienne méthode où il fallait télécharger les sources chez Texane la doc fournissait deux versions de règles Udev. La version qui fonctionne avec la bluepill à 2€ est la version pour les cartes discovery.
Il faut réserver la version Nucleo aux cartes Nucléo.

Oui j'ai vu ça, mais apparemment le mien est bien sérigraphié.
Ça charge comme une fleur.

https://fr.aliexpress.com/item/ST-LINK-V2-CN-ST-LINK-STLINK-STM8-STM32-emulator-official-version/32230072665.html?spm=a2g0s.9042311.0.0.27426c37xNAP8G

Soit disant version officielle.

Heu ... sans vouloir être malpoli, mes c***lles ...

A éviter !

riton@alpha:/mnt/sdc1/riton$ st-flash write /tmp/arduino_build_579822/Blink.ino.bin 0x8000000
2019-03-29T20:36:26 INFO src/stlink-common.c: Loading device parameters....
2019-03-29T20:36:26 WARN src/stlink-common.c: unknown chip id! 0
riton@alpha:/mnt/sdc1/riton$

L'emballage est joli, ça console.

Préférer ceci :

https://fr.aliexpress.com/item/ST-Link-V2-Programming-Unit-mini-STM8-STM32-Emulator-Downloader-M89-New/32631496848.html?spm=a2g0s.9042311.0.0.27426c37Knvivh

Ces petite machins qui n'ont l'air de rien fonctionnent :

riton@alpha:/mnt/sdc1/riton$ st-flash write /tmp/arduino_build_579822/Blink.ino.bin 0x8000000
2019-03-29T21:17:02 INFO src/stlink-common.c: Loading device parameters....
2019-03-29T21:17:02 INFO src/stlink-common.c: Device connected is: F1 Medium-density device, id 0x20036410
2019-03-29T21:17:02 INFO src/stlink-common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x10000 bytes (64 KiB) in pages of 1024 bytes
2019-03-29T21:17:02 INFO src/stlink-common.c: Attempting to write 12844 (0x322c) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08003000 erased
2019-03-29T21:17:02 INFO src/stlink-common.c: Finished erasing 13 pages of 1024 (0x400) bytes
2019-03-29T21:17:02 INFO src/stlink-common.c: Starting Flash write for VL/F0/F3 core id
2019-03-29T21:17:02 INFO src/stlink-common.c: Successfully loaded flash loader in sram
 12/12 pages written
2019-03-29T21:17:03 INFO src/stlink-common.c: Starting verification of write complete
2019-03-29T21:17:03 INFO src/stlink-common.c: Flash written and verified! jolly good!
riton@alpha:/mnt/sdc1/riton$

Quelques fois la merde chinoise se cache bien sous des apparences trompeuses !

Quelques petites présentations STM32 :

Je suis de plus en plus convaincu par l'IDE PlatformIO (Visuel Studio), sur ARDUINO, ESP8266 ou ESP32 et STM32, même MSP430 on dirait, et bien d'autres.

La liste des plateformes : Boards — PlatformIO latest documentation

Sur STM32 le chargement est fait par OpenOCD.
Avec les cartes ST cela se passe très bien.

Mais sur la BLUE PILL apparemment le code est bien chargé mais il démarre au mauvais endroit.
Certainement un problème de vecteur de reset.
Avec l'utilitaire ST-FLASH de ST Microelecronics c'est correct.

Je travaille actuellement sur une F429ZI, une carte possédant 3 ADC 12bits :

Cette carte est époustouflante :

833333 échantillons par seconde et par canal en mode polling.
Si j'utilisais les interruptions ou la DMA ce serait encore plus fort, mais j'ai besoin de 100K/s, pas plus.
Actuellement j'exploite deux canaux.

Du code ici : Bitbucket

A comparer avec les 38500 échantillons par seconde que l'on peut obtenir d'un ARDUINO sur lequel l'ADC est boosté. Il paraît que l'on peut le pousser à 77000.
Et l'ADC n'a que 10 bits.

@+

Quelques résultats d'une petite plongée dans l'ADC du STM32, avec polling, interruptions et DMA.

STM32 : l'ADC

Salut la compagnie,

Voici un petit retour d'expérience sur l'utilisation du STM32.
J'ai acheté, il y a quelques mois de cela, un clone maple mini embarquant un STM32F103C8, afin de l'utiliser dans l'environnement Arduino.

Je n'avais pas eu le temps de le mettre en oeuvre j'usqu'à hier.

Une fois les bibliothèques installées (stm32duino), le branchement de la carte créer dans windows (désolé linuxiens) un nouveau port série.

Pour tester la bébète, je compile sans problème un sketch style blink mais le téléversement est systématiquement en erreur " DFU not find".

Je télécharge depuis le site de St Micro le

stm32 loader demonstrator
et en utilisant un convertisseur usb vers série connecté aux ligne TX1 et RX1 du maple mini.
Je démarre la carte avec boot0 à Vcc.

Je constate que la mémoire du stm32 est protèger en écriture.

Pas de problème, le soft stm32 loader demo permet de dévérouiller la mémoire mais l'éfface en totalité.

Pour le rendre le maple de nouveau fonctionnel, il faut lui injecter un nouveau boot loader.

ce fichier se trouve dans le dossier ici

voici un
lien qui vous aidera à mieux comprendre la démarche.

il suffit après de redemarrer le maple mini avec boot0 à gnd, de le connecter en usb.
et tout roule.
Bonne lecture


Détail : le stm32 loader demonstrator est une application Windows.

Dommage de flasher un bootloader alors que le STM32 en possède déjà un nativement, celui qui te permet d'ailleurs de charger le bootloader STM32DUINO par la ligne série.

Mais c'est vrai que cela oblige à utiliser un convertisseur USB / série.

Hbachetti, merci pour ta remarque.

Mais une fois la mémoire effacée, je n'ai pas pu réutiliser la carte.
Je n'ai eu comme solution que le bootloader.

Si il y a une autre solution, je suis preneur.

J'ai commandé un st-link.. je ferais des essais une fois réceptionné.

Pas besoin de ST-LINK.
Ce boîtier est ce que j'utilisais au boulot pour charger à partir d'un Makefile en ligne de commande.
Avec l'IDE ARDUINO il y a plus simple : stm32f103c8t6-et-arduino. Voir 7. Chargement

Merci je vais tester cela.. mais une fois la mémoire effacée suite au retrait de la protection mémoire, je n'avais plus de port série.

J'essai de revenir à cette étape.

Réserve ces cartes à des projets gourmands en ressources, ça pédale vite.

:wink:

Petit ajout, pour ceux qui seraient intéressés :

Sympa ce tuto, on peut utiliser stm32CubeIde est la surcouche Arduino ?
Ou uniquement les outils de configuration?

PaltformIO donne le choix entre différentes librairies : Stm32Cube, Arduino (Stm32Duino), MBed, etc.
A ma connaissance stm32CubeIde n'offre pas ce choix. A la limite, installer Stm32Duino ne devrait pas être insurmontable, mais cela demandera un effort conséquent.

Oui, c'est sûre mais du coup on n'est pas non plus avec le même confort d'environnement.
Après je n'ai pas testé PaltformIO IDE, mai uniquement dans VSCode.
VSCode étant bien mieux selon mes gouts que Arduino IDE, mais ne vaut pas un "vrai" IDE