串口初始化--不能收到终端的数据

yakai 2007-02-14 04:43:51
我需要向终端发送AT命令,然后处理终端返回的字符串。但是每次插上串口线后,需要运行一次超级终端(hyperTerminal)之后,我的程序启动,才能收到终端那边的响应。只要启动过一次超级终端,我的程序每次都可以正常收发。我怀疑是我的串口初始化代码有问题,请大家帮忙检查检查。

static OVERLAPPED Write = {0}; // For Tx channal.
static OVERLAPPED Reader = {0}; // For Rx channal.
static HANDLE hComm; // Handle to the uart port that will be operated.
#define HOST_UART_TX_BUFF_LNG 3000 // bytes.
#define HOST_UART_RX_BUFF_LNG 3000 // bytes.


BOOL HostUartOpenPort(UINT16 port_number)
{
BOOL result = TRUE;
char szPort[15];
DCB dcb;

if( port_number < 10)
wsprintf( szPort, "COM%d", port_number );
else
wsprintf( szPort, "\\\\.\\COM%d", port_number );
hComm = CreateFile( szPort, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, 0);

PurgeComm(hComm,PURGE_TXCLEAR |PURGE_RXCLEAR);

if (hComm == INVALID_HANDLE_VALUE){
result = FALSE;
}

/* Get the port parameters first. */
memset(&dcb,0,sizeof(dcb));
dcb.DCBlength = sizeof( DCB );
GetCommState( hComm, &dcb );

dcb.fRtsControl = RTS_CONTROL_ENABLE; // RTS_CONTROL_DISABLE, RTS_CONTROL_ENABLE, RTS_CONTROL_HANDSHAKE, RTS_CONTROL_TOGGLE
dcb.BaudRate = CBR_115200; // By default it is 115200 bps.
// dcb.Parity = NOPARITY;
// dcb.StopBits = ONESHOTBIT;
dcb.ByteSize = 8;
// dcb.EvtChar = EVENTCHAR;
// dcb.fOutxDsrFlow = FC_XONXOFF;

/* Set the dcb and the Tx/Rx buffer length. */
if( !SetCommState( hComm, &dcb ) | |
!SetupComm( hComm, HOST_UART_RX_BUFF_LNG, HOST_UART_TX_BUFF_LNG ) ) {
CloseHandle( hComm );
result = FALSE;
}

/* Create event for Tx/Rx. */
Write.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); // Tx event.
Reader.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); // Rx event.

if ( (Write.hEvent == 0) | | (Reader.hEvent == 0)) {
result = FALSE;
}

// EV_BREAK, EV_RLSD, EV_RXCHAR, EV_RXFLAG
SetCommMask(hComm, EV_RXCHAR);

return result;
}
...全文
367 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yakai 2007-02-27
  • 打赏
  • 举报
回复
有人么?
yakai 2007-02-15
  • 打赏
  • 举报
回复
to cqpp:
那帮我看看啊,我也怀疑这个,所以把我用的参数都列出来了。其中有些注释掉的都是曾经试过的参数。
OOPhaisky 2007-02-15
  • 打赏
  • 举报
回复
这个挺底层阿。。。
cqpp 2007-02-15
  • 打赏
  • 举报
回复
你这样的情况我碰到过,100%是你的程序中对串口的某些设置没有设置。
jixingzhong 2007-02-14
  • 打赏
  • 举报
回复
等会看看
xuqinggao 2007-02-14
  • 打赏
  • 举报
回复
路过

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