社区
C语言
帖子详情
奇怪的串口问题,各位帮忙
fang_jb
2003-03-12 01:54:29
我的程序里开串口读写都是正常的,但却存在一个很奇怪的问题
每次重新启动机器以后,用我的程序第一次去读串口都是读不到任何信息,
需要用超级终端去连一下,连过之后再用我的程序,就可以工作了,
似乎是需要有个东西去引导一下还是怎么样的,是不是串口的初始化有什么问题?
请各位有经验的帮忙,谢谢先
...全文
85
7
打赏
收藏
奇怪的串口问题,各位帮忙
我的程序里开串口读写都是正常的,但却存在一个很奇怪的问题 每次重新启动机器以后,用我的程序第一次去读串口都是读不到任何信息, 需要用超级终端去连一下,连过之后再用我的程序,就可以工作了, 似乎是需要有个东西去引导一下还是怎么样的,是不是串口的初始化有什么问题? 请各位有经验的帮忙,谢谢先
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fang_jb
2003-03-12
打赏
举报
回复
写的部分里面有一些port->那些是传递进来的一个参数,把它去掉就可以看了
fang_jb
2003-03-12
打赏
举报
回复
BOOL bRead = TRUE;
BOOL bResult = TRUE;
DWORD dwError = 0;
DWORD BytesRead = 0;
COMSTAT comstat;
unsigned char RXBuff;
for(;;)
{
EnterCriticalSection(m_csCommunicationSync);
bResult = ClearCommError(m_hComm, &dwError, &comstat);
LeaveCriticalSection(m_csCommunicationSync);
if (comstat.cbInQue == 0)
break;
EnterCriticalSection(&port->m_csCommunicationSync);
if(bRead)
{
m_ov.Offset = 0;
m_ov.OffsetHigh = 0;
bResult = ReadFile(port->m_hComm,&RXBuff,1,&BytesRead,&port->m_ov);
if(!bResult)
{
switch (dwError = GetLastError())
{
case ERROR_IO_PENDING:
bResult = GetOverlappedResult(m_hComm,&m_ov,&BytesRead,TRUE);
if (!bResult)
ProcessErrorMessage("GetOverlappedResults() in ReadFile()");
break;
default:
ProcessErrorMessage("ReadFile()");
break;
}
}
else
bRead = TRUE;
}
if (!bRead)
{
bRead = TRUE;
bResult = GetOverlappedResult(port->m_hComm, // Handle to COMM port
&port->m_ov, // Overlapped structure
&BytesRead, // Stores number of bytes read
TRUE); // Wait flag
if (!bResult)
port->ProcessErrorMessage("GetOverlappedResults() in ReadFile()");
} // close if (!bRead)
LeaveCriticalSection(&m_csCommunicationSync);
}
这里是读串口的部分,暂时没使用写串口
求教
fang_jb
2003-03-12
打赏
举报
回复
if (m_ov.hEvent != NULL)
ResetEvent(m_ov.hEvent);
m_ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (m_hWriteEvent != NULL)
ResetEvent(m_hWriteEvent);
m_hWriteEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (m_hShutdownEvent != NULL)
ResetEvent(m_hShutdownEvent);
m_hShutdownEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
m_hEventArray[0] = m_hShutdownEvent;
m_hEventArray[1] = m_ov.hEvent;
m_hEventArray[2] = m_hWriteEvent;
InitializeCriticalSection(&m_csCommunicationSync);
bool bResult = FALSE;
char *szPort = new char[10];
EnterCriticalSection(&m_csCommunicationSync);
if (m_hComm != NULL)
{
CloseHandle(m_hComm);
m_hComm = NULL;
}
sprintf(szPort, "COM%d", m_data.portnr);
m_hComm = CreateFile(szPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL); delete [] szPort;
if (m_hComm == INVALID_HANDLE_VALUE)
return FALSE;
PurgeComm(m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);
SetCommMask(m_hComm, EV_RXCHAR);
GetCommState(m_hComm, &m_dcb);
//这里的m_data是一个设置好的结构,里面就是些串口的基本参数
m_dcb.BaudRate = m_data.baud;
m_dcb.ByteSize = m_data.databits;
m_dcb.Parity = m_data.parity;
m_dcb.StopBits = m_data.stopbits;
m_dcb.fBinary = TRUE;
m_dcb.fParity = FALSE;
SetCommState(m_hComm, &m_dcb);
LeaveCriticalSection(&m_csCommunicationSync);
unsigned dThreadNb = 0;
m_hThread = reinterpret_cast<HANDLE>(_beginthreadex(NULL,0,SerialPortThread,this,0,&dThreadNb));
if (m_hThread == NULL)
return FALSE;
return TRUE;
这里是打开串口的部分
morningsun
2003-03-12
打赏
举报
回复
源代码呢?
yzb1000
2003-03-12
打赏
举报
回复
学习,up
fang_jb
2003-03-12
打赏
举报
回复
我顶
fang_jb
2003-03-12
打赏
举报
回复
顶一下顶一下,高手进来帮忙啊
stm32f4
串口
空闲中断+DMA遇到的
奇怪
错位
问题
基于stm32f407 文章目录一、利用DMA接受
串口
任意长数据1、简介2、循环模式和普通模式二、DMA接受数据错位
问题
1、程序设置2、数据缓冲错位
问题
(1)
问题
描述:(2)调试过程(3)解决方案(4)后记 一、利用DMA接受
串口
任意长数据 1、简介 有时候,我们希望利用
串口
在设备间进行高速而稳定的数据通信,于是定义了一些通讯协议,包括帧头、功能码、数据码、校验码等等,DMA非常适合此类需求。...
CC2530
串口
控制LED灯
奇怪
玩法
CC2530
串口
控制LED灯
奇怪
玩法 实验目的:CC2530用
串口
从上位机发送16进制命令代码来控制LED3、4、5、6并返回相应动作 一、代码 /*用
串口
从上位机发送16进制命令代码来控制LED3、4、5、6并返回相应回馈 用外部晶振32MHz,波特率为9600bps、使用USART1 命令代码1:0x01 ==> LED3亮,返回“LED3 is open!" 命令代码2:0x02 ==> LED4亮,返回“LED4 is open!" 命令代码3:0x03 ==> LED
Linux
串口
通信中一种接收不到数据的
问题
的解决
转载来源:嵌入式系统之初学者点滴 (百度空间) 原文 在这篇文章()中,实现了Linux环境下的
串口
读写操作,程序也运行成功了。但是再进一步测试时发现,如果开机之后直接如上文中所说,分别运行读程序和写程序,再用导体同时触碰
串口
的2、3针的话。此时将显示写入
串口
成功,但是读
串口
数据失败。 这个
奇怪
的
问题
当时之所以没有被发现出来,是因为在这之前,曾经打开过一次minicom。后来实验
串口
打印信息的
奇怪
问题
遇到的
问题
: 自己解决加入
串口
打印信息碰到了郁闷的事情。 刚开始,我只想把C:/WINCE500/PUBLIC/COMMON/OAK/DRIVERS/SERIAL/COM_MDD2编译成debug版本,来打印信息的。 我采用了如下方法: 第一种: 将下面这句代码加入到驱动所在目录中的sources文件中即可: CDEFINES=$(CDEFINES) -DDEBUG 第二种 #undef
adb 以及 调试
串口
使用
奇怪
问题
总结
vim使用
问题
C语言
70,040
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章