MMDVM installation on a STM32F4xx board

Next to my previous article devoted to programming MMDVM firmware on an Arduino Due board, here is the step-by-step presentation of programming MMDVM on a STM32F4xx board.

Synoptic of a repeater using the "MultiMode Digital Voice Modem" (MMDVM) installed on an STM32 board

Synoptic of a repeater using the “MultiMode Digital Voice Modem” (MMDVM) installed on an STM32 board

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€)

The STM32F4xx board of the manufacturer ST Micro electronic advantageously allows to replace the Arduino Due in its application of multimode digital MMDVM repeater . Moreover the STM32F446RE Nucleo for example is accessible at a rather low price (about 15 €)

Borchage de la carte Nucleo STM32F4

Pinout of the Nucleo STM32F4 Board

Download MMDVM

  1. The firmware (software) of MMDVM must be download on github platform.
    https://github.com/g4klx/MMDVM
  2. Download the ZIP file from the top right button
  3. Unzip MMDVM-master.zip file in a directory.
  4. Rename the directory to  MMDVM
  5. Open the configuration file “Config.h” to match to my MMDVM filtering shield:
    1. Validate the 12 MHz external oscillator
    2. Indicate the version of the MMDVM board
    3. Inform the network of the signal level measured by the receiver
    4. Validate pin assignment to install a Nextion touch screen

Download the ST library

  1. Download the library STM32F4XX_Lib.zip
  2. Unzip the file
  3. Move all files and subdirectories into the MMDVM directory, before created

Download free compiler utility

  1. Download the compressed file Binaries ZIP on http://gnuwin32.sourceforge.net/packages/make.htm  (or directly here make-3-81-bin)
  2. Unzip the file
  3. Copy the make.exe file from bin subdirectorydu in MMDVM directory

Download Dependencies

  1. Download the dependencies ZIP file on http://gnuwin32.sourceforge.net/packages/make.htm  (or directly here make-3-81-dep)
  2. Unzip the file
  3. Copy the following files from bin subdirectorydu in MMDVM directory
  • libintl3.dll
  • libiconv2.dll

Here is an excerpt of the files contained at this stage in the MMDVM directory.

Download the integrated software suite for ARM

  1. Download the dedicated software for compilation of ARM electronic compotents on https://launchpad.net/gcc-arm-embedded/+download (or directly here gcc-arm-none-eabi-5_4-2016q3-20160926-win32.exe)
  2. Install the software with the default path
  3. Execute from the “GNU Tools for ARM Embedded Processors” t menu the “GCC Command Prompt” line

Start compilation

  1. From the command window (GCC Command Prompt), go to the MMDVM directory.
  2. Clear all traces of already compiled files

  3. Then for the nucleo STM32F446 board, start the compilation.
  4. If you have a Discovery STM32F407 board,  start compilation

Compilation of MMDVM for STM32F446

The outp.hex and outp.bin files are available in the bin subdirectory and will now be loaded on the STM32F4xx.

Download and program the STM32F4 board

  1. Download the programing software provided by the manufacturer ST Micro Electronics “STM32 ST-LINK Utility”  (On the websiote of ST Micro Electronics You must submit your email address in order to receive the download link, or download it directly here en-stsw-link004.zip)
  2. Unzip
  3. Start intsllation of  STM32 ST-LINK Utility
  4. Connect your board via USB cable to your PC
  5. The default installation destination is fine
  6. The USB driver will also be installed, after a first click on Next
  7. Validate the installation of the USB drivers of the STM32 board by clicking the Install button (two times)
  8. Launch the STM32 ST-Link software available in the start menu
  9. Ouvrir le fichier compilé outp.hex (ou bien outp.bin) se trouvant dans le sous-répertoire bin\
  10. Connect the STM32F4xx board to one of your USB sockets.
  11. Start loading (programming) the board via the Target menu then Program & Verify (or by keyboard shortcut CTRL + P)The following window opens.
  12. Click the Start button to start programming the STM32F4xx

    The console displays the correct execution “Verification…OK

The MMDVM filter pinout

In the table below, you will find the pinout to follow according to the board. My previous MMDVM shield for Arduino uses the NTH definition.
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!

