7 - Afficher des infos avec le "Virtual COM port"

De Wiki L.A.B
Aller à : navigation, rechercher

7 - Afficher des infos avec le "Virtual COM port"

Le but de cet atelier est de mettre en évidence la communication entre l'ordinateur avec la carte STM32. La carte NUCLEO-L476RG est équipée d'une fonction periphérique USART (Universal Synchronous/Asynchronous Receiver Transmitter), un emetteur-recepteur synchrone et asynchrone universel, qui permet de faire la liaison entre l'ordinateur et le port série. On qualifie une liaison d'asynchrone lorsque qu'aucune horloge (bit clock) n'est transmise entre l’émetteur et le récepteur. Le récepteur ignore quand il va recevoir une donnée. Contrairement à un UART (Universal Asynchronous Receiver Transmitter), un USART peut travailler en mode "synchrone".

Afin de visualiser les échanges entre la carte et l'ordinateur, nous utiliserons le "Virtual COM port" qui nous permettra de visualiser ce qui se passe au niveau de la carte à travers une fenêtre de terminal.


Configuration du périphérique USART dans STM32CubeMX

- Créer un nouveau projet et configurer l'USART comme défini sur l'image suivante


TestUart.PNG

- Dans l'onglet "Configuration", sélectionner une longueur de mot de 8 bits (Word Length : 8 Bits)

USART ConfigurationWordLength.png

Configuration du Virtual COM port

- Sur un ordinateur Windows, aller dans le gestionnaire de périphérique (Device Manager) pour visualiser le numéro du port (COM4 dans le cas présent)

COM4-DeviceManager.png


Affichage du terminal de la carte STM32

- Pour établir la connexion avec la laison série RS-232, nous utiliserons un émulateur de terminal (logiciel libre disponible sous différents OS) : Putty. - Sélectionner le type de connexion "série" (Connection type : Serial) - Serial line : COM4 (Cf étape précédente) - Speed : 9600 (à préciser)

Putty-COM4.png

Note : Pour éviter un soucis de visualisation au niveau du terminal (Cf image suivante, activer l'option du terminal "Implicit CR in every LF" disponible).


VisualisationIssue-Putty.png
Putty-terminalOption.png



Afficher un message dans le virtual port COM

Pour afficher du texte à l'interieur d'un code "C", la librarie standard propose la fonction "printf" comme "print formaté".

La fonction prend un premier paramètre de "format". Ceci peut être un texte à afficher lui même ou contenir des balises qui seront remplacées par des valeurs de paramètres lors de l'affichage.

Exemple :

La suite d'instructions:

  char B = 'A';
  printf("Le caractère %c a le code %i !\n", B, B);

va afficher sur l'écran:

  Le caractère A a le code 65 !


Code à expliciter


int _write(int file, char *ptr, int len)
{
 if ( HAL_UART_Transmit( &huart2, ( unsigned char* ) ptr, len, 1000 ) != HAL_OK )
  return -1;
 return len;
}



int _read(int file, char *ptr, int len)
{
 HAL_StatusTypeDef status;
 int retcode = 0;

 if (len != 0)
 {
  status = HAL_UART_Receive( &huart2, (uint8_t *) ptr, len, HAL_MAX_DELAY);

  if (status == HAL_OK)
   retcode = len;
  else
   retcode = -1;
 }
 return( retcode);
}




  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  printf( "Hello world\n" );

  char Text[ 10 ];
  setvbuf(stdin, NULL, _IONBF, 0);
  while (1)
  {

   printf( "Secret Number: \n" );

   int ch, i;
   i = 0;
   while ( i < sizeof( Text ) - 1 )
   {
    ch = getchar();
    printf( "%c", ch );
    if ( ch == '\n' || ch == '\r' )
     break;
    Text[ i++ ] = ch;
   }
   Text[ i ] = 0;

   if ( strcmp( Text, "1234" ) )
    printf( "Bad code\n");
   else
    printf( "Code OK\n");


  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

Afficher dans Eclipse (Windows) un message provenant du Virtual COM PORT