|
|
@ -3,6 +3,34 @@ |
|
|
|
#include <stdio.h> |
|
|
|
#include <windows.h> |
|
|
|
|
|
|
|
/*** |
|
|
|
* 用于串口初始化时设置停止位 |
|
|
|
* stopbits只有三种选择 |
|
|
|
* 1.停止位为1 |
|
|
|
* 2.停止位为1.5 |
|
|
|
* 3.停止位为2 |
|
|
|
* 如果输入错误停止位则返回-1 |
|
|
|
*/ |
|
|
|
static int switch_get_stopbits(int stopbits) { |
|
|
|
int real_stopbits; |
|
|
|
switch (stopbits) { |
|
|
|
case 1: |
|
|
|
real_stopbits = ONESTOPBIT; |
|
|
|
break; |
|
|
|
case 2: |
|
|
|
real_stopbits = ONE5STOPBITS; |
|
|
|
break; |
|
|
|
case 3: |
|
|
|
real_stopbits = TWOSTOPBITS; |
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
real_stopbits = -1; |
|
|
|
break; |
|
|
|
} |
|
|
|
return real_stopbits; |
|
|
|
} |
|
|
|
|
|
|
|
PORT OpenPort(int idx) { |
|
|
|
HANDLE hComm; |
|
|
|
TCHAR comname[100]; |
|
|
@ -166,8 +194,10 @@ PORT serial_init(int idx, int rate, int databits, int stopbits, int parity) { |
|
|
|
printf("set COM%d databits fail\n", idx); |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
stopbits = ONESTOPBIT; |
|
|
|
printf("stopbits %d\n", stopbits); |
|
|
|
stopbits = switch_get_stopbits(stopbits); |
|
|
|
if (stopbits == -1) { |
|
|
|
printf("stopbits set error\n"); |
|
|
|
} |
|
|
|
ret = SetPortStopBits(com_port, stopbits); |
|
|
|
if (ret == FALSE) { |
|
|
|
printf("set COM%d stopbits fail\n", idx); |
|
|
@ -212,3 +242,21 @@ int Serial_ReciveData(PORT com_port, char *data, int len) { |
|
|
|
|
|
|
|
return NoBytesRead; |
|
|
|
} |
|
|
|
|
|
|
|
/* 测试函数,demo工程放在main中,但是我不需要,暂时放在这 */ |
|
|
|
void serial_test(int serial_com_id) { |
|
|
|
PORT COM1; |
|
|
|
char buff[1024] = {0}; |
|
|
|
int rcv_len = 0; |
|
|
|
|
|
|
|
printf("Start open com%d\n", serial_com_id); |
|
|
|
COM1 = serial_init(serial_com_id, 115200, 8, 1, 0); |
|
|
|
|
|
|
|
while (1) { |
|
|
|
Serial_SendData(COM1, "hello finny", 12); |
|
|
|
memset(buff, 0, 1024); |
|
|
|
rcv_len = Serial_ReciveData(COM1, buff, 1024); |
|
|
|
printf("rcv:%s\n", buff); |
|
|
|
Sleep(1); |
|
|
|
} |
|
|
|
} |