29 thoughts on “MMDVM installation on a STM32F4xx board

  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

  11. Bonjour,

    Je suis nouveau dans le numérique DMR, j’essaye de compiler les logiciels pour intégrer une carte MMDVM sur une Nucleo-64 et j’ai une erreur de compilation sous W 64 dont je vous joint une image .jpg en pièce jointe .
    RRRIB(NULL)
    Avez vous déjà eu ce problème ?

    J’ai fait du C sous UNIX et Linux mais il y a bien longtemps …
    Merci de votre éclaircissement

    Bien cordialement
    Pierre-François, F5BQP

    (Translation)
    Hello,

    I’m new on DMR digital, I’m trying to compile software to integrate an MMDVM board on a Nucleo-64 and I have a compilation error on W64 and I’m attaching a. jpg image to it.
    Have you ever had this problem?

    I did C under UNIX and Linux but a long time ago…
    Thank you for your clarification

    Yours sincerely
    Pierre-François, F5BQP

    1. Bonjour Pierre-François,

      J’ai trouvé cette information sur github pour le même problème [ NULL non déclaré m_rssi(NULL) ]: https://github.com/g4klx/MMDVM/issues/116
      Les différents fichiers sont bien positionnés dans le répertoire (un sous-répertoire MMDVM/STM32F4XX_Lib existe)?

      73

      (Translation)
      Hello Pierre-François,

      I found this information on github for the same problem [ NULL non déclaré m_rssi(NULL) ]: https://github.com/g4klx/MMDVM/issues/116
      Are the different files well positioned in the directory (a folder name MMDVM/STM32F4XX_Lib is existing ?)

      73

  12. Bonjour Christian,

    Merci pour les informations, j’ai réussi à compiler après ajout de la définition NULL dans la librairie ST .
    Je n’étais pas au fait de ce forum GitHub .

    Cordiales 73’s
    Pierre-François, F5BQP

    (Translation)
    Hello Christian,

    Thanks for the information, I managed to compile after adding the NULL definition in the ST library.
    I wasn’t aware of this GitHub forum.

    73
    Pierre-François, F5BQP

  13. Bonjour,

    En suivant la méthode décrite ici : https://www.f5uii.net/en/compilation-installation-configuration-mmdvm-stm32f4xx/ , je rencontre l’erreur suivante :

    E:\Radio\DMR\MMDVM_STM32\MMDVM-master>make clean
    /usr/bin/sh: del: command not found
    make: *** [clean] Error 127

    Le software suite for ARM a été installée en conservant le path par defaut ( c:/ProgramFiles )

    J’ai oublié quelque chose ?

    73
    Jeff, F5BCB

    (Translation)
    Hello,

    Following the method described here: https://www.f5uii.net/en/compilation-installation-configuration-mmdvm-stm32f4xx/, I encounter the following error:

    E:\Radio\DMR\MMDVM_STM32\MMDVM-master>make clean
    /usr/bin/sh: del: command not found
    make: *** [clean] Error 127

    The software suite for ARM has been installed with the default path (c: /ProgramFiles)

    Did I forget something?

    73
    Jeff, F5BCB

    1. Jeff,

      Es-tu sûr de lancer GCC en administrateur ?
      GCC comand prompt

      Je n’ai aucun soucis d’interprétation de la commande del de mon coté.

      73

      (Translation)
      Jeff,

      Are you sure you’re running GCC as administrator?
      GCC comand prompt

      I have no problem interpreting the command del on my side.

      73

  14. Christian,
    J’ai essayé en démarrant GCC en admin, puis en me plaçant dans le repertoire où est Make mais j’ai le même résultat.
    Je précise que je suis sou W7 et que le répertoire bin de GCC est dans le path
    Sinon, comment faire pour coller une copie d’écran ou une capture dans le forum ?

    Jeff

    (Translation)
    Christian,
    I tried starting GCC in admin, then placing myself in the directory where Make is but I have the same result.
    I point out that I’m under W7 and that the bin directory of GCC is in the path
    Otherwise, how do I paste a screenshot or capture into the forum?

    Jeff

    1. Curieux, de mon coté, cela fonctionne et aucun élément n’est ajouté au PATH.
      Pour le moment, je ne vois pas comment t’aider…
      Tu peux tout de même poursuivre pour voir. Car l’étape clean sert à supprimer les précédentes compilations. Et pour le moment, tu n’en as pas réalisée.
      Pour copier depuis une fenêtre DOS, clic droit, Sélectionner puis touche ENTREE.

      (Translation)
      Curiously, on my side, it works and no element is added to the PATH.
      For the moment, I don’t see help you more…
      You can still continue to see. Because the step clean code>is used only to delete the previous compilations. And so far, you haven’t realized it.
      To copy from a DOS window, right-click, Select then press ENTER.

  15. J’ai réussi à compiler et flasher le code avec une machine W7 32bits.
    Sur une plateforme W7 /64, je n’y suis jamais parvenu malgré tous les essais que j’ai pu faire.

    73,
    Jeff, F5BCB

    (Translation)
    I managed to compile and flash the code with a 32-bit W7 machine.
    On a W7 /64 platform, I never managed to do it despite all the tests I could do.

    73,
    Jeff, F5BCB

Leave a Reply

Your email address will not be published. Required fields are marked *