Bon difficile de trouver un titre , pour mon problème .
Je suis en train d'essayer de paramétrer un module(GSM2-click) avec des commandes "AT". Pour l'initialisation je dois tout d'abord effectivement le réglage du baud-rate en envoyant la commande "AT" au module. Quand celui me répond "OK", c'est que le baud-rate est bon.
Ensuite dans le même principe, j'envoie des commandes au module pour le paramétrer . il doit aussi me répondre "OK" pour valider le paramétrage.
Après plusieurs test, tout est bon. Je me dis alors que je peux "optimiser" mon code et le rendre plus propre. J'ai donc décider de créer une fonction pour envoyer une commande au module et je reviens quand j'ai reçu "OK" .
voici un code qui fonctionne :
Code : Tout sélectionner
//------------------------------------------------------------------------------
// Test du baud rate
while(1) {
UART_Write_Text("AT");
UART_Write(0x0D); // On termine par un CR
delay_ms(100);
if (ReponseID == GSM_OK){ // Si "OK" au test baud rate le programme peut continuer
ReponseID = 0;
break; // On sort de la bocule de test baud rate
}
}Dans ce code je rentre dans une boucle sans fin. j’envoie le mot "AT" au module, j’attends 100ms le temps de recevoir la réponse en UART. Si mon drapeau GSM_OK pendant ces 100ms, c'est que le module à répondu "OK", je peux sortir de ma boucle.
Sinon je re-envoi le mot"AT" ...Etc .... jusqu' a que je reçoive "OK".
Voici une autre partie du code qui fonctionne :
dans mon initialisation j'ai l'appel d'une fonction :
Code : Tout sélectionner
envoi_commande_Parametre("ATE0");Cette fonction, envoi la commande "ATE0" au module est attends la réponse " OK" . Exactement comme pour le "AT"
Vocii la fonction en question :
Code : Tout sélectionner
//------------------------------------------------------------------------
// Param. d'entrée : La commande à envoyer
void envoi_commande_Parametre(char *s1){
while(1) {
while(*s1) {
UART_Write(*s1++);
}
UART_Write(0x0D); // On termine par un CR
Delay_ms(100);
if (ReponseID == GSM_OK){
ReponseID = 0;
break;
}
}
}ca fonctionne bien.
Comme il s'agit de la même fonction pour envoyer "ATE0" et "AT" , je me dis que si je fais :
Code : Tout sélectionner
envoi_commande_Parametre("AT")Ca devrati faire la même chose .
Et ben non , le programme me renvoie que des "cr".
Je ne comprends pas pourquoi, il n'arrive pas a m'envoyer une série de "AT" pour faire le baud-rate avec ma fonction.
J'ai comme l'impression que le "AT" est envoyé une seul fois et qu’après plus rien n'est envoyé ! a part le "CR"
Du coup quelle est la durée de validité de l'argument envoyé ?
LE pointeur doit-il est remis au début ?
PS: j'ai un cable TTL-UART pour espionner le dialogue sur hyperterminal
RE-PS: Voici le programme en entier :
