F5UII – Station radioamateur française

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

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

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
      #define EXTERNAL_OSC 12000000)
      
    2. Indiquer la version de la carte de filtrage
      #define ARDUINO_DUE_NTH
    3. Informer le réseau du niveau de signal mesuré par le récepteur
      #define SEND_RSSI_DATA
    4. Valider le brochage pour installer un écran tactile Nextion
      #define SERIAL_REPEATER
/*
 *   Copyright (C) 2015,2016 by Jonathan Naylor G4KLX
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#if !defined(CONFIG_H)
#define  CONFIG_H

// Allow for the use of high quality external clock oscillators
// The number is the frequency of the oscillator in Hertz.
//
// The frequency of the TCXO must be an integer multiple of 48000.
// Frequencies such as 12.0 Mhz (48000 * 250) and 14.4 Mhz (48000 * 300) are suitable.
// Frequencies such as 10.0 Mhz (48000 * 208.333) or 20 Mhz (48000 * 416.666) are not suitable.
//
// For 12 MHz
// #define EXTERNAL_OSC 12000000
// For 12.288 MHz
// #define EXTERNAL_OSC 12288000
// For 14.4 MHz
// #define EXTERNAL_OSC 14400000
// For 19.2 MHz
// #define EXTERNAL_OSC 19200000

// Allow the use of the COS line to lockout the modem
// #define USE_COS_AS_LOCKOUT

// Use pins to output the current mode
#define ARDUINO_MODE_PINS

// For the original Arduino Due pin layout
// #define ARDUINO_DUE_PAPA

// For the ZUM V1.0 and V1.0.1 boards pin layout
//#define ARDUINO_DUE_ZUM_V10

// For the SP8NTH board
// #define ARDUINO_DUE_NTH

// For ST Nucleo-64 STM32F446RE board
#define STM32F4_NUCLEO_MORPHO_HEADER
// #define STM32F4_NUCLEO_ARDUINO_HEADER

// To use wider C4FSK filters for DMR, System Fusion and P25 on transmit
// #define WIDE_C4FSK_FILTERS_TX
// To use wider C4FSK filters for DMR, System Fusion and P25 on receive
// #define WIDE_C4FSK_FILTERS_RX

// Pass RSSI information to the host
#define SEND_RSSI_DATA

// Use the modem as a serial repeater for Nextion displays
// #define SERIAL_REPEATER

#endif

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

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.
    cd MMDVM
    
  2. Effacer toutes traces de fichiers déjà compilé
    make clean
  3. Puis pour le nucleo STM32F446 lancer la compilation.
    make nucleo
  4. Si vous avez une platine Discovery STM32F407, lancer la compilation
    make dis

 

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
21:35:54 : [outp.hex] opened successfully.
21:35:54 : [outp.hex] checksum : 0x00406CE1 
21:36:02 : ST-LINK SN : 0667FF535752877167095321
21:36:02 : ST-LINK Firmware version : V2J27M15
21:36:02 : Connected via SWD.
21:36:02 : SWD Frequency = 4,0 MHz.
21:36:02 : Connection mode : Normal.
21:36:02 : Debug in Low Power mode enabled.
21:36:02 : Device ID:0x421 
21:36:02 : Device flash Size : 512KBytes
21:36:02 : Device family :STM32F446xx
21:36:06 : Memory programmed in 1s and 810ms.
21:36:06 : Verification...OK
21:36:06 : Programmed memory Checksum: 0x00406CE1

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.