Installation de MMDVM sur une carte STM32F4xx

Faisant suite à mon précédent article consacré à la programmation du firmware MMDVM sur une platine Arduino Due, voici la présentation étape par étape de la programmation de MMDVM sur une platine Nucleo STM32F4xx.

Synoptique d’un relais utilisant le “MultiMode Digital Voice Modem” (MMDVM) installé sur une platine STM32

Synoptique d’un relais utilisant le “MultiMode Digital Voice Modem” (MMDVM) installé sur une platine STM32

La platine STM32F4xx du constructeur ST Micro electronic permet avantageusement de remplacer l’Arduino Due dans son application de relais numérique multimode MMDVM. De plus la platine STM32F446RE Nucleo   par exemple est accessible à un prix plutôt bas (environ 15€)

Borchage de la carte Nucleo STM32F4

Brochage de la carte Nucleo STM32F4

Télécharger MMDVM

  1. Le firmware (logiciel) de MMDVM est à télécharger sur la plateforme github
    https://github.com/g4klx/MMDVM
  2. Télécharger le ZIP depuis le bouton placé en haut à droite
  3. Dézipper le fichier MMDVM-master.zip dans un répertoire.
  4. Renommer le répertoire en MMDVM
  5. Ouvrer le fichier de configuration “Config.h”, pour correspondre à ma platine de filtrage MMDVM :
    1. Valider l’oscillateur externe de 12 MHz
    2. Indiquer la version de la carte de filtrage
    3. Informer le réseau du niveau de signal mesuré par le récepteur
    4. Valider le brochage pour installer un écran tactile Nextion

Télécharger la bibliothèque ST

  1. Télécharger la librairie STM32F4XX_Lib.zip
  2. Dézipper le fichier
  3. Déplacer tous les fichiers et répertoires dans le répertoire MMDVM précédemment crée

Télécharger l’utilitaire de compilation libre

  1. Télécharger le fichier compressé Binaries ZIP sur http://gnuwin32.sourceforge.net/packages/make.htm  (ou directement ici make-3-81-bin)
  2. Dézipper le fichier
  3. Copier le fichier make.exe du sous-répertoire bin dans le répertoire MMDVM

Télécharger les dépendances

  1. Télécharger le fichier des dépendances ZIP sur http://gnuwin32.sourceforge.net/packages/make.htm  (ou directement ici make-3-81-dep)
  2. Dézipper le fichier
  3. Copier les fichiers suivants dans le sous-répertoire bin dans le répertoire MMDVM
  • libintl3.dll
  • libiconv2.dll

Voici un extrait des fichiers contenu à ce stade dans le répertoire MMDVM.

Télécharger la suite de logiciel intégré pour ARM

  1. Télécharger le logiciel dédié à la compilation pour les architectures électroniques ARM sur https://launchpad.net/gcc-arm-embedded/+download (ou directement ici en direct gcc-arm-none-eabi-5_4-2016q3-20160926-win32.exe)
  2. Installer le logiciel avec le chemin par défaut
  3. Lancer depuis le groupe “GNU Tools for ARM Embedded Processors” disponible dans le menu démarrer la ligne “GCC Command Prompt

Lancer la compilation

  1. Depuis la fenêtre de commandes (GCC Command Prompt), se positionner dans le répertoire MMDVM.
  2. Effacer toutes traces de fichiers déjà compilé
  3. Puis pour le nucleo STM32F446 lancer la compilation.
  4. Si vous avez une platine Discovery STM32F407, lancer la compilation

 

Compilation de MMDVM pour STM32F446

Les fichiers outp.hex et outp.bin sont disponibles dans le sous-répertoire bin et vont pouvoir être à présent chargés sur la carte STM32F4xx.

