c語言實現rs232通過頭tx輸出rx輸入

只此冒泡君 2014-06-25 04:53:04
板子連接串口線,將tx和rx串聯,程序實現通過tx發送一個簡單的數據 比如‘a’, 然後rx那邊收到‘a’ 如何用c語言實現??
...全文
270 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
QQ515311445 2014-07-02
  • 打赏
  • 举报
回复
引用 7 楼 u012293844 的回复:
[quote=引用 5 楼 llxxhm 的回复:] [quote=引用 2 楼 u012293844 的回复:] [quote=引用 1 楼 zhao4zhong1 的回复:] 参考: MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.DSP MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.RES MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.RC MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\MAKEFILE MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\VERSION.H MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\RESOURCE.H MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.H MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.C MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\README.TXT MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.ICO MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.BMP MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.DEF
板子上通過serial口插上serial線然後用金屬條將txrx相連 板子上運行程序能實現從tx傳數據給rx嗎?[/quote] 是的,TX和RX短接之后,硬件上就通了,只要驱动支持,应用就可以收到数据[/quote]但是我只要發送數據,機器就重啟[/quote] 如果应用可以用在其它地方接收串口数据,那很可能就是硬件的问题了
只此冒泡君 2014-07-01
  • 打赏
  • 举报
回复
只此冒泡君 2014-07-01
  • 打赏
  • 举报
回复
引用 5 楼 llxxhm 的回复:
[quote=引用 2 楼 u012293844 的回复:] [quote=引用 1 楼 zhao4zhong1 的回复:] 参考: MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.DSP MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.RES MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.RC MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\MAKEFILE MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\VERSION.H MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\RESOURCE.H MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.H MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.C MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\README.TXT MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.ICO MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.BMP MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.DEF
板子上通過serial口插上serial線然後用金屬條將txrx相連 板子上運行程序能實現從tx傳數據給rx嗎?[/quote] 是的,TX和RX短接之后,硬件上就通了,只要驱动支持,应用就可以收到数据[/quote]但是我只要發送數據,機器就重啟
cwt8805 2014-07-01
  • 打赏
  • 举报
回复

//打开串口
hCOM = CreateFile("\\\\.\\COM3", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hCOM == INVALID_HANDLE_VALUE)
{
	if ((i = GetLastError()) == 2) 
		MessageBox(GetForegroundWindow(), TEXT("该串口不存在"), TEXT("操作失败"), MB_ICONINFORMATION);
	else if (i == 5)
		MessageBox(GetForegroundWindow(), TEXT("该串口已被占用"), TEXT("操作失败"), MB_ICONINFORMATION);
	else
		MessageBox(GetForegroundWindow(), TEXT("无法打开串口"), TEXT("操作失败"), MB_ICONINFORMATION);
	return TRUE;
}

if (PurgeComm(hCOM, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR) == 0)
{
	MessageBox(GetForegroundWindow(), TEXT("清除串口缓冲区出错"), TEXT("操作失败"), MB_ICONINFORMATION);
	return TRUE;
}

//设置串口的波特率等等
if (!GetCommState(hCOM, &dcb))
{
	MessageBox(GetForegroundWindow(), TEXT("无法获取串口状态"), TEXT("操作失败"), MB_ICONINFORMATION);
	hCOM = INVALID_HANDLE_VALUE;
	return TRUE;
}
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
if (!SetCommState(hCOM, &dcb))
{
	MessageBox(GetForegroundWindow(), TEXT("无法设置串口状态"), TEXT("操作失败"), MB_ICONINFORMATION);
	hCOM = INVALID_HANDLE_VALUE;
	return TRUE;
}

//设置串口超时
COMMTIMEOUTS communication_timeout;
communication_timeout.ReadIntervalTimeout=MAXDWORD;
communication_timeout.ReadTotalTimeoutMultiplier=200;
communication_timeout.ReadTotalTimeoutConstant=1000;
communication_timeout.WriteTotalTimeoutMultiplier=0;
communication_timeout.WriteTotalTimeoutConstant=0;
if (!SetCommTimeouts(hCOM, &communication_timeout))
{
	MessageBox(GetForegroundWindow(), TEXT("无法设置串口超时"), TEXT("操作失败"), MB_ICONINFORMATION);
	hCOM = INVALID_HANDLE_VALUE;
	return TRUE;
}

//清除串口缓冲区
if (PurgeComm(hCOM, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR) == 0)
{
	MessageBox(GetForegroundWindow(), TEXT("清除串口缓冲区出错"), TEXT("操作失败"), MB_ICONINFORMATION);
	return FALSE;
}

//发送数据
BYTE cDataBuf[6];
DWORD dwBytesWriten, dwBytesReaded;
cDataBuf[0] = 0x55;
cDataBuf[1] = bType;
cDataBuf[2] = 0xff;
cDataBuf[3] = 0xff;
cDataBuf[4] = 0xff;
cDataBuf[5] = 0xaa;
WriteFile(hCOM, cDataBuf, 6, &dwBytesWriten, NULL);

//接收数据
ReadFile(hCOM, cDataBuf, 6, &dwBytesReaded, NULL);
QQ515311445 2014-07-01
  • 打赏
  • 举报
回复
引用 2 楼 u012293844 的回复:
[quote=引用 1 楼 zhao4zhong1 的回复:] 参考: MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.DSP MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.RES MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.RC MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\MAKEFILE MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\VERSION.H MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\RESOURCE.H MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.H MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.C MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\README.TXT MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.ICO MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.BMP MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.DEF
板子上通過serial口插上serial線然後用金屬條將txrx相連 板子上運行程序能實現從tx傳數據給rx嗎?[/quote] 是的,TX和RX短接之后,硬件上就通了,只要驱动支持,应用就可以收到数据
只此冒泡君 2014-06-26
  • 打赏
  • 举报
回复
板子上通過serial口插上serial線然後用金屬條將txrx相連 板子上運行程序能實現從tx傳數據給rx嗎?
只此冒泡君 2014-06-26
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
参考: MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.DSP MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.RES MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.RC MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\MAKEFILE MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\VERSION.H MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\RESOURCE.H MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.H MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.C MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\README.TXT MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.ICO MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.BMP MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.DEF
板子上通過serial口插上serial線然後用金屬條將txrx相連 板子上運行程序能實現從tx傳數據給rx嗎?
赵4老师 2014-06-25
  • 打赏
  • 举报
回复
参考: MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.DSP MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.RES MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.RC MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\MAKEFILE MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\VERSION.H MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\RESOURCE.H MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.H MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.C MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\README.TXT MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.ICO MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.BMP MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.DEF

69,371

社区成员

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

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