Napisałem program do obsłu RS232 na podstawie tego co znalazłem w necie. Żeby program działał i nie zawiesił się muszę wcześniej odpalić HyperTerminal i otworzyć port COM pozniej go zamykam i dopiero mogę uruchomić mój program. W przeciwnym razie przy próbie odczytu program się zawiesza.
int rs232otworz(void)
{
//otwarcie portu COM4 z prawami RW
hCom = CreateFile( TEXT("COM4"), GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // default security attributes
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hCom == INVALID_HANDLE_VALUE)
{
printf("CreateFile failed with error %d.\n", GetLastError());
return 1;
}
//pobranie aktualnych ustawien portu
fSuccess = GetCommState(hCom, &dcb);
if (!fSuccess)
{
printf ("GetCommState failed with error %d.\n", GetLastError());
return 2;
}
//ustawienie naszej konfiguracji
dcb.BaudRate = CBR_9600; // predkosc transmisji
dcb.ByteSize = 8; // ilosc bitow danych
dcb.Parity = NOPARITY; // brak bitu parzystosci
dcb.StopBits = ONESTOPBIT; // dwa bity stopu
fSuccess = SetCommState(hCom, &dcb);
if (!fSuccess)
{
printf ("SetCommState failed with error %d.\n", GetLastError());
return 3;
}
return 101;
}
int rs232wyslij(void)
{
//wyslanie 1 bajta przez RS
fSuccess = WriteFile( hCom, &paczka, 24, &RS_ile, 0);
if (!fSuccess)
{
printf ("WriteFile failed with error %d.\n", GetLastError());
return 4;
}
return 202;
}
int rs232odbierz(void)
{
fSuccess = ReadFile( hCom, &RS_bufodb, 24, &RS_ile, 0);
if (!fSuccess)
{
printf ("ReadFile failed with error %d.\n", GetLastError());
return 5;
}
return 555;
}
}