Remise en route d'un STM32

bonjour à toutes et à tous,

Je ressors un STM32F103C8T6 que j'avais commandé en 2018 et essaie de le faire fonctionner !

Je le connecte à mon PC à l'aide d'une interface ST-LINK V2.

La compilation se passe bien, le téléchargement aussi :

Le croquis utilise 9080 octets (6%) de l'espace de stockage de programmes. Le maximum est de 131072 octets.
Les variables globales utilisent 780 octets (3%) de mémoire dynamique, ce qui laisse 19700 octets pour les variables locales. Le maximum est de 20480 octets.
      -------------------------------------------------------------------
                       STM32CubeProgrammer v2.13.0                  
      -------------------------------------------------------------------

ST-LINK SN  : 52FF7D065286535615390567
ST-LINK FW  : V2J40S7
Board       : --
Voltage     : 3.24V
SWD freq    : 4000 KHz
Connect mode: Under Reset
Reset mode  : Hardware reset
Device ID   : 0x410
Revision ID : Rev X
Device name : STM32F101/F102/F103 Medium-density
Flash size  : 128 KBytes
Device type : MCU
Device CPU  : Cortex-M3
BL Version  : --



Memory Programming ...
Opening and parsing file: Test_Simple.ino.bin
  File          : Test_Simple.ino.bin
  Size          : 9.15 KB 
  Address       : 0x08000000 


Erasing memory corresponding to segment 0:
Erasing internal memory sectors [0 9]
Download in Progress:


File download complete
Time elapsed during download operation: 00:00:00.719

RUNNING Program ... 
  Address:      : 0x8000000
Application is running, Please Hold on...
Start operation achieved successfully

Le sketch est le suivant :

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
Serial.println("C'est Ok");
}

void loop() {
  // put your main code here, to run repeatedly:
Serial.println("C'est Ok");
delay(500);
}

Maintenant, je voudrais bien voir sur le moniteur série ce que j'y imprime : je ne vois rien.

Que faut-il faire ?

Cordialement.

Pierre.

Salut.

Le ST-LINK ne possède pas de ligne série.
Il te faut ceci :


Le connecteur est celui d'un FT232RL ou d'un quelconque convertisseur USB/série.

Je pense que Pierre espérait utiliser l'USB natif du STM32.

  1. Je suis persuadé que c'est possible, il me semble avoir vu des "trucs" sur le sujet.

  2. Je ne sais absolument pas comment faire.

J'ai vite arrêté les recherches et adopté la même solution qu'Henri.

Pierre, tu auras plus de chance d'avoir une réponse sur le forum stm32duino, il est géré par STMicro.

Merci "hbachetti", cette solution fonctionne bien.

Merci "68tjs", je vais aller faire un tour sur c forum.

Cordialement.

Pierre.

Oui, il faut écrire un bootloader qui utilise PA11 et PA12. Par exemple :

Pourquoi un bootloader ?
Si tu me repond parce qu’a l’usage c’est la solution la plus pratique, je comprendrais.

Sinon pourquoi pas quelques ligne de code dans le programme qui iraient positionner les registres ad hoc ?

Le STM32F103C8T6 possède un bootloader interne, capable de charger un code à partir d'UART1, mais pas à partir de l'USB natif.

Merci "hbachetti" pour l'installation de ce bootloader. Je travaille sous WIndows 10.

J'ai suivi la vidéo (je ne comprends rien de ce que raconte le gars). J'ai réussi à charger le bootloader. Je cale maintenant sur l'installation des drivers. Quand je lance "install_driver.bat", j'ai le message d'erreur suivant :

Extracting driver files...
  Success
Installing driver(s)...
libwdi:error [wdi_create_list] could not get hardware ID

Je ne sais plus quoi faire.

Cordialement.

Pierre.

Tu as branché la carte ?

J'ai peut être une piste :
Si tu as une BluePill, si tu veux que la carte démarre directement l'application (le bootloader dans ton cas), il faut placer le cavalier boot0 sur 0.
Sinon, le bootloader n'est pas lancé, et l'USB natif n'est pas initialisé.

Je ne parle que pour l'envoi de texte sur l'interface série.

Pour charger un programme les STM32, comme les autres ARM, ont l'interface SWD.

Ah OK. Dans ce cas tu peux certainement utiliser l'USB natif.
Les drivers font partie du package STM32Cube, et il y a même une appli demo.

Non, je ne l'avais pas branchée. Lors de l'installation des drivers CH340, il n'y avait pas à le faire ... Bon, j'ai branché la carte et apparemment, c'est passé. L'application n'est pas bavarde : installation en cours ... appuyez sur une touche et ça se ferme !

En faisant le choix indiqué dans la vidéo, j'ai une erreur à la compilation :

exec: "/bin/arm-none-eabi-g++": file does not exist

Compilation error: exec: "/bin/arm-none-eabi-g++": file does not exist

Si je fais un autre choix (qui fonctionne avec le ST-LINK V2) , la compilation se passe bien, mais aucun des choix de téléchargement ne fonctionne.

Cordialement.

Pierre.

C'est normal, le CH340 est un convertisseur hardware. L'USB natif du STM32 ne fonctionne que si une application le met en service.

