C/Visual C - utilizacion del puerto serie en Visual C

 
Vista:

utilizacion del puerto serie en Visual C

Publicado por Jon (1 intervención) el 12/09/2002 00:39:33
Estoy haciendo un trabajo en C y necesito mandar y recibir caracteres por el puerto serie.Mis conocimientos en C no son muy avanzados, no conozco las funciones q debo utilizar para el recibir y enviar datos por el puerto serie.Agradeceria q alguien me explicara las funciones a utilizar y como hacerlo.Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Enviar y recibir caracteres por el puerto serie

Publicado por Alejandro (913 intervenciones) el 19/03/2025 19:45:11
Para enviar y recibir datos a través del puerto serie en C, especialmente en un entorno Windows, puedes utilizar las funciones de la API de Windows. Aquí te explico las funciones clave que necesitas y cómo utilizarlas.

1. Configuración del puerto serie



Antes de enviar o recibir datos, debes abrir y configurar el puerto serie. Aquí tienes un ejemplo de cómo hacerlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <windows.h>
#include <stdio.h>
 
HANDLE hSerial;
 
void SetupSerialPort(const char* portName) {
    hSerial = CreateFile(portName,                // Nombre del puerto (ej. "COM1")
                         GENERIC_READ | GENERIC_WRITE,
                         0,                          // No compartir
                         NULL,                       // Sin seguridad
                         OPEN_EXISTING,              // Abrir puerto existente
                         0,                          // Sin atributos
                         NULL);                      // Sin plantilla
 
    if (hSerial == INVALID_HANDLE_VALUE) {
        printf("Error al abrir el puerto serie\n");
        return;
    }
 
    // Configurar parámetros del puerto
    DCB dcbSerialParams = {0};
    dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
    dcbSerialParams.BaudRate = CBR_9600;     // Velocidad en baudios
    dcbSerialParams.ByteSize = 8;             // Tamaño de byte
    dcbSerialParams.StopBits = ONESTOPBIT;   // 1 bit de parada
    dcbSerialParams.Parity = NOPARITY;        // Sin paridad
 
    if (!SetCommState(hSerial, &dcbSerialParams)) {
        printf("Error al configurar el puerto serie\n");
        CloseHandle(hSerial);
        return;
    }
}

2. Enviar datos



Para enviar datos a través del puerto serie, puedes usar la función `WriteFile`. Aquí tienes un ejemplo:

1
2
3
4
5
6
7
8
void SendData(const char* data) {
    DWORD bytesWritten;
    if (!WriteFile(hSerial, data, strlen(data), &bytesWritten, NULL)) {
        printf("Error al enviar datos\n");
    } else {
        printf("Datos enviados: %s\n", data);
    }
}

3. Recibir datos



Para recibir datos, utiliza la función `ReadFile`. Aquí tienes un ejemplo:

1
2
3
4
5
6
7
8
9
10
11
void ReceiveData() {
    char buffer[256];
    DWORD bytesRead;
 
    if (ReadFile(hSerial, buffer, sizeof(buffer) - 1, &bytesRead, NULL)) {
        buffer[bytesRead] = '\0'; // Asegúrate de que el buffer sea una cadena
        printf("Datos recibidos: %s\n", buffer);
    } else {
        printf("Error al recibir datos\n");
    }
}

4. Cerrar el puerto



No olvides cerrar el puerto serie cuando hayas terminado:

1
2
3
void CloseSerialPort() {
    CloseHandle(hSerial);
}

5. Ejemplo completo



Aquí tienes un ejemplo completo que une todo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <windows.h>
#include <stdio.h>
 
HANDLE hSerial;
 
void SetupSerialPort(const char* portName);
void SendData(const char* data);
void ReceiveData();
void CloseSerialPort();
 
int main() {
    SetupSerialPort("COM1"); // Cambia "COM1" por el puerto que estés usando
 
    SendData("¡Hola, puerto serie!");
    ReceiveData();
 
    CloseSerialPort();
    return 0;
}

Recursos adicionales



- Asegúrate de tener los permisos necesarios para acceder al puerto serie.
- Puedes encontrar más información sobre la API de Windows y el manejo de puertos serie en la documentación de Microsoft (https://docs.microsoft.com/en-us/windows/win32/api/).

Con estos pasos, deberías poder enviar y recibir caracteres a través del puerto serie en tu programa en C. ¡Buena suerte, Jon!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar