关于串口连接的问题

sillyzqg 2015-06-14 01:32:00
我想用串口连接WinCE设备,程序中遇到这种问题:
1.//打开串口
BOOL OpenPort(void* pOwner,/*指向父指针*/
UINT portNo = 2, /*串口号*/
UINT baud = 9600, /*波特率*/
UINT parity = NOPARITY, /*奇偶校验*/
UINT databits = 8, /*数据位*/
UINT stopbits = 0 /*停止位*/
);
我想问一下 UINT portNo = 2, 指的是什么的串口号?
2.
Ccom_openDlg::Ccom_openDlg(CWnd* pParent /*=NULL*/)
: CDialog(Ccom_openDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

///////////////////////////////
m_port = 1; //端口号设置为1
m_strset = _T("115200, n, 8, 1");//串口参数,波特率:115200, 8为数据位,1为停止位
m_inputBuffer = _T(""); //清空输入缓冲区
m_str = _T("");
........
}

void Ccom_openDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX,IDC_MSCOMM2,m_comm);

}

BEGIN_MESSAGE_MAP(Ccom_openDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_ReceiveData, &Ccom_openDlg::OnReceivedata)
ON_BN_CLICKED(IDC_StopReceive, &Ccom_openDlg::OnStopreceive)
END_MESSAGE_MAP()


// Ccom_openDlg 消息处理程序

BOOL Ccom_openDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// 将“关于...”菜单项添加到系统菜单中。

// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标

// TODO: 在此添加额外的初始化代码

//////////////////////////////////////////////////////////////
m_comm.put__CommPort(11); //指定串口号
m_comm.put_Settings(_T("115200, n, 8, 1")); //通信参数设置
m_comm.put_InBufferSize(1024); //指定接收缓冲区大小
m_comm.put_InBufferCount(0); //清空输入缓冲区
m_comm.put_InputMode(0); //文本模式获取数据
m_comm.put_InputLen(0); //读取缓冲区的全部数据
m_comm.put_RThreshold(1); //设置在产生OnComm事件前要接收的字符数阈值


return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
我标红色的两个串口分别值的是什么?
...全文
243 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sillyzqg 2015-06-27
  • 打赏
  • 举报
回复
引用 6 楼 accessysq 的回复:
如果你的真串口设备管理器是没反应的,要什么反应呢? 如果是usb转出来的,那么设备管理器有反应。 你先把你的硬件搞定再调软件吧。
如果串口连接了某设备不应该显示出来吗?在设备管理器的串口上
91program 2015-06-27
  • 打赏
  • 举报
回复
电脑上一般也就两个串口,可能是COM1 和COM2,至于实际使用的哪两个串口号,可以在驱动管理里看到的。如果使用USB转串口,可能会用到十几的串口号!
91program 2015-06-27
  • 打赏
  • 举报
回复
先使用超级终端,或者其它串口工具来接受数据,看看电脑的串口是否正确连接、且能否正常使用吧!
  • 打赏
  • 举报
回复
如果你的真串口设备管理器是没反应的,要什么反应呢? 如果是usb转出来的,那么设备管理器有反应。 你先把你的硬件搞定再调软件吧。
sillyzqg 2015-06-25
  • 打赏
  • 举报
回复
引用 4 楼 accessysq 的回复:
串口本身没有公母之分,那是硬件接口,只要你的线能连接上就行。 wince端,你要看你的硬件接的是串口几。并且要看bsp里面对应的序号是多少?因为有的平台的序号从0开始有的从1开始。 pc端你的代码看不出来m_port = 1; //端口号设置为1有被使用。 m_comm.put__CommPort(11); //指定串口号 m_comm.put_Settings(_T("115200, n, 8, 1")); //通信参数设置 是不是这两句是应该使用上面的变量? 代码是你自己写的吗? 一般串口号也不会用到11这么大吧,检测你的电脑的串口号。
我现在用线连接以后,设备管理器一点反应也没有,不知是什么问题呢?
  • 打赏
  • 举报
回复
串口本身没有公母之分,那是硬件接口,只要你的线能连接上就行。 wince端,你要看你的硬件接的是串口几。并且要看bsp里面对应的序号是多少?因为有的平台的序号从0开始有的从1开始。 pc端你的代码看不出来m_port = 1; //端口号设置为1有被使用。 m_comm.put__CommPort(11); //指定串口号 m_comm.put_Settings(_T("115200, n, 8, 1")); //通信参数设置 是不是这两句是应该使用上面的变量? 代码是你自己写的吗? 一般串口号也不会用到11这么大吧,检测你的电脑的串口号。
sillyzqg 2015-06-23
  • 打赏
  • 举报
回复
引用 1 楼 91program 的回复:
OpenPort 应该不是 WinCE 的标准 API,这个无法解析。 你可以考虑使用 CreateFile 等标准的函数来自己实现对串口的操作。示例:

