7 - Afficher des infos avec le "Virtual COM port" : Différence entre versions

De Wiki L.A.B
Aller à : navigation, rechercher
(7 - Afficher des infos avec le "Virtual COM port")
Ligne 1 : Ligne 1 :
 
== 7 - Afficher des infos avec le "Virtual COM port" ==
 
== 7 - Afficher des infos avec le "Virtual COM port" ==
  
Le but de cet atelier est de faire communiquer l'ordinateur avec la carte STM32. La carte NUCLEO-L476RG est équipée d'une fonction periphérique USART (Universal Asynchronous Receiver Transmitter), un emetteur-recepteur asynchrone universel, qui permet de faire la liaison entre l'ordinateur et le port série.
+
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 un terminal.
 
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 un terminal.
  
  
=== Le "Virtual COM port" sur la carte Nucleo ===
+
== Configuration du périphérique USART dans STM32CubeMX ==
  
Sur notre carte "NUCLEO-L476RG", le périphérique USART2 est utilisé. Ainsi on va le mettre en service dans le logiciel STM32CubeMX comme déjà vu dans les ateliers précédents. Ainsi le code d'initialisation va être créé automatiquement.
+
- Créer un nouveau projet et configurer l'USART comme défini sur l'image suivante
  
 
<br>
 
<br>
 
[[Fichier:TestUart.PNG|center|]]
 
[[Fichier:TestUart.PNG|center|]]
 +
 +
 +
== Configuration du Virtual COM port ==
 +
 +
- Sur un ordinateur Windows, aller dans le gestionnaire de périphérique (Device Manager)
 +
- Le numéro du port devrait apparaitre (COM4 dans le cas présent)
 +
 +
[[Fichier:COM4-DeviceManager.png|center]]
  
 
=== Redirection du "output" de la fonction "C" "printf" ===
 
=== Redirection du "output" de la fonction "C" "printf" ===

Version du 22 mars 2018 à 11:51

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 un 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


Configuration du Virtual COM port

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

COM4-DeviceManager.png

Redirection du "output" de la fonction "C" "printf"

Pour afficher du texte à l'interieur d'un code "C", la standard librairie 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 balise qui seront remplacé dans le display par des valeurs des paramètres suivantes ou des caractères "échappé" (e.g.: "\n". Exemples:

  • printf(


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 */