Compartilhar via


Configuring a Serial Port

Windows Mobile SupportedWindows Embedded CE Supported

9/8/2008

The most crítico fase em serial de Comunicações programação é definir as configurações porta com a estrutura DCB.

Inicializando erroneamente a DCB estrutura é Um comum problema. Quando um serial função de comunicações não gerar os resultados esperados, verificar que o DCB estrutura está configurada corretamente.

Um chamar para o CreateFile função abre um porta serial com configurações porta usar como padrão. Geralmente, o aplicativo precisa para alteração de padrões. Use a função GetCommState para recuperar as configurações usar como padrão e usar a função SetCommState fazer configurações porta.

Além disso, porta configuração envolve o uso a estrutura COMMTIMEOUTS para definir os valores tempo limite para operações de leitura/gravação. Quando ocorre um tempo limite, o ReadFile Ou WriteFile função retorna o número específico de caracteres transferidos com êxito. Para obter informações adicionais sobre a configuração Tempo limite, consulte Configuring Timeouts.

Para configurar um porta serial:

  1. Inicializar o DCBlength membro das DCB estrutura para o tamanho da estrutura.

    Isso é exigido antes de passar a estrutura como um argumento para uma função.

  2. Chamar o GetCommState função para recuperar as configurações usar como padrão para a porta abertas com o CreateFile função.

    Para identificar a porta, especificar in a hPort parâmetro de identificador que CreateFile Retorna.

  3. Modificar DCB Os membros como exigido.

    O seguinte é DCB estrutura membros.

    Membro Descrição

    DCBlength

    Antes chamado de GetCommState função, definido esse membro para o comprimento das DCB estrutura.

    Negligenciando fazer essa pode causar uma falha ou retornar dados errados.

    BAUDRATE

    Especifica a velocidade de comunicação dispositivo.

    Atribui uma real taxa de transmissão ou um índice, especificando uma constante CBR_. As constantes CBR_ são definidas no arquivo de cabeçalho winbase.h.

    fBinary

    Especifica se binário modo está habilitado.

    The Microsoft® Win32® API não não transferências nonbinary modo suporte, portanto, esse membro deve ser TRUE.

    Usar FALSE não trabalho.

    fParity

    Especifica se a verificação paridade é habilitado.

    Se esse membro for TRUE, paridade verificação é executada e os erros são relatados.

    fOutxCtsFlow

    Ativa o controle de fluxo CTS logon e logoff.

    Para usar rts/controle de fluxo CTS, especificar TRUE para esse membro e RTS_CONTROL_HANDSHAKE para a fRtsControl membro.

    fOutxDsrFlow

    Ativa o controle fluxo DSR logon e logoff.

    Controle fluxo DSR raramente é usado.

    Uma configuração típica porta é definir esse membro para FALSE, ao ativar a linha DTR.

    fDtrControl

    Especifica o controle de fluxo DTR.

    DTR_CONTROL_ENABLE ativa a linha DTR durante a conexão.

    DTR_CONTROL_HANDSHAKE ativa handshaking DTR.

    DTR_CONTROL_DISABLE desativa a linha DTR.

    fDsrSensitivity

    Especifica se o driver de comunicação é confidencial para o estado do sinal de DSR.

    Se esse membro for TRUE, o driver ignorará qualquer bytes recebidos, a menos que a entrada modem de DSR linha é alta.

    fTXContinueOnXoff

    Especifica se a transmissão pára quando o buffer de entrada está cheio e o driver foi transmitida a XoffChar caractere.

    Se esse membro for TRUE, a transmissão continuará após o buffer de entrada chegou dentro XoffLim Bytes de sendo completo e o driver foi transmitida a XoffChar caractere para parar o recebimento bytes.

    Se esse membro for FALSE, a transmissão não continuará até que esteja dentro de buffer de entrada XonLim Bytes de sendo vazio e o driver foi transmitida a XonChar caractere para recepção continuar.

    fOutX

    Especifica se controle de fluxo XON/XOFF é usado durante a transmissão.

    Se esse membro for TRUE, transmissão pára quando o XoffChar caractere é recebida e inicia novamente quando o XonChar caractere é recebido.

    fInX

    Especifica se controle de fluxo XON/XOFF é usado durante a recepção.

    Se esse membro é TRUE, o XoffChar caractere é enviado quando o buffer de entrada vem dentro XoffLim Bytes de sendo completo e o XonChar caractere é enviado quando o buffer de entrada vem dentro XonLim Bytes de sendo vazio.

    fErrorChar

    Especifica se os bytes recebidos com erros paridade serão substituídos com o caractere especificado pelo ErrorChar membro.

    Se esse membro é TRUE e o fParity membro for TRUE, ocorre a substituição.

    fNull

    Especifica se NULL bytes são descartados.

    Se esse membro é TRUE, NULL bytes serão descartadas quando recebidos.

    fRtsControl

    Ativa o controle de fluxo RTS logon e logoff.

    RTS_CONTROL_ENABLE ativa a linha RTS durante a conexão.

    RTS_CONTROL_HANDSHAKE ativa handshaking RTS.

    RTS_CONTROL_DISABLE desativa a linha RTS.

    RTS_CONTROL_TOGGLE especifica que a linha RTS é alta se bytes disponível para transmissão.

    Afinal de contas armazenada em buffer bytes foram enviados, a linha RTS é baixa.

    fAbortOnError

    Especifica se ler e operações de gravação são finalizadas quando ocorre um erro.

    Se esse membro for TRUE, o driver finalizará ler e operações de gravação com um status de erro quando ocorre um erro.

    O driver não aceitar outras comunicações operações até que o aplicativo foi confirmada o erro, chamado de ClearCommError função.

    fDummy2

    Reservado; Não use.

    wReserved

    Não usado; definido como zero.

    XonLim

    Especifica o número máximo de bytes permitidos na fila.

    O caractere Xon é enviado se o número de bytes na fila cai abaixo esse número.

    XoffLim

    Especifica o número máximo de bytes aceitos no buffer de entrada para o caractere XOff é enviada.

    O número máximo de bytes aceitos é calculado pela subtraindo esse valor a partir de tamanho, em bytes, da buffer de entrada.

    ByteSize

    Especifica os bits por byte transmitido e recebido.

    Paridade

    Especifica a esquema paridade.

    Não confunda esse membro com o fParity membro, que ativa ou desativa paridade.

    Como paridade raramente é usada, esse membro pode geralmente ser NOPARITY.

    StopBits

    Especifica o número de bits parar.

    ONESTOPBIT é mais comum configuração.

    XonChar

    Especifica o valor do caractere XON para transmissão e recepção.

    XoffChar

    Especifica o valor do caractere XOFF para transmissão e recepção.

    ErrorChar

    Especifica o valor do caractere usado para substituir bytes recebidos com erro de paridade.

    EofChar

    Especifica o valor do caractere usado para sinalizar o final dos dados.

    EvtChar

    Especifica o valor do caractere usado para sinalizar um evento.

    WReserved1

    Reservado, não use.

  4. Chamar o SetCommState função para definir as configurações de porta.