BOOL InitSerailPort(CString csSerialPort,LPVOID pParent)  
37.{  
38.    DCB commDCB;  
39.    COMMTIMEOUTS timeouts;  
40.  
41.    ghCommHandle = CreateFile(csSerialPort, GENERIC_READ | GENERIC_WRITE, 0, NULL,   
42.        OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, NULL);  
43.    if(INVALID_HANDLE_VALUE == ghCommHandle)  
44.    {  
45.        RETAILMSG(1, (TEXT("Opening GPS %s failed: %d!\r\n"),csSerialPort,(int)GetLastError()));  
46.        return FALSE;  
47.    }  
48.  
49.    commDCB.DCBlength = sizeof (DCB);  
50.    if(!GetCommState(ghCommHandle,&commDCB))  
51.    {  
52.        CloseHandle(ghCommHandle);  
53.        ghCommHandle = INVALID_HANDLE_VALUE;  
54.         RETAILMSG(1,(L"Failed in getting GPS %s DCB settings: %d!\r\n",csSerialPort,(int)GetLastError()));  
55.        return FALSE;  
56.    }  
57.    commDCB.DCBlength = sizeof(DCB);   
58.    commDCB.BaudRate = 9600;             // Current baud  
59.    commDCB.ByteSize = 8;                 // Number of bits/bytes, 4-8  
60.    commDCB.Parity = NOPARITY;            // 0-4=no,odd,even,mark,space   
61.    commDCB.StopBits = ONESTOPBIT;        // 0,1,2 = 1, 1.5, 2  
62.  
63.    // Setting serial port to Centrality speicifcations  
64.    if(!SetCommState(ghCommHandle,&commDCB))  
65.    {  
66.        CloseHandle(ghCommHandle);  
67.        ghCommHandle = INVALID_HANDLE_VALUE;  
68.        RETAILMSG(1,(L"Error in trying to set GPS %s DCB settings: %d!\r\n",csSerialPort,(int)GetLastError()));  
69.        return FALSE;  
70.    }  
71.  
72.    // Get the default timeout settings for port  
73.    if(!GetCommTimeouts(ghCommHandle, &timeouts))  
74.    {  
75.        CloseHandle(ghCommHandle);  
76.        ghCommHandle = INVALID_HANDLE_VALUE;  
77.        RETAILMSG(1,(L"Failed in getting GPS %s timeout settings: %d!\r\n",csSerialPort,(int)GetLastError()));  
78.        return FALSE;  
79.    }  
80.    // RETAILMSG(1,(L"%s DCB set successfully!\r\n",csSerialPort));  
81.  
82.    // Change the timeouts structure settings to Centrality settings  
83.    timeouts.ReadIntervalTimeout = 500;  
84.    timeouts.ReadTotalTimeoutMultiplier = 0;  
85.    timeouts.ReadTotalTimeoutConstant = 0;  
86.  
87.    // Set the time-out parameters for all read and write operations on the port.   
88.    if(!SetCommTimeouts(ghCommHandle,&timeouts))  
89.    {  
90.        CloseHandle(ghCommHandle);  
91.        ghCommHandle = INVALID_HANDLE_VALUE;  
92.        RETAILMSG(1,(L"Error in trying to set GPS %s timeout settings: %d!\r\n",csSerialPort,(int)GetLastError()));  
93.        return FALSE;  
94.    }  
95.  
96.    if(0 != SetCommMask(ghCommHandle,EV_RXCHAR))  
97.    {  
98.        RETAILMSG(1,(L"==Set %s mask OK!\r\n",csSerialPort));  
99.    }  
100.    else  
101.    {  
102.        RETAILMSG(1,(TEXT("==Set %s mask failure:%d!\r\n"),csSerialPort,GetLastError()));  
103.    }  
104.  
105.    nmeathread_hand = CreateThread(NULL,0,ReadNMEAThread,pParent,0,NULL);  
106.    //nmeathread_hand = CreateThread(NULL, 0, ReadNMEAThread, this, CREATE_SUSPENDED, NULL);  
107.    if(!nmeathread_hand)  
108.    {  
109.        RETAILMSG(1, (L"Could not create NMEA read thread.\r\n"));  
110.        return FALSE;  
111.    }  
112.    else  
113.    {  
114.        //SetThreadPriority(nmeathread_hand, THREAD_PRIORITY_BELOW_NORMAL);  
115.        //ResumeThread(nmeathread_hand);  
116.    }  
117.  
118.    SYSTEMTIME stUTC;  
119.    SYSTEMTIME stLocal;  
120.  
121.    GetLocalTime(&stLocal);  
122.    GetSystemTime(&stUTC);  
123.    giHourDiff = stLocal.wHour - stUTC.wHour;  
124.  
125.    return TRUE;  
126.}  

我的Wince 设备和电脑用串口连接时是相当于两台电脑相连接吗?串口要一公一母吗?
91program 2015-06-14
  • 打赏
  • 举报
