윈도우 시리얼 통신 예제

Windows에서 직렬 포트를 열고 닫으면 CreateFile() 함수를 사용하여 직렬 포트를 엽니다. CreateFile()은 직렬 포트와 같은 파일, 스트림 또는 IO 장치를 만들거나 여는 데 사용되는 Win 32 기능입니다. 성공시 CreateFile()은 후속 모든 작업에서 연결을 참조하는 데 사용되는 핸들을 반환합니다. 직렬(16550 기반 RS-232) 샘플 드라이버는 %WINDIR%system32드라이버의 받은 편지함 Serial.sys 드라이버의 WDF 버전입니다. 직렬 포트는 현재 오래된 기술이며 대부분 USB로 대체되었지만 임베디드 하드웨어와 통신하는 쉬운 방법입니다. 그것은 작은 프로젝트에 대 한 좋은. 이 페이지에서는 직렬 포트를 통해 하드웨어와 통신하기 위한 간단한 C++ 클래스를 제공합니다. 그것은 윈도우 XP와 비스타와 함께 작동해야하며,, 거기에 다른 클래스와는 달리, 그것은 시각적 스튜디오 2003 + 익스프레스 에디션과 함께 사용할 수 있다는 것을 의미, MFC 또는 AFX를 필요로하지 않습니다. 그냥 지금 나는 당신의 “안녕하세요”에 대한 응답으로, 장치가 다시 “안녕하세요”를 보낼 수 있습니다 말했다 당신은 그것을 읽고 싶습니다.

그러나 여기서 문제는 장치가 언제 응답할지 모른다는 것입니다. 아니면 이제까지 응답 할 것인가? 언제 포트에서 읽기 시작해야 합니까? 한 가지 옵션은 WriteFile을 호출하자마자 ReadFile 을 호출한다는 것입니다. 데이터가 없는 경우 나중에 다시 읽어야 합니다. 이를 통해 폴링이라고 합니다. 포트에서 데이터를 폴링합니다. 이 모델은 정말 좋은 것 같지 않습니다. 데이터가 도착했을 때 어떻게 든 시스템에 의해 통보된 경우에만 ReadFile을 호출 할 수 있다면 좋을 것입니다. 이는 이벤트 기반 접근 방식이며 Windows 프로그래밍에 적합합니다. 그리고 좋은 소식은 이러한 모델이 가능하다는 것입니다.

이 튜토리얼에서 우리는 윈도우 PC의 직렬 포트를 사용하여 마이크로 컨트롤러 보드 또는 모뎀과 같은 외부 장치와 통신하는 방법을 배우게됩니다 (윈도우 XP,7). 이 소프트웨어는 C 언어를 사용하여 작성되고 Win32 API를 사용하여 직렬 포트와 통신합니다. 직렬 버퍼[i] = TempChar;// 임시차를 버퍼 i++로 저장합니다. } 차 템차; 읽기 문자 직렬 버퍼[256];/버퍼 Rxed DataDWORD NoBytesRead;int i = 0; Windows에서 모든 핸들을 사용하여 제어됩니다. 첫 번째 줄에서핸들 hComm; 직렬 포트에 액세스하고 제어하는 핸들 hcomm을 선언합니다. 최근에는 작은 휴머노이드 로봇을 제어하기 위해 직렬 포트를 사용할 수 있어야 했습니다. 휴머노이드 로봇에는 직렬 포트를 통해 블루투스 모듈에 연결된 마이크로 컨트롤러가 포함되어 있습니다. 불행 하 게도, 마이크로소프트 윈도 에서 직렬 포트를 사용 하 여 조금 까다로울 수 있습니다. 내가 인터넷에서 발견 한 모든 기존 C ++ 클래스는 MFC 또는 AFX를 필요로하거나 무료가 아니었습니다 (하나는 $ 100 이상을 요구합니다!!). 비주얼 스튜디오 2008 익스프레스를 사용했기 때문에 MFC 또는 AFX가 필요하지 않은 것이 필요했습니다. 따라서,이 클래스가 태어났다.

컴파일러와 IDE의 사용당신이 마이크로 소프트 또는 MinGW (GCC의 윈도우 포트)에서 비주얼 스튜디오 커뮤니티 버전 중 하나를 사용할 수 있습니다 C 파일을 컴파일합니다. 데스크톱용 Visual Studio 2013 익스프레스 에디션은 Microsoft 웹 사이트에서 자유롭게 다운로드할 수 있습니다(대용량 다운로드). Visual Studio를 다운로드하지 않고 Windows 환경을 위한 GCC의 오픈 소스 포트인 MinGW를 더 간단한 용도로 사용할 수 있습니다. MinGW를 설치한 후, 패키지는 어디서나 호출할 수 있도록 시스템 경로에 gcc를 추가해야 합니다. DCB dcb직렬파라름 = { 0}; DCB 구조화dcbSerialParams.DCBlength = sizeof (dcbSerialParams); 자세한 내용은 직렬 및 세레눔의 기능을 참조하십시오. Windows에서 COM1에서 COM9까지의 COM 포트 번호는 시스템에서 예약되어 있습니다. COM 포트 번호가 해당 범위에 속하는 직렬 포트를 사용하는 경우 위의 코드에 표시된 백 슬래시(\\)가 필요하지 않습니다. dcbSerialParams.BaudRate = CBR_9600; 바데레이트 설정 = 9600dcbSerialParams.ByteSize = 8; ByteSize 설정 = 8dcbSerialParams.StopBits = 원스톱비트;// 설정 스톱비트 = 1dcbSerialParams.Parity = NOPARITY; 패리티 설정 = 없음 PC의 DB9 RS232 직렬 포트를 사용하는 경우 RS232 신호를 디코딩하려면 마이크로 컨트롤러 측에서 RS232 신호 레벨 변환기를 빌드해야 합니다. PC의 RS232 직렬 포트를 MSP430의 핀에 직접 연결하면 칩이 손상됩니다.

Comments are closed