J'ai réalisé un petit programme en C pour communiquer par le port série avec
un montage à micro-controleur.
Mon problème est que lors d'un démarrage de session XP, il faut que je lance
un logiciel communicant avec le port série (Hyperterminal) pour débloquer le
port série.
En effet, sinon mon programme n'arrive pas à communiquer avec mon montage.
Après avoir lancé Hyper terminal et ouvert une connexion avec le port Com1,
j'arrête Hyperterminal et la je peux lancer mon prog autant de fois que je
veux et tout marche bien.
Comment faire pour débloquer le port série par mon programme ?
J'ai réalisé un petit programme en C pour communiquer par le port série avec un montage à micro-controleur.
<snip>
Comment faire pour débloquer le port série par mon programme ?
Montres nous ton code.
Arnaud
Noé
"SLO" a écrit dans le message de news:3f6c77ad$0$28879$
Bonjour,
J'ai réalisé un petit programme en C pour communiquer par le port série
avec
un montage à micro-controleur.
Mon problème est que lors d'un démarrage de session XP, il faut que je
lance
un logiciel communicant avec le port série (Hyperterminal) pour débloquer
le
port série. En effet, sinon mon programme n'arrive pas à communiquer avec mon montage.
Après avoir lancé Hyper terminal et ouvert une connexion avec le port
Com1,
j'arrête Hyperterminal et la je peux lancer mon prog autant de fois que je veux et tout marche bien.
Comment faire pour débloquer le port série par mon programme ?
Merci d'avance -- Nicolas
Ne serait-ce pas plutot que ton programme ne configure pas correctement le port série, et qu'une ouverture par HT soit requise pour effecter cette configuration à sa place ?? Essaye de poster un bout de code pour voir si tu n'as rien oublié.
"SLO" <djsloNOSPAM@ifrance.com> a écrit dans le message de
news:3f6c77ad$0$28879$626a54ce@news.free.fr...
Bonjour,
J'ai réalisé un petit programme en C pour communiquer par le port série
avec
un montage à micro-controleur.
Mon problème est que lors d'un démarrage de session XP, il faut que je
lance
un logiciel communicant avec le port série (Hyperterminal) pour débloquer
le
port série.
En effet, sinon mon programme n'arrive pas à communiquer avec mon montage.
Après avoir lancé Hyper terminal et ouvert une connexion avec le port
Com1,
j'arrête Hyperterminal et la je peux lancer mon prog autant de fois que je
veux et tout marche bien.
Comment faire pour débloquer le port série par mon programme ?
Merci d'avance
--
Nicolas
Ne serait-ce pas plutot que ton programme ne configure pas correctement le
port série, et qu'une ouverture par HT soit requise pour effecter cette
configuration à sa place ?? Essaye de poster un bout de code pour voir si tu
n'as rien oublié.
"SLO" a écrit dans le message de news:3f6c77ad$0$28879$
Bonjour,
J'ai réalisé un petit programme en C pour communiquer par le port série
avec
un montage à micro-controleur.
Mon problème est que lors d'un démarrage de session XP, il faut que je
lance
un logiciel communicant avec le port série (Hyperterminal) pour débloquer
le
port série. En effet, sinon mon programme n'arrive pas à communiquer avec mon montage.
Après avoir lancé Hyper terminal et ouvert une connexion avec le port
Com1,
j'arrête Hyperterminal et la je peux lancer mon prog autant de fois que je veux et tout marche bien.
Comment faire pour débloquer le port série par mon programme ?
Merci d'avance -- Nicolas
Ne serait-ce pas plutot que ton programme ne configure pas correctement le port série, et qu'une ouverture par HT soit requise pour effecter cette configuration à sa place ?? Essaye de poster un bout de code pour voir si tu n'as rien oublié.
SLO
"Noé" a écrit dans le message de news: bkjqqs$6g7$
Ne serait-ce pas plutot que ton programme ne configure pas correctement le port série, et qu'une ouverture par HT soit requise pour effecter cette configuration à sa place ?? Essaye de poster un bout de code pour voir si
// On ouvre le port série g_hCom = CreateFile(strPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING,NULL);
if(g_hCom == INVALID_HANDLE_VALUE) { // Echec g_ErrCom=e_ErrCom_Creation; } else { // On vide les buffers
// On paramètre le port série g_DCB.DCBlength = sizeof(DCB); //Configuration actuelle GetCommState(g_hCom, &g_DCB); //Modification du DCB g_DCB.BaudRateºudRate; g_DCB.ByteSize=BitsSize; g_DCB.Parity=Parity; g_DCB.StopBits=StopBits; g_DCB.fDtrControl=DTR_CONTROL_DISABLE; //Configuration de la liaison serie SetCommState(g_hCom,&g_DCB); } return g_ErrCom; }
Je précise que c'est une fonction qui n'est pas de moi (il faut rendre à César... ;o) ).
Merci d'avance -- Nicolas
"Noé" <noeglups@yahoo.fr> a écrit dans le message de news:
bkjqqs$6g7$1@news-reader5.wanadoo.fr...
Ne serait-ce pas plutot que ton programme ne configure pas correctement le
port série, et qu'une ouverture par HT soit requise pour effecter cette
configuration à sa place ?? Essaye de poster un bout de code pour voir si
// On ouvre le port série
g_hCom = CreateFile(strPort,GENERIC_READ |
GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH |
FILE_FLAG_NO_BUFFERING,NULL);
if(g_hCom == INVALID_HANDLE_VALUE)
{
// Echec
g_ErrCom=e_ErrCom_Creation;
}
else
{
// On vide les buffers
// On paramètre le port série
g_DCB.DCBlength = sizeof(DCB);
//Configuration actuelle
GetCommState(g_hCom, &g_DCB);
//Modification du DCB
g_DCB.BaudRateºudRate;
g_DCB.ByteSize=BitsSize;
g_DCB.Parity=Parity;
g_DCB.StopBits=StopBits;
g_DCB.fDtrControl=DTR_CONTROL_DISABLE;
//Configuration de la liaison serie
SetCommState(g_hCom,&g_DCB);
}
return g_ErrCom;
}
Je précise que c'est une fonction qui n'est pas de moi (il faut rendre à
César... ;o) ).
"Noé" a écrit dans le message de news: bkjqqs$6g7$
Ne serait-ce pas plutot que ton programme ne configure pas correctement le port série, et qu'une ouverture par HT soit requise pour effecter cette configuration à sa place ?? Essaye de poster un bout de code pour voir si
// On ouvre le port série g_hCom = CreateFile(strPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING,NULL);
if(g_hCom == INVALID_HANDLE_VALUE) { // Echec g_ErrCom=e_ErrCom_Creation; } else { // On vide les buffers
// On paramètre le port série g_DCB.DCBlength = sizeof(DCB); //Configuration actuelle GetCommState(g_hCom, &g_DCB); //Modification du DCB g_DCB.BaudRateºudRate; g_DCB.ByteSize=BitsSize; g_DCB.Parity=Parity; g_DCB.StopBits=StopBits; g_DCB.fDtrControl=DTR_CONTROL_DISABLE; //Configuration de la liaison serie SetCommState(g_hCom,&g_DCB); } return g_ErrCom; }
Je précise que c'est une fonction qui n'est pas de moi (il faut rendre à César... ;o) ).
Merci d'avance -- Nicolas
Noé
"SLO" a écrit dans le message de news:3f6e059d$0$13273$
"Noé" a écrit dans le message de news: bkjqqs$6g7$ > Ne serait-ce pas plutot que ton programme ne configure pas correctement
le
> port série, et qu'une ouverture par HT soit requise pour effecter cette > configuration à sa place ?? Essaye de poster un bout de code pour voir
// On ouvre le port série g_hCom = CreateFile(strPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING,NULL);
if(g_hCom == INVALID_HANDLE_VALUE) { // Echec g_ErrCom=e_ErrCom_Creation; } else { // On vide les buffers
// On paramètre le port série g_DCB.DCBlength = sizeof(DCB); //Configuration actuelle GetCommState(g_hCom, &g_DCB); //Modification du DCB g_DCB.BaudRateºudRate; g_DCB.ByteSize=BitsSize; g_DCB.Parity=Parity; g_DCB.StopBits=StopBits; g_DCB.fDtrControl=DTR_CONTROL_DISABLE; //Configuration de la liaison serie SetCommState(g_hCom,&g_DCB); } return g_ErrCom; }
Je précise que c'est une fonction qui n'est pas de moi (il faut rendre à César... ;o) ).
AMHA,
- pas de test des valeurs de retour de GetCommState et SetCommState, ton César ne doit pas se vanter... - le DCB n'est pas complètement initialisé (CTS, DSR, ...) - aucune mention des TIMEOUTs
Ce que je pourrais te conseiller (peu académique mais très instructif), c'est de faire un GetCommState, puis d'afficher TOUS les paramètres, et ce avant HyperTerminal, puis après. Tu verrais vite ce qui a été oublié par le vieux Jules.
Merci d'avance -- Nicolas
Ils sont fous ces...
"SLO" <djsloNOSPAM@ifrance.com> a écrit dans le message de
news:3f6e059d$0$13273$626a54ce@news.free.fr...
"Noé" <noeglups@yahoo.fr> a écrit dans le message de news:
bkjqqs$6g7$1@news-reader5.wanadoo.fr...
> Ne serait-ce pas plutot que ton programme ne configure pas correctement
le
> port série, et qu'une ouverture par HT soit requise pour effecter cette
> configuration à sa place ?? Essaye de poster un bout de code pour voir
// On ouvre le port série
g_hCom = CreateFile(strPort,GENERIC_READ |
GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH |
FILE_FLAG_NO_BUFFERING,NULL);
if(g_hCom == INVALID_HANDLE_VALUE)
{
// Echec
g_ErrCom=e_ErrCom_Creation;
}
else
{
// On vide les buffers
// On paramètre le port série
g_DCB.DCBlength = sizeof(DCB);
//Configuration actuelle
GetCommState(g_hCom, &g_DCB);
//Modification du DCB
g_DCB.BaudRateºudRate;
g_DCB.ByteSize=BitsSize;
g_DCB.Parity=Parity;
g_DCB.StopBits=StopBits;
g_DCB.fDtrControl=DTR_CONTROL_DISABLE;
//Configuration de la liaison serie
SetCommState(g_hCom,&g_DCB);
}
return g_ErrCom;
}
Je précise que c'est une fonction qui n'est pas de moi (il faut rendre à
César... ;o) ).
AMHA,
- pas de test des valeurs de retour de GetCommState et SetCommState, ton
César ne doit pas se vanter...
- le DCB n'est pas complètement initialisé (CTS, DSR, ...)
- aucune mention des TIMEOUTs
Ce que je pourrais te conseiller (peu académique mais très instructif),
c'est de faire un GetCommState, puis d'afficher TOUS les paramètres, et ce
avant HyperTerminal, puis après. Tu verrais vite ce qui a été oublié par le
vieux Jules.
// On ouvre le port série g_hCom = CreateFile(strPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING,NULL);
if(g_hCom == INVALID_HANDLE_VALUE) { // Echec g_ErrCom=e_ErrCom_Creation; } else { // On vide les buffers
// On paramètre le port série g_DCB.DCBlength = sizeof(DCB); //Configuration actuelle GetCommState(g_hCom, &g_DCB); //Modification du DCB g_DCB.BaudRateºudRate; g_DCB.ByteSize=BitsSize; g_DCB.Parity=Parity; g_DCB.StopBits=StopBits; g_DCB.fDtrControl=DTR_CONTROL_DISABLE; //Configuration de la liaison serie SetCommState(g_hCom,&g_DCB); } return g_ErrCom; }
Je précise que c'est une fonction qui n'est pas de moi (il faut rendre à César... ;o) ).
AMHA,
- pas de test des valeurs de retour de GetCommState et SetCommState, ton César ne doit pas se vanter... - le DCB n'est pas complètement initialisé (CTS, DSR, ...) - aucune mention des TIMEOUTs
Ce que je pourrais te conseiller (peu académique mais très instructif), c'est de faire un GetCommState, puis d'afficher TOUS les paramètres, et ce avant HyperTerminal, puis après. Tu verrais vite ce qui a été oublié par le vieux Jules.
Merci d'avance -- Nicolas
Ils sont fous ces...
halfwolf
"Noé" wrote in message news:<bknics$1b4$...
AMHA,
- pas de test des valeurs de retour de GetCommState et SetCommState, ton César ne doit pas se vanter... - le DCB n'est pas complètement initialisé (CTS, DSR, ...) - aucune mention des TIMEOUTs
A mon avis le problème vient des TIMEOUTs.
Ce que je pourrais te conseiller (peu académique mais très instructif), c'est de faire un GetCommState, puis d'afficher TOUS les paramètres, et ce avant HyperTerminal, puis après. Tu verrais vite ce qui a été oublié par le vieux Jules.
Faire de même avec GetCommTimeouts.
HalfWolf
"Noé" <noeglups@yahoo.fr> wrote in message news:<bknics$1b4$1@news-reader4.wanadoo.fr>...
AMHA,
- pas de test des valeurs de retour de GetCommState et SetCommState, ton
César ne doit pas se vanter...
- le DCB n'est pas complètement initialisé (CTS, DSR, ...)
- aucune mention des TIMEOUTs
A mon avis le problème vient des TIMEOUTs.
Ce que je pourrais te conseiller (peu académique mais très instructif),
c'est de faire un GetCommState, puis d'afficher TOUS les paramètres, et ce
avant HyperTerminal, puis après. Tu verrais vite ce qui a été oublié par le
vieux Jules.
- pas de test des valeurs de retour de GetCommState et SetCommState, ton César ne doit pas se vanter... - le DCB n'est pas complètement initialisé (CTS, DSR, ...) - aucune mention des TIMEOUTs
A mon avis le problème vient des TIMEOUTs.
Ce que je pourrais te conseiller (peu académique mais très instructif), c'est de faire un GetCommState, puis d'afficher TOUS les paramètres, et ce avant HyperTerminal, puis après. Tu verrais vite ce qui a été oublié par le vieux Jules.
Faire de même avec GetCommTimeouts.
HalfWolf
SLO
"HalfWolf" a écrit dans le message de news:
Faire de même avec GetCommTimeouts.
Merci pour vos conseils.
J'ai ajouté un GetCommTimeouts et un GetCommState et j'ai comparé les résultats avant et après lancement de HyperTerminal.
J'ai trouvé des différences et j'ai donc ajouté les mêmes paramètre de Timeouts et CommState qu'après HyperTerminal avec les fonctions SetCommState et SetCommTimeouts.
Mais ça ne marche pas...
En fait le PC arrive bien à écrire sur le port et mon montage reçoit bien les données, mais dans l'autre sens ça ne marche toujours pas tant que je ne lance pas HyperTerminal.
Que faire ? y a t il d'autres choses à paramétrer que CommState et CommTimeouts ?
Merci d'avance -- Nicolas
"HalfWolf" <halfwolf@free.fr> a écrit dans le message de news:
1a759353.0309230021.420456fa@posting.google.com...
Faire de même avec GetCommTimeouts.
Merci pour vos conseils.
J'ai ajouté un GetCommTimeouts et un GetCommState et j'ai comparé les
résultats avant et après lancement de HyperTerminal.
J'ai trouvé des différences et j'ai donc ajouté les mêmes paramètre de
Timeouts et CommState qu'après HyperTerminal avec les fonctions SetCommState
et SetCommTimeouts.
Mais ça ne marche pas...
En fait le PC arrive bien à écrire sur le port et mon montage reçoit bien
les données, mais dans l'autre sens ça ne marche toujours pas tant que je ne
lance pas HyperTerminal.
Que faire ? y a t il d'autres choses à paramétrer que CommState et
CommTimeouts ?
J'ai ajouté un GetCommTimeouts et un GetCommState et j'ai comparé les résultats avant et après lancement de HyperTerminal.
J'ai trouvé des différences et j'ai donc ajouté les mêmes paramètre de Timeouts et CommState qu'après HyperTerminal avec les fonctions SetCommState et SetCommTimeouts.
Mais ça ne marche pas...
En fait le PC arrive bien à écrire sur le port et mon montage reçoit bien les données, mais dans l'autre sens ça ne marche toujours pas tant que je ne lance pas HyperTerminal.
Que faire ? y a t il d'autres choses à paramétrer que CommState et CommTimeouts ?
Merci d'avance -- Nicolas
halfwolf
"SLO" wrote in message news:<3f71f326$0$20618$...
En fait le PC arrive bien à écrire sur le port et mon montage reçoit bien les données, mais dans l'autre sens ça ne marche toujours pas tant que je ne lance pas HyperTerminal.
Peux-tu me montrer la partie de ton code qui fait la lecture et la partie de ton code qui fait SetCommState et SetCommTimeouts ?
HalfWolf
"SLO" <djsloNOSPAM@ifrance.com> wrote in message news:<3f71f326$0$20618$626a54ce@news.free.fr>...
En fait le PC arrive bien à écrire sur le port et mon montage reçoit bien
les données, mais dans l'autre sens ça ne marche toujours pas tant que je ne
lance pas HyperTerminal.
Peux-tu me montrer la partie de ton code qui fait la lecture et la
partie de ton code qui fait SetCommState et SetCommTimeouts ?
En fait le PC arrive bien à écrire sur le port et mon montage reçoit bien les données, mais dans l'autre sens ça ne marche toujours pas tant que je ne lance pas HyperTerminal.
Peux-tu me montrer la partie de ton code qui fait la lecture et la partie de ton code qui fait SetCommState et SetCommTimeouts ?
HalfWolf
SLO
"HalfWolf" a écrit dans le message de news:
Peux-tu me montrer la partie de ton code qui fait la lecture et la partie de ton code qui fait SetCommState et SetCommTimeouts ?
Voila, j'ai rajouté ça dans la fonction qui ouvre le port :
// On ouvre le port série g_hCom = CreateFile(strPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING,0);
// On ouvre le port série
g_hCom = CreateFile(strPort,GENERIC_READ |
GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH |
FILE_FLAG_NO_BUFFERING,0);
// On ouvre le port série g_hCom = CreateFile(strPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING,0);
Merci et désolé pour la réponse tardive. j'ai fait des modifications en tenant compte de ton dernier post, mais ça ne marche toujours pas. Cependant il faut que je regarde ça plus en détail ce week-end pour voir si ça ne vient pas de mon code.
-- Nicolas
HalfWolf a écrit:
après, ça marche chez moi.
HalfWolf
Merci et désolé pour la réponse tardive.
j'ai fait des modifications en tenant compte de ton dernier post, mais
ça ne marche toujours pas.
Cependant il faut que je regarde ça plus en détail ce week-end pour voir
si ça ne vient pas de mon code.
Merci et désolé pour la réponse tardive. j'ai fait des modifications en tenant compte de ton dernier post, mais ça ne marche toujours pas. Cependant il faut que je regarde ça plus en détail ce week-end pour voir si ça ne vient pas de mon code.