回复
OpenPort 应该不是 WinCE 的标准 API,这个无法解析。 你可以考虑使用 CreateFile 等标准的函数来自己实现对串口的操作。示例:

BOOL InitSerailPort(CString csSerialPort,LPVOID pParent)  
37.{  
38.    DCB commDCB;  
39.    COMMTIMEOUTS timeouts;  
40.  
41.    ghCommHandle = CreateFile(csSerialPort, GENERIC_READ | GENERIC_WRITE, 0, NULL,   
42.        OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, NULL);  
43.    if(INVALID_HANDLE_VALUE == ghCommHandle)  
44.    {  
45.        RETAILMSG(1, (TEXT("Opening GPS %s failed: %d!\r\n"),csSerialPort,(int)GetLastError()));  
46.        return FALSE;  
47.    }  
48.  
49.    commDCB.DCBlength = sizeof (DCB);  
50.    if(!GetCommState(ghCommHandle,&commDCB))  
51.    {  
52.        CloseHandle(ghCommHandle);  
53.        ghCommHandle = INVALID_HANDLE_VALUE;  
54.         RETAILMSG(1,(L"Failed in getting GPS %s DCB settings: %d!\r\n",csSerialPort,(int)GetLastError()));  
55.        return FALSE;  
56.    }  
57.    commDCB.DCBlength = sizeof(DCB);   
58.    commDCB.BaudRate = 9600;             // Current baud  
59.    commDCB.ByteSize = 8;                 // Number of bits/bytes, 4-8  
60.    commDCB.Parity = NOPARITY;            // 0-4=no,odd,even,mark,space   
61.    commDCB.StopBits = ONESTOPBIT;        // 0,1,2 = 1, 1.5, 2  
62.  
63.    // Setting serial port to Centrality speicifcations  
64.    if(!SetCommState(ghCommHandle,&commDCB))  
65.    {  
66.        CloseHandle(ghCommHandle);  
67.        ghCommHandle = INVALID_HANDLE_VALUE;  
68.        RETAILMSG(1,(L"Error in trying to set GPS %s DCB settings: %d!\r\n",csSerialPort,(int)GetLastError()));  
69.        return FALSE;  
70.    }  
71.  
72.    // Get the default timeout settings for port  
73.    if(!GetCommTimeouts(ghCommHandle, &timeouts))  
74.    {  
75.        CloseHandle(ghCommHandle);  
76.        ghCommHandle = INVALID_HANDLE_VALUE;  
77.        RETAILMSG(1,(L"Failed in getting GPS %s timeout settings: %d!\r\n",csSerialPort,(int)GetLastError()));  
78.        return FALSE;  
79.    }  
80.    // RETAILMSG(1,(L"%s DCB set successfully!\r\n",csSerialPort));  
81.  
82.    // Change the timeouts structure settings to Centrality settings  
83.    timeouts.ReadIntervalTimeout = 500;  
84.    timeouts.ReadTotalTimeoutMultiplier = 0;  
85.    timeouts.ReadTotalTimeoutConstant = 0;  
86.  
87.    // Set the time-out parameters for all read and write operations on the port.   
88.    if(!SetCommTimeouts(ghCommHandle,&timeouts))  
89.    {  
90.        CloseHandle(ghCommHandle);  
91.        ghCommHandle = INVALID_HANDLE_VALUE;  
92.        RETAILMSG(1,(L"Error in trying to set GPS %s timeout settings: %d!\r\n",csSerialPort,(int)GetLastError()));  
93.        return FALSE;  
94.    }  
95.  
96.    if(0 != SetCommMask(ghCommHandle,EV_RXCHAR))  
97.    {  
98.        RETAILMSG(1,(L"==Set %s mask OK!\r\n",csSerialPort));  
99.    }  
100.    else  
101.    {  
102.        RETAILMSG(1,(TEXT("==Set %s mask failure:%d!\r\n"),csSerialPort,GetLastError()));  
103.    }  
104.  
105.    nmeathread_hand = CreateThread(NULL,0,ReadNMEAThread,pParent,0,NULL);  
106.    //nmeathread_hand = CreateThread(NULL, 0, ReadNMEAThread, this, CREATE_SUSPENDED, NULL);  
107.    if(!nmeathread_hand)  
108.    {  
109.        RETAILMSG(1, (L"Could not create NMEA read thread.\r\n"));  
110.        return FALSE;  
111.    }  
112.    else  
113.    {  
114.        //SetThreadPriority(nmeathread_hand, THREAD_PRIORITY_BELOW_NORMAL);  
115.        //ResumeThread(nmeathread_hand);  
116.    }  
117.  
118.    SYSTEMTIME stUTC;  
119.    SYSTEMTIME stLocal;  
120.  
121.    GetLocalTime(&stLocal);  
122.    GetSystemTime(&stUTC);  
123.    giHourDiff = stLocal.wHour - stUTC.wHour;  
124.  
125.    return TRUE;  
126.}  

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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