Sur une machine Windows c'est un peu normal de ne pas trouver /bin/arm-none-eabi-g++.
Je ne saisis pas bien ce que tu fais.

Je fais exactement les choix qui sont faits dans la vidéo entre 4'43"" et 5'00".

Par contre, je n'ai pas mis de résistance de 1.5 k entre PA12 et le 3.3 V car ce n'est pas compris à quoi cela correspondait. Est-ce que cela à voir avec la compilation ? faut-il la laisser après ?

Cordialement.

Pierre.

Non certainement pas.

Ce n'est pas avec des extraits de messages de compilation que l'on peut aider efficacement.
arm-none-eabi-g++ est le compilateur. Vérifier la présence de cet exécutable.
Cherche arm-none-eabi-* dans ton répertoire Arduino15.

Il est là, avec tout un tas d'autres "arm-none-eabi"

C:\Users\prcha\AppData\Local\Arduino15\packages\STM32\tools\xpack-arm-none-eabi-gcc\9.2.1-1.1\bin\arm-none-eabi-g++.exe

Le message complet du compilateur est :

FQBN: Arduino_STM32:STM32F1:genericSTM32F103C:device_variant=STM32F103CB
Using board 'genericSTM32F103C' from platform in folder: E:\Arduino\hardware\Arduino_STM32\STM32F1
Using core 'maple' from platform in folder: E:\Arduino\hardware\Arduino_STM32\STM32F1

Detecting libraries used...
/bin/arm-none-eabi-g++ -c -g -Os -w -DDEBUG_LEVEL=DEBUG_NONE -std=gnu++11 -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -DBOARD_generic_stm32f103c -DVECT_TAB_ADDR=0x8002000 -DERROR_LED_PORT=GPIOC -DERROR_LED_PIN=13 -w -x c++ -E -CC -mcpu=cortex-m3 -DF_CPU=72000000L -DARDUINO=10607 -DARDUINO_GENERIC_STM32F103C -DARDUINO_ARCH_STM32F1 -DSERIAL_USB -DGENERIC_BOOTLOADER -DMCU_STM32F103CB -mthumb -march=armv7-m -D__STM32F1__ -DMCU_STM32F103CB -mthumb -march=armv7-m -D__STM32F1__ -IE:\Arduino\hardware\Arduino_STM32\STM32F1\system/libmaple -IE:\Arduino\hardware\Arduino_STM32\STM32F1\system/libmaple/include -IE:\Arduino\hardware\Arduino_STM32\STM32F1\system/libmaple/stm32f1/include -IE:\Arduino\hardware\Arduino_STM32\STM32F1\system/libmaple/usb/stm32f1 -IE:\Arduino\hardware\Arduino_STM32\STM32F1\system/libmaple/usb/usb_lib -IE:\Arduino\hardware\Arduino_STM32\STM32F1\cores\maple -IE:\Arduino\hardware\Arduino_STM32\STM32F1\variants\generic_stm32f103c C:\Users\prcha\AppData\Local\Temp\arduino\sketches\575B77794E1E3B0CC915AD2DBDC04985\sketch\Test_Simple.ino.cpp -o nul
exec: "/bin/arm-none-eabi-g++": file does not exist

Compilation error: exec: "/bin/arm-none-eabi-g++": file does not exist

Cordialement.

Pierre.

C'est à n'y rien comprendre. C'est comme s'il cherchait à compiler sous LINUX.
Peux tu revenir à la version précédente, en utilisant le ST-LINK V2 ?
Au pire, tu peux rester avec cette configuration, qui est plus naturelle sur STM32, et essayer d'utiliser l'USB natif comme Serial.
Cela risque de ne pas être trivial car la librairie STM32Cube est loin d'être aussi facile à prendre en main que la librairie ARDUINO.

Après de multiples essais, et en téléchargeant dans le gestionnaire de carte "STM32F1xx/GD32F1xx boards par stm32 duino", ça a réussi à compiler. Pour autant, avec ce choix de gestionnaire, si la compilation passe bien, je n'ai jamais réussi à téléverser mon programme dans ma carte, que ce soit en utilisant STLink ou le stm32 bootloader.

J'abandonne tous ce essais.

J'utilise "STM32 MCU base boards" avec le choix de "Generic Stm32F1 series" et "BluePill F103CB(orC8 with 128k)" et le STLink.

J'utilise la méthode que tu m'as indiquée au post #2 pour avoir un retour pour me moniteur série.

Par ailleurs, est-il utile de supprimer le bootloader de la carte afin de récupérer de la mémoire ( si j'ai réussi à le télécharger, tout essai que je fais maintenant avec "STMFlashLoader Demo.exe" s'avère infructueux : mauvais choix de COM, COM occupé, ...)

Qu'est ce qui différencie ces deux bibliothèques et où trouver l'un et l'autre ?

Cordialement.

Pierre.

A partir du moment où tu utilises le ST-LINK celui-ci remplace le bootloader par ton appli.

Librairie ARDUINO : STM32Duino
STM32Cube : https://www.st.com/en/ecosystems/stm32cube.html (mais tu vas galérer)