PICとPCでのシリアル通信
PICとPC間でのシリアル通信を行ってるんですけどうまくいきません。ハイパーターミナル使えばうまくいくんでPIC側のソース(C)はうまくいってると思います。ハイパーターミナルを使わずにシリアルの送受信のプログラム(C++)を組んでるんですけどうまくいかなくて。。。
アドバイスなどお願いします!!どこが違うんでしょうか。。。
●PC側のソース(C++)
#include "stdafx.h"
#include <stdlib.h>
#include <windows.h>
#include<iostream>
using namespace std;
#define COM_PORT_NAME "COM1"
#define BAUD_RATE 9600
#define BYTE_SIZE 8
#define PARITY EVENPARITY
#define STOP_BIT TRUE
#define F_PARITY ONESTOPBIT
HANDLE hComm; // シリアルポートとの通信ハンドル
bool ComInit()
{
// シリアルポートを開ける
hComm = CreateFile(
COM_PORT_NAME, /* シリアルポートの文字列 */
GENERIC_READ | GENERIC_WRITE, /* アクセスモード:読み書き */
0, /* 共有モード:他からはアクセス不可 */
NULL, /* セキュリティ属性:ハンドル継承せず */
OPEN_EXISTING, /* 作成フラグ: */
FILE_ATTRIBUTE_NORMAL, /* 属性: */
NULL /* テンプレートのハンドル: */
);
if (hComm == INVALID_HANDLE_VALUE) {
printf("シリアルポートを開くことが出来ませんでした。\n");
return false;
}
// 通信属性を設定する
DCB dcb;
GetCommState(hComm, &dcb); /* DCB を取得 */
dcb.BaudRate = BAUD_RATE;
dcb.ByteSize = BYTE_SIZE;
dcb.Parity = PARITY;
dcb.fParity = STOP_BIT;
dcb.StopBits = F_PARITY;
SetCommState(hComm, &dcb); /* DCB を設定 */
return true;
}
void ComEnd()
{
// ハンドルを閉じる
CloseHandle(hComm);
}
bool WriteData(char *buff, unsigned int data_size)
{
DWORD dwWritten; /* ポートへ書き込んだバイト数 */
WriteFile(hComm, buff, data_size, &dwWritten, NULL);
if (dwWritten!=data_size) {
printf("データの送信に失敗しました。\n");
return false;
}
return true;
}
bool ReadData(char *buff, unsigned int max_size)
{
DWORD dwErrors; /* エラー情報 */
COMSTAT ComStat; /* デバイスの状態 */
DWORD dwCount; /* 受信データのバイト数 */
DWORD dwRead; /* ポートから読み出したバイト数 */
ClearCommError(hComm, &dwErrors, &ComStat);
dwCount = ComStat.cbInQue;
if (dwCount > max_size) {
printf("バッファサイズが足りません。\n");
return false;
}
ReadFile(hComm, buff, dwCount, &dwRead, NULL);
if (dwCount != dwRead) {
printf("データの受け取りに失敗しました。\n");
return false;
}
return true;
}
int main(int argc, char* argv[])
{
char ch;
while(1){
cin >> ch;
printf("入力 %c\n", ch);
ComInit();
WriteData(&ch, strlen(&ch));
ReadData(&ch, strlen(&ch));
ComEnd();
}
return 0;
}
お礼
ありがとうございました。