怎样关闭串口?

怎样关闭串口?,第1张

1、确定 是否 有你指定此携的 串口,去设备管理器 看看

2、网络上有很明扒败多 串口调试工具,下载一个,看看能不能打开 你指定的串口;

我知道 有个 虚拟串激颤口 软件,可以看出 某个串口 当前的状态,是否 被打开,打开时设置的参数 是怎么样的?!

下载地址

武汉鸿伟光电

http://www.homewaygd.com/cn/list.php/4-1.html

祝你顺利

串口已经慎坦被打开,我如何在程序里判断,并把他关闭 ,然后在打开

#include "stdafx.h"

#include "Uart.h"

#include <windows.h>

#include <stdio.h>

HANDLE UART_Open(int nPort, int nBuadRate)

{

char nt_port[10]={0}

sprintf(nt_port,"COM%d",nPort)

hCom = CreateFile(nt_port,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL)

//int ret = 0

if(hCom==(HANDLE)-1)

{

AfxMessageBox("打开COM失败!!"颂孝老)

//TRACE("OPEN_PORT_FAIL\n")

// return OPEN_PORT_FAIL

}

if(hCom == INVALID_HANDLE_VALUE)

{

AfxMessageBox("打开COM失败!!")

//TRACE("OPEN_PORT_FAIL\n")

// return OPEN_PORT_FAIL

}

DCB dcb

if(!GetCommState(hCom,&dcb))//获取COM口的设备控制块

{

CloseHandle(hCom)

AfxMessageBox("获取串口参数失败!!")

//TRACE("GET_COM_STATA_FAIL\n")

// return GET_COM_STATA_FAIL

}

dcb.BaudRate=nBuadRate

dcb.ByteSize=8

dcb.Parity=NOPARITY

dcb.StopBits=ONESTOPBIT

if(!SetCommState(hCom,&dcb)) //设置COM口的设备控制块

{

CloseHandle(hCom)

AfxMessageBox("设置串口参数失败!!")

//TRACE("SET_COM_STATA_FAIL\n")

// return SET_COM_STATA_FAIL

}

SetupComm(hCom,1024,1024)//输入缓冲区和输出缓冲区的大小都是1024

COMMTIMEOUTS TimeOuts

//设定读超时

TimeOuts.ReadIntervalTimeout=1000

TimeOuts.ReadTotalTimeoutMultiplier=300

TimeOuts.ReadTotalTimeoutConstant=2000

//设定写超时

TimeOuts.WriteTotalTimeoutMultiplier=300

TimeOuts.WriteTotalTimeoutConstant=2000

if(!SetCommTimeouts(hCom,&TimeOuts)) //将超时参数写入设备控制

{

CloseHandle(hCom)

AfxMessageBox("野升设置串口超时失败!!")

// TRACE("SET_COM_TIMEOUT_FAIL\n")

// return SET_COM_TIMEOUT_FAIL

}

PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR)//清空缓冲区

return hCom

}

int UART_Read(HANDLE hCom, char *buf, int buf_len)

{

int ret = 0

DWORD len

ret = ReadFile(hCom,buf,buf_len,&len,NULL)

if(!ret)

{

//TRACE("RECV_DATA_FAIL\n")

AfxMessageBox("读取数据失败!!")

return RECV_DATA_FAIL

}

if(len == 0)

{

//TRACE("RECV_DATA_TIMEOUT\n")

AfxMessageBox("读取数据超时!!")

return RECV_DATA_TIMEOUT

}

return 0

}

int UART_Write(HANDLE hCom, char *buf, int buf_len)

{

int ret = 0

DWORD len

//ClearCommError(hCom,&dErrorflag,&comstat)

ret = WriteFile(hCom,buf,buf_len,&len,NULL)

if(!ret)

{

//TRACE("SEND_DATA_FAIL\n")

AfxMessageBox("写入数据失败!!")

return SEND_DATA_FAIL

}

if(len==0)

{

//TRACE("SEND_DATA_TIMEOUT\n")

AfxMessageBox("写入数据超时!!")

return SEND_DATA_TIMEOUT

}

PurgeComm(hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR)//清空缓冲区

return 0

}

int UART_Close(HANDLE hCom)

{

int ret=0

ret=CloseHandle(hCom)

if(!ret)

{

// TRACE("CLOSE_PORT_FAIL\n")

AfxMessageBox("关闭串口失败!!")

return CLOSE_PORT_FAIL

}

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12267183.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存