Autres articles / Other articles

Installation du port série UART2

publication: 10 janvier 2022 / mis à jour 10 janvier 2022

Read this page in english

 

Appel à collaboration

Vous développez des montages, simples ou complexes avec ESP32 et ESP32forth.

Partagez-les ici sur ce site.

ESP32forth ne pourra se développer qu'avec la collaboration active de toutes les bonnes volontés.

Vos montages peuvent aider d'autres développeurs.

Les montages des autres développeurs peuvent vous aider.

Pour proposer un article ou un montage, cliquez ici


La carte ESP32 dispose de trois ports série: UART0 utilisé par le terminal, UART1 et UART2 non utilisés par ESP32Forth. Le rajout des mots permettant de gérer UART1 et UART2 pourrait être réalisé en langage FORTH à 100%. Mais ceci nécessite un laborieux travail d'ingénierie inverse. Ici, nous allons choisir la méthode qui consiste à modifier le code source de ESP32Forth.

Modification du fichier source ESP32forth.ino

ESP32Forth est fourni sous forme de fichier source, écrit en langage C. Ce fichier doit être compilé à l'aide de ARDUINO IDE ou tout autre compilateur C compatible avec l'environnement de développement ARDUINO.

Voici la portion de code à modifier:

#define REQUIRED_SERIAL_SUPPORT \
  X("Serial.begin", SERIAL_BEGIN, Serial.begin(tos); DROP) \
  X("Serial.end", SERIAL_END, Serial.end()) \
  X("Serial.available", SERIAL_AVAILABLE, PUSH Serial.available()) \
  X("Serial.readBytes", SERIAL_READ_BYTES, n0 = Serial.readBytes(b1, n0); NIP) \
  X("Serial.write", SERIAL_WRITE, n0 = Serial.write(b1, n0); NIP) \
  X("Serial.flush", SERIAL_FLUSH, Serial.flush())

Voici la portion de code qui le remplace:

#define REQUIRED_SERIAL_SUPPORT \
  X("Serial.begin", SERIAL_BEGIN, Serial.begin(tos); DROP) \
  X("Serial.end", SERIAL_END, Serial.end()) \
  X("Serial.available", SERIAL_AVAILABLE, PUSH Serial.available()) \
  X("Serial.readBytes", SERIAL_READ_BYTES, n0 = Serial.readBytes(b1, n0); NIP) \
  X("Serial.write", SERIAL_WRITE, n0 = Serial.write(b1, n0); NIP) \
  X("Serial.flush", SERIAL_FLUSH, Serial.flush()) \
  X("Serial2.begin", SERIAL2_BEGIN, Serial2.begin(tos); DROP) \
  X("Serial2.end", SERIAL2_END, Serial2.end()) \
  X("Serial2.available", SERIAL2_AVAILABLE, PUSH Serial2.available()) \
  X("Serial2.readBytes", SERIAL2_READ_BYTES, n0 = Serial2.readBytes(b1, n0); NIP) \
  X("Serial2.write", SERIAL2_WRITE, n0 = Serial2.write(b1, n0); NIP) \
  X("Serial2.flush", SERIAL2_FLUSH, Serial2.flush())

Voici une autre portion de code à modifier:

"vocabulary Serial   Serial definitions\n"
"transfer{\n"
"  Serial.begin Serial.end\n"
"  Serial.available Serial.readBytes\n"
"  Serial.write Serial.flush\n"
"}transfer\n"

Voici la portion de code qui le remplace:

"vocabulary Serial   Serial definitions\n"
"transfer{\n"
"  Serial.begin Serial.end\n"
"  Serial.available Serial.readBytes\n"
"  Serial.write Serial.flush\n"
"  Serial2.begin Serial2.end\n"
"  Serial2.available Serial2.readBytes\n"
"  Serial2.write Serial2.flush\n"
"}transfer\n"

On sauvegarde notre code source modifié.

Puis on lance ARDUINO IDE. On sélectionne notre fichier modifié. On lance "Upload"....

Une fois le fichier source compilé et le code transféré sur la carte ESP32, on peut vérifier si les nouveaux mots intégrés au vocabulaire Serial sont bien là:

 ok serial
--> cr vlist
Serial2.flush Serial2.write Serial2.readBytes Serial2.available Serial2.end 
Serial2.begin Serial.flush Serial.write Serial.readBytes Serial.available Serial.end 
Serial.begin 
 ok

Voilà!

Notre port série UART2 est maintenant accessible depuis ESP32Forth.

Test du port série UART2

Pour tester le port série, un oscilloscope est branché sur notre carte UART32:

On lance notre version modifiée de ESP32Forth. On compile ces quelques lignes de code FORTH:

\ change 
300 value #SERIAL2_RATE 
 
Serial \ Select Serial vocabulary 
 
\ initialise Serial2 
: Serial2.init ( -- ) 
    #SERIAL2_RATE Serial2.begin 
  ; 
 
: TXtest ( n -- ) 
    Serial2.init 
    0 do 
        s" xxx...xxx..."  
        Serial2.write drop 
    loop 
  ; 

Exécutons simplement 100 TXtest. L'oscilloscope affiche:

Nous avons la certitude que le port série UART2 est opérationnel.


Legal: site web personnel sans commerce / personal site without seling