O seguinte exemplo de código mostra como usar o GetCommState e SetCommState funções para configurar um porta serial.

DCB PortDCB;

// Initialize the DCBlength member. 
PortDCB.DCBlength = sizeof (DCB); 

// Get the default port setting information.
GetCommState (hPort, &PortDCB);

// Change the DCB structure settings.
PortDCB.BaudRate = 9600;              // Current baud 
PortDCB.fBinary = TRUE;               // Binary mode; no EOF check 
PortDCB.fParity = TRUE;               // Enable parity checking 
PortDCB.fOutxCtsFlow = FALSE;         // No CTS output flow control 
PortDCB.fOutxDsrFlow = FALSE;         // No DSR output flow control 
PortDCB.fDtrControl = DTR_CONTROL_ENABLE; 
                                      // DTR flow control type 
PortDCB.fDsrSensitivity = FALSE;      // DSR sensitivity 
PortDCB.fTXContinueOnXoff = TRUE;     // XOFF continues Tx 
PortDCB.fOutX = FALSE;                // No XON/XOFF out flow control 
PortDCB.fInX = FALSE;                 // No XON/XOFF in flow control 
PortDCB.fErrorChar = FALSE;           // Disable error replacement 
PortDCB.fNull = FALSE;                // Disable null stripping 
PortDCB.fRtsControl = RTS_CONTROL_ENABLE; 
                                      // RTS flow control 
PortDCB.fAbortOnError = FALSE;        // Do not abort reads/writes on 
                                      // error
PortDCB.ByteSize = 8;                 // Number of bits/byte, 4-8 
PortDCB.Parity = NOPARITY;            // 0-4=no,odd,even,mark,space 
PortDCB.StopBits = ONESTOPBIT;        // 0,1,2 = 1, 1.5, 2 

// Configure the port according to the specifications of the DCB 
// structure.
if (!SetCommState (hPort, &PortDCB))
{
  // Could not configure the serial port.
  dwError = GetLastError ();
  MessageBox (hMainWnd, TEXT("Unable to configure the serial port"), 
              TEXT("Error"), MB_OK);
  return FALSE;
}

See Also

Concepts

Programming Serial Connections