永发信息网

读串口数据是遇到00后面的就不读了 怎么解决?

答案:2  悬赏:0  手机版
解决时间 2021-12-25 05:27
  • 提问者网友:最美的风景
  • 2021-12-24 18:47
bool CommonUart::init(u32 config_data, u32 BaudRate)
{
u8 byteSize = 0x8;
if (!(config_data & DATABIT8)) byteSize = 0x7;

char strPort[8];
sprintf_s(strPort,"COM%d",m_Port+1);

//for(int count = 10;m_hCom == INVALID_HANDLE_VALUE && count;-- count )
if(m_hCom == INVALID_HANDLE_VALUE)
{
DCB dcb;
HANDLE hMT,hCom;
hCom = CreateFileA( strPort,
GENERIC_READ|GENERIC_WRITE,
0, // must be opened with exclusive-access
NULL, // no security attributes
OPEN_EXISTING, // must use OPEN_EXISTING
0, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
if( hCom != INVALID_HANDLE_VALUE)
{
if(GetCommState(hCom,&dcb))
{
dcb.BaudRate = BaudRate; // set the baud rate
dcb.ByteSize = byteSize; // data size, xmit, and rcv
dcb.Parity = NOPARITY; // no parity bit
dcb.StopBits = ONESTOPBIT;
dcb.fNull = 0;
if(!SetCommState(hCom,&dcb))
goto err_handle;

COMMTIMEOUTS to={0};
to.ReadIntervalTimeout = MAXDWORD;
to.ReadTotalTimeoutMultiplier = 0;
to.ReadTotalTimeoutConstant = 0;
to.WriteTotalTimeoutConstant = 10;
to.WriteTotalTimeoutMultiplier = 1;
if(!SetCommTimeouts(hCom,&to))
goto err_handle;
}
if(m_hThread==INVALID_HANDLE_VALUE && onData)
{
hMT = CreateThread(NULL,0,getUartInput,this,0,NULL);
if(hMT == INVALID_HANDLE_VALUE)
goto err_handle;
m_hThread =(void*)hMT;
}

m_hCom = (void*)hCom;
return true;
}
}
err_handle:
uninit();
return false;
}
void CommonUart::write(unsigned char* buf, int len )
{
DWORD bytesWritten;
WriteFile(m_hCom,buf,len,&bytesWritten,NULL);
}

int CommonUart::read(unsigned char* buf, int len ) //成功返回len,否则返回0
{


DWORD bytesread;
ReadFile(m_hCom,buf,(DWORD)len,&bytesread,NULL);
return bytesread;
}
这是串口的打开和读写 数据是16进制格式的 用串口调试工具测试 不管是我发指令给串口调试工具 还是他给我发 只要遇到00后面的数据就没了
谁能帮我解决下!
最佳答案
  • 五星知识达人网友:污到你湿
  • 2021-12-24 19:55
编译器问题
全部回答
  • 1楼网友:轻雾山林
  • 2021-12-24 21:13
u8的范围只有0-255没有小数 c语言只有float 跟 double 才是小数格式 而且串口助手是无法接受c语言的小数格式的 常规的串口助手只能显示hex(16进制数)和ascii码 所以才需要取出每一位并转换成ascii码
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