Installation du port série UART2
publication: 10 janvier 2022 / mis à jour 10 janvier 2022
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:
- fiche GND sur borne GND de ESP32
- fiche + sur borne GPIO G17 de ESP32
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