Announcement

Collapse
No announcement yet.

Serielle Schnittstelle

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Serielle Schnittstelle

    Hi ich habe bischen gegoogelt und leider nur unvollständigen Code gefunden.
    Ich möchte die Serielle Schnittstelle konfigurieren und dann Daten von einem µc empfangen. Gibt es dazu ein gutes Tutorial oder einen BeispielCode?

  • #2
    Siehe CreateFile -> WIN 32 API
    Christian

    Comment


    • #3
      ja ok,
      leider sagt mir win 32 api nicht viel ich hab von microsoft ein win32api.exe file runtergeladen und die win32api.txt included.
      Als Anleitung habe ich mir folgende Seite angeschaut: http://www.codeproject.com/kb/system/serial.aspx

      Leider funktioniert der Spaß aber bei mir nicht.
      Gibt es da nicht nene ganz einfachen BeispielCode für das senden von ein paar Zeichen?

      Comment


      • #4
        Schaue dir mal das hier an, und wenn du auch ins Detail gehen willst, dann kannst du ja auch noch das hier lesen.

        bye,
        Helmut

        Comment


        • #5
          Vieleicht hilft dir folgendes weiter:

          Code:
          #define  stDTR    0x01
          #define  stRTS    0x02
          
          #define  stCTS    0x10
          #define  stDSR    0x20
          #define  stDCD    0x80
          
          
          
          OVERLAPPED Overlapped;
          
          // -------------------------------------------------------------------
          // Funktion : Feststellen ob ein serieller Kanal vorhanden ist
          // Syntax   : CommExists(int CommPort);
          // Bemerkung:
          // -------------------------------------------------------------------
          BOOL CommExists(int CommPort)
          {
            char szBuffer[6];
            DWORD iSize;
            COMMCONFIG CommConfig;
          
            strcpy(szBuffer, "COMx");
            szBuffer[3] = 0x31+CommPort;
            iSize = sizeof(CommConfig);
            return (GetDefaultCommConfig(szBuffer, &CommConfig, &iSize));
          }
          
          // -------------------------------------------------------------------
          // Funktion : Oeffnet einen seriellen Kanal.
          // Syntax   : OpenComm (CommPort, DCB, RecBuf, TBuf);
          // Bemerkung:
          // -------------------------------------------------------------------
          HANDLE OpenComm(int CommPort, DCB dcb, int RecBufSize, int TrmBufSize)
          {
            char szBuffer[6];
            HANDLE Result;
          
            strcpy(szBuffer, "COMx");
            szBuffer[3] = 0x31+CommPort;
            Result = CreateFile(szBuffer,
              GENERIC_READ | GENERIC_WRITE,
              0,
              NULL,
              OPEN_EXISTING,
              FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
              0);
          
            if (Result != INVALID_HANDLE_VALUE)
              {                                         // unter NT Overlapped.
              Overlapped.Internal = 0;                  // siehe Anmerkungen im API
              Overlapped.InternalHigh = 0;              // Hilfe mit BC 5.02
              Overlapped.Offset = 0;
              Overlapped.OffsetHigh = 0;
              Overlapped.hEvent = 0;
              if (RecBufSize > 1 || TrmBufSize > 1)
                if (!SetupComm(Result, RecBufSize, TrmBufSize))
                  {
                  CloseHandle(Result);
                  Result = INVALID_HANDLE_VALUE;
                  }
              }
            if (Result != INVALID_HANDLE_VALUE)
              {
              if (!SetCommState(Result,&dcb))                    // Port initialisieren
                {
                CloseHandle(Result);
                Result = INVALID_HANDLE_VALUE;
                }
              }
            return (Result);
          }
          
          // -------------------------------------------------------------------
          // Funktion : Schliessen eines seriellen Kanal.
          // Syntax   : CloseComm (HANDLE);
          // Bemerkung:
          // -------------------------------------------------------------------
          BOOL CloseComm(HANDLE *comHandle)
          {
            BOOL RetCode;
            if (*comHandle == INVALID_HANDLE_VALUE)
                return(1);
            RetCode = CloseHandle(*comHandle);
            if (RetCode)  *comHandle = INVALID_HANDLE_VALUE;
            return (RetCode);
          }
          
          // -------------------------------------------------------------------
          // Funktion : Prueft wiviele Zeichen Im Buffer (Rec, und Trans) sind
          // Syntax   : DataInBuffer(HANDLE comHandle, DWORD* InQueue, DWORD* OutQueue);
          // Bemerkung:
          // -------------------------------------------------------------------
          void DataInBuffer(HANDLE comHandle, DWORD* InQueue, DWORD* OutQueue)
          {
            COMSTAT ComStat;
            DWORD Val;
          
            if (ClearCommError(comHandle, &Val, &ComStat))
              {
              *InQueue  = ComStat.cbInQue;
              *OutQueue = ComStat.cbOutQue;
              }
            else
              {
              *InQueue=0;
              *OutQueue=0;
              }
          }
          
          //----------------------------------------------------------------------------
          // Funktion :
          // Syntax   :
          // Bemerkung:  ----
          //----------------------------------------------------------------------------
          void comReadFile (HANDLE comHandle, char *pt, DWORD Size, DWORD *cntDone)
          {
             ReadFile (comHandle, pt, Size, cntDone, &Overlapped);
          }
          
          void comWriteFile (HANDLE comHandle, char *pt, DWORD Size, DWORD *cntDone)
          {
             WriteFile (comHandle, pt, Size, cntDone, &Overlapped);
          }
          
          void comSetModemStatus (HANDLE comHandle, int iFlag)
          {
              DCB   dcb;
          
              if (!GetCommState(comHandle, &dcb)) return;
          
              if (iFlag & stRTS)
                  dcb.fRtsControl = RTS_CONTROL_ENABLE;
              if (iFlag & stDTR)
                  dcb.fDtrControl = DTR_CONTROL_ENABLE;
              SetCommState(comHandle, &dcb);
          }
          
          void comReSetModemStatus (HANDLE comHandle, int iFlag)
          {
              DCB   dcb;
          
              if (!GetCommState(comHandle, &dcb)) return;
          
              if (iFlag & stRTS)
                  dcb.fRtsControl = RTS_CONTROL_DISABLE;
              if (iFlag & stDTR)
                  dcb.fDtrControl = DTR_CONTROL_DISABLE;
              SetCommState(comHandle, &dcb);
          }

          Comment

          Working...
          X