Télécharger et programmer la carte STM32F4

  1. Télécharger le logiciel de chargement fourni par le constructeur ST Micro Electronics “STM32 ST-LINK Utility”  (Sur le site de ST Micro Electronics vous devez déposer votre adresse email afin de recevoir le lien de téléchargement, ou alors télécharger le directement ici en-stsw-link004.zip)
  2. Dézipper
  3. Lancer l’installation du logiciel STM32 ST-LINK Utility
  4. Brancher via un cordon USB votre platine au PC
  5. La destination de fichier par défaut convient parfaitement
  6. Le pilote USB sera également installé, après un premier clic sur Suivant
  7. Valider l’installation des pilotes USB de la carte STM32 en cliquant sur le bouton Installer (à deux reprises)
  8. Lancer le logiciel STM32 ST-Link disponible dans le menu démarrer
  9. Ouvrir le fichier compilé outp.hex (ou bien outp.bin) se trouvant dans le sous-répertoire bin\
  10. Brancher la carte STM32F4xx sur l’une de vos prises USB.
  11. Lancer le chargement (la programmation) de la platine par le menu Target puis Program & Verify (ou par raccourci clavier CTRL+P)La fenêtre suivante s’ouvre.
  12. Cliquer sur le bouton Start pour lancer la programmation du STM32F4xx

    La console affiche la bonne exécution “Verification…OK

Le brochage du filtre MMDVM

Sur le tableau ci-dessous, vous retrouvez le brochage à suivre en fonction de la platine. Ma précédente platine MMDVM pour Arduino reprend la définition NTH.Platine MMDVM montée avec composants discrets

connection-mmdvm-arduino-stm32-discovery-nucleo


If you would be interested to participate in a possible future new grouped order (MMDVM board, SvxLink Card), leave your email below to be reported!

21 réflexions au sujet de « Installation de MMDVM sur une carte STM32F4xx »

  1. Bonjour,
    merci pour ce travail
    au prompt “GCC Command Prompt” la commande “cd /MMDVM” ira direct au répertoire MMDVM
    en mentionnant que le répertoire est dans C:/ (C:/MMDVM)
    car le “E” n’est pas pour tout le monde?

    si on branche le Nextion sur la carte STM32F446:
    à priori pour le Nextion la programmation est bonne dans config.h
    dans MMDVM.ini:
    Port=modem
    # Port=/dev/ttyAMA0
    Désolé si je fais une erreur
    73 de F1IZL

  2. Bonjour Christian,

    Merci pour le travail accompli sur le MMDVM. Que dire de la suite des réjouissances avec les cartes STM32F446RE, des nouveaux développements sur une nouvelle carte MMDVM ??

    Merci pour le temps passé pour la communauté RA.

    73
    Bruno

    (Translation by F5UII)

    Hello Christian,
    Thank you for the work on the MMDVM. What about the continuation of the revelry with the STM32F446RE boards, new developments on a new MMDVM are coming ??
    Thanks for the time spent for the hamradio community.
    73
    Bruno

    1. Bruno
      Merci pour ces mots sympathiques et chaleureux…
      En effet, une nouvelle platine de filtrage MMDVM est en cours de design, toujours avec un maximum de composants standards à pattes. Voici l’avant projet en image ci-dessous.
      Les fonctions ajoutées par rapport à ma version Arduino Due :
      – Interface radio sur 2 prises mini-DIN, commutable à 1 prise unique mini-DIN
      – Interface radio sur connecteur 2,54mm et points de tests
      – Force des signaux RSSI du récepteur
      – 4 leds du mode de trafic actif (DMR, DSTAR, Yaesu Fusion System, P25)
      – 1 led d’alimentation et 1 led de vie de MMDVM
      – 1 connecteur pour écran LCD tactile Nextion

      Je me demande s’il n’y a pas un intérêt à ajouter 4 trous de fixations à la platine afin de permettre un montage plus aisé de l’ensemble. Voir ici Sur twitter

      (In english)
      Bruno
      Thank you for these warm and friendly words …
      Indeed, a new MMDVM filter shield is being designed, always with a maximum of standard components (soldered on holes). Here is the pre-project image below.
      The added functions compared to my version Arduino Due:
      – Radio interface on 2 mini-DIN sockets, switchable to a single mini-DIN socket
      – Radio interface on 2.54mm connector and test points
      – Strength of receiver RSSI signals
      – 4 active traffic mode LEDs (DMR, DSTAR, Yaesu Fusion System, P25)
      – 1 power LED and 1 Live MMDVM LED
      – 1 connector for Nextion touchscreen LCD

      I wonder if there is no interest in adding 4 holes of fixings to the shield and STM32 board in order to allow easier assembly. View here on twitter

      STM32 MMDVM mini DIN connectors
      Top view of STM32F4 MMDVM shield
      MMDVM Shield for STM32F4

  3. Bonjour Christian,

    Pour répondre a ta question :
    Le STM32F446 a 3 trous de fixation que l’on peut aisément utiliser. Comme la nouvelle carte MMDVM est enfichable sur le STM32F446 il faut juste pouvoir verrouiller l’ensemble.
    Une correspondance entre les trous du STM32 et la carte MMDVM-F446.

    73
    F1PTL Bruno

    (Translation)
    Hello Christian,

    To answer your question :
    The STM32F446 has 3 mounting holes that can be easily used. Since the new MMDVM card can be plugged into the STM32F446, you just have to be able to lock the entire setup.
    A match between the holes on the STM32 and the MMDVM-F446 is required.

    73
    F1PTL Bruno

    1. Salut Bruno,

      Merci de ton retour.
      C’est ce que j’ai exactement prévu, les 3 trous existants sur la platine STM32F4 sont reportés avec les mêmes diamètres et aux mêmes positions sur la platine de filtrage MMDVM STM32F4xx. Le montage pouvant ainsi se faire également sur une face ou l’autre du circuit assemblé.
      Il reste vrai qu’un des trous est difficilement exploitable car très proche d’un connecteur.
      Hole neadr connector of STM32F446
      De plus les 3 trous ne sont pas forcément alignés… rendant les perçages du support obligatoires avec un gabarit.

      73, Christian

      (Translation)
      Hi Bruno,

      Thank you for your comment.
      That’s what I planned, the 3 holes existing on the plate STM32F4 are transferred with the same diameters and the same positions on the filtering plate MMDVM STM32F4xx. The mounting can thus also be made on one face or the other of the assembled circuit.
      It remains true that one of the holes is difficult to exploit because it is very close to a connector.
      Moreover the 3 holes are not necessarily aligned … making the borings of the support with the aid of a template.

      73, Christian

  4. Bravo pour les belles images du futur système.
    Du beau et bon travail, félicitations F1IZL

    (Translation)
    Bravo for the beautiful images of the future system.
    Nice and good work, congratulations F1IZL

    1. Merci Jean-Yves
      Cela fait toujours plaisir
      😉

      (Translation)
      Thank you Jean-Yves
      It is always pleasant

      😉

  5. Nice work Christian! I have a STM32F446RE Nucleo and would like to buy your new filter-plate board for Nucleo. Either pcb ready made, or pcb with critical components. Is this possible?
    73 de oh6xi

    (Traduction)
    Bon travail Christian! J’ai un STM32F446RE Nucleo et je voudrais acheter votre nouvelle plaque de filtrage pour Nucleo. Soit un PCB tout prêt, soit PCB avec des composants critiques. Est-ce possible?
    73 de oh6xi

    1. Hello Ulf,

      Thank you for your message,

      The PCB is actually in production. Before proposing the plate to interested people, I will have to test it.
      I will than offer the possibility to have one for a few part only, extract from my future small stock. I may also provide the possibility to provide complet kit of components.

      You can let your email on this page to be informed when a grouped purchase is open : https://shop.f5uii.net/

      Here is the pictures of final design.

      73, Christian

      (Traduction)
      Bonjour Ulf,

      Merci pour votre message,

      Le PCB est en production. Avant de proposer la platine aux personnes intéressées, je vais devoir la tester.
      Je vais uniquement offrir la possibilité d’en avoir une pièce, à partir d’une petite quantité. Je pourrais également fournir la possibilité de fournir le kit complet des composants.

      Vous pouvez laisser votre e-mail sur cette page pour être informé lorsqu’un achat groupé sera ouvert: https://shop.f5uii.net/

      Voici les photos de la conception finale.

      73, Christian

      MMDVM plate for STM32 Nucleo
      STM32 Nucleo  MMDVM shield
      STM32 Nucleo  MMDVM shield

  6. Please,
    Can you do a manual, to update the stm32 but in Ubuntu?

    Many Thanks.

    (Translation F5UII)
    S’il vous plait,
    Pouvez-vous faire un guid de mise à jour du STM32 mais sous Ubuntu ?

    Merci beaucoup

    1. Joaquin,

      I have for moment no interest for using Ubuntu. Maybe since you asked the question have you find a manual. Do not hesitate to share it here.

      Thank you
      (Translation)
      Joaquin,
      Pour le moment, n’est pas d’intéret à utiliser Ubuntu. Peut être que depuis que vous avez posé la question avez vous trouver un guide. N’hésitez pas de le partager ici

      Merci

  7. Bonjour
    je viens de monter le modem mmdvm et j’ai un petit probleme
    quand je lance depuis le raspberry le mmdm.ini j’ai l’information suivante
    unable to read the firmware version after six attempts
    pour info le modem est mis sur un nucleo F401RE
    si vous avez une réponse à mon probleme ?
    73s
    jean paul F1BWT

    (Translation)Hello
    I have just mounted the modem mmdvm and I have a small problem
    When I run from the raspberry the mmdm.ini I have the following information
    Unable to read the firmware version after six attempts
    For info the modem is put on a nucleo F401RE
    If you have an answer to my problem?
    73s
    Jean paul F1BWT

    1. Bonjour Jean-Paul,

      Je n’ai pas testé la config avec cette version de platine Nucleo.
      Ce message indique que la communication série entre le Raspberry Pi et la platine modem MMDVM (le Nucleo) ne fonctionne pas.
      Il vous faut avoir :
      – Compiler et charger votre nucleo avec le firmware (comme indiqué sur ce tutoriel)
      – Je suppose que vous avez raccorder en USB la platine modem nucleo avec le Raspberry pi. Vérifiez que le port série est vu sur le raspberry (ls /dev/ttyACM0).
      – Finalement dans MMDVM.ini vérifier que vous avez bien avoir spécifier ce port série pour acceder au modem
      [Modem]
      Port=/dev/ttyACM0

      Voila pour mes premiers conseils basiques.

      (Translation)
      Hello Jean-Paul,

      I have not tested the config with this version of Nucleo board.
      This message indicates that serial communication between the Raspberry Pi and the MMDVM modem (the Nucleo) does not work.
      You must have:
      – First Compile and load your nucleo with the firmware (like indicated on this tutorial)
      – I guess you have to connect in USB the modem nucleo with the Raspberry pi. Verify that the serial port is seen on the raspberry ( ls /dev/ttyACM0 ).
      – Finally in MMDVM.ini check that you have correctly specified this serial port to access the modem
      [Modem]
      Port =/dev/ttyACM0

      Here is my first basic advice.

      1. Bonjour
        merci pour votre réponse
        le nucleo a été bien chargé
        le port série est bien vu sur le raspberry et le port est bien en ttyACM0
        voici la config.h que j(ai mis
        #define EXTERNAL_OSC 12288000
        #define ARDUINO_MODE_PINS
        #define STM32F4_NUCLEO_MORPHO_HEADER
        #define SEND_RSSI_DATA

        voila pour la config

        73.s
        jean paul F1BWT

        (Translation)
        Hello
        thank you for your reply
        The nucleo was well loaded
        The serial port is well seen on the raspberry and the port is well in ttyACM0
        Here is the config.h that i put
        #define EXTERNAL_OSC 12288000
        #define ARDUINO_MODE_PINS
        #define STM32F4_NUCLEO_MORPHO_HEADER
        #define SEND_RSSI_DATA

        Here for the config

        73.s
        Jean paul F1BWT

        1. Cela m’a l’air d’être correct coté du Config.h du modem MMDVM. Cela correspond précisément à ma configuration (j’ai également validé pour l’écran Nextion #define SERIAL_REPEATER). Je suppose que le même phénomène est constaté lorsque vous cherchez à lancer le logiciel de calibration avec la ligne de commande sudo /opt/MMDVMCal/MMDVMCal /dev/ttyACM0.

          La Led Live doit clignoter lentement à la mise sous tension du STM32 (alimenté par l’USB connecté au Raspberry Pi), et rapidement au démarrage de MMDVMHost, communication établie.

          (Translation)
          This seems to be correct on the MMDVM modem Config.h. This corresponds precisely to my configuration (I also validated for the Nextion display #define SERIAL_REPEATER). I guess the same thing happens when you’re trying to run the calibration software with the command line sudo /opt/MMDVMCal/MMDVMCal /dev/ttyACM0.

          The Live LED should flash slowly when the STM32 power is turned on (powered by the USB connected to the Raspberry Pi), and quickly when MMDVMHost starts, communication established.

          1. Bonsoir
            j’ai lancé mmdvmcal est j’ai: No reponse from the modem
            je reçois un 446re demain et je ferais l’installation dessus

            73.s
            jean paul

            (Translation)
            Good evening
            I have started mmdvmcal and then: No response from the modem
            I will get a 446re tomorrow and I would then reinstall on it
            73.s
            Jean Paul

  8. Bonjour
    je viens de recevoir le F446re et je l’ai chargé.
    Tout fonctionne.
    Donc c’est le F401re qui ne convenait pas.

    73.s

    Jean paul F1BWT

    (Translation)
    Hello
    I have just received the
    F446re and I have loaded it.
    everything is working
    Therefore the F401re which was not suitable

    73.s

    Jean paul F1BWT

    1. Bonjour,

      Voilà une bonne nouvelle ! On aura donc appris que la version Nucleo STM32F401RE ne fonctionne pas en tant que modem MMDVM.
      Merci Jean-Paul, et bons réglages !

      (Translation)
      Hello,

      That’s good news! It will be learned that the Nucleo STM32F401RE version does not work as a MMDVM modem.
      Thank you Jean-Paul, and good MMDVM tuning!

  9. bonjour
    un petit problème de ptt
    j’ai installer un ecran nexion (bien pratique)
    quand sur l’ecran s affiche DMR ou fusion la led ptt s allume
    et quand disparait DMR ou FUSION la led reste allumer en permanence ?
    avez vous rencontrer le probleme?
    73.s
    jp F1BWT

    (Translation)
    Hello
      A little problem of ptt
    I have installed a screen nexion (handy)
    When the display shows DMR or merge the led ptt s lights
    And when DMR or FUSION disappears, the LED remains on permanently?
    Have you encountered the problem?
    73.s
    Jp F1BWT

    1. Bonjour Jean-Paul,

      Non pas de soucis de Led du Mode qui reste allumée. Et la LED PTT reste allumée, l’émetteur en émission ?
      Vérifier que le signal en sortie de TCXO évolue entre 0 et 3.3V. Si le zéro n’est pas présent (tension plus haute), je vous invite à court-circuiter C22. Cela devrait régler cela.

      (Translation)
      Hello Jean-Paul,

      No worries here about Mode Led that stays on. For you, the PTT LED stays on, the transmitter in emission?
      Check that the signal output from TCXO is between 0 and 3.3V. If zero is not present (higher), I invite you to short circuit C22. That should fix that.

  10. bonsoir
    oui quand la led ptt est allumée la sortie ptt est active.
    demain je regarderais la sortie du tcxo à l’oscillo.
    bonne soirée
    jean paul F1BWT
    (Translation)
    Good evening
    Yes when the led ptt is lit the output ptt is active.
    Tomorrow I would watch the exit of the tcxo to the oscillo.
    good night
    Jean paul F1BWT

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *