wince6.0是否可以直接向串口发送16进制的数据??

CreasyChan 2010-05-25 10:15:20
wince6.0是否可以直接向串口发送16进制的数据??
DWORD dwBytesWrite= 132;
DWORD dwBytesWrite1= 35;
COMSTAT ComStat;
DWORD dwErrorFlags;
BOOL bWriteStat;

char a[10];
memset(a,'\0',10);
char b[2];
memset(b,'\0',2);
char c[4];
memset(c,'\0',4);
char f[2];
memset(f,'\0',2);
char e[2];
memset(e,'\0',2);

f[0] = 0x1B;
f[1] = 0x40;
bWriteStat=WriteFile(hCom,f,2,&dwBytesWrite1,NULL);
//居中
a[0] = 0x1B;
a[1] = 0x61;
a[2] = 0x01;
// 设置字符倍宽打印
a[3] = 0x1C;
a[4] = 0x21;
a[5] = 0x0C;
//
a[6] = 0x1C;
a[7] = 0x53;
a[8] = 0x00;
a[9] = 0x01;

bWriteStat=WriteFile(hCom,a,10,&dwBytesWrite1,NULL);
还有,为什么我发送后设备没有反应??
...全文
252 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
withgy 2011-08-08
  • 打赏
  • 举报
回复
ce下发的是 unicode字符集 打印机解析用 ansi 所以 错的 谢谢
wolfmvp 2010-05-28
  • 打赏
  • 举报
回复
我觉得你完全可以借助串口调试助手来进一步定位出原因具体在那一方面,现在产生你这个问题的原因可能性太多,软件与硬件都可能有问题…
CreasyChan 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wjf_zjut 的回复:]
接下去就得分析驱动了。
[/Quote]
怎分析驱动呀??
IT挖矿工 2010-05-26
  • 打赏
  • 举报
回复
楼主你首先要确认这些数据是否已经发送出去了再做下一步考虑
yhp1888 2010-05-26
  • 打赏
  • 举报
回复
数据本不分16进制,8进制,10进制,只是为了让人看懂。
任何数据,都是0和1

楼主连这个基本概念都是外行,串口发送能不出问题??

楼主应该先连其它能显示接收数据的设备,调试好,再连打印机。

说不定,楼主只是搞错了打印机能接收的数据格式。
Peasant_Lee 2010-05-26
  • 打赏
  • 举报
回复
对于arm或者其他cpu来说,处理的数据都是二进制的,没有什么16进制,8进制,10进制之分。只要是数据。长度符合他发送的长度就可以了。这些进制,只不过方便我们使用和研究。。
yulewjx 2010-05-26
  • 打赏
  • 举报
回复
我看楼主还是先把这板上的串口接在电脑上,看能不能接收到数据先。
Peasant_Lee 2010-05-26
  • 打赏
  • 举报
回复
现在你能排除,开发板上面的串口部分的硬件肯定没有错吗?串口连接没错吗?假如没错,那么问题肯定在串口驱动上面的。而不关是否是16进制了。你的串口接收不到数据。硬件软件都可能有错,先从硬件排除问题,然后再找软件的错误。
CreasyChan 2010-05-26
  • 打赏
  • 举报
回复
wsprintf(szPort, L"COM%d:", portNo);
//打开串口
m_hComm = CreateFile(
szPort,
GENERIC_READ | GENERIC_WRITE, //允许读和写
0, //独占方式(共享模式)
NULL,
OPEN_EXISTING, //打开而不是创建(创建方式)
0,
NULL
);

if (m_hComm == INVALID_HANDLE_VALUE)
{
// 无效句柄,返回。
TRACE(_T("CreateFile 返回无效句柄"));
return FALSE;
}

// 得到打开串口的当前属性参数,修改后再重新设置串口。
// 设置串口的超时特性为立即返回。

if (!GetCommState(m_hComm,&commParam))
{
TRACE(_T("GetCommState error"));
return FALSE;
}

commParam.BaudRate = baud; // 设置波特率
commParam.fBinary = TRUE; // 设置二进制模式,此处必须设置TRUE
commParam.fParity = TRUE; // 支持奇偶校验
commParam.ByteSize = databits; // 数据位,范围:4-8
commParam.Parity = NOPARITY; // 校验模式
commParam.StopBits = stopbits; // 停止位

commParam.fOutxCtsFlow = FALSE; // No CTS output flow control
commParam.fOutxDsrFlow = FALSE; // No DSR output flow control
commParam.fDtrControl = DTR_CONTROL_ENABLE;
// DTR flow control type
commParam.fDsrSensitivity = FALSE; // DSR sensitivity
commParam.fTXContinueOnXoff = TRUE; // XOFF continues Tx
commParam.fOutX = FALSE; // No XON/XOFF out flow control
commParam.fInX = FALSE; // No XON/XOFF in flow control
commParam.fErrorChar = FALSE; // Disable error replacement
commParam.fNull = FALSE; // Disable null stripping
commParam.fRtsControl = RTS_CONTROL_ENABLE;
// RTS flow control
commParam.fAbortOnError = FALSE; // 当串口发生错误,并不终止串口读写

if (!SetCommState(m_hComm, &commParam))
{
TRACE(_T("SetCommState error"));
return FALSE;
}


//设置串口读写时间
COMMTIMEOUTS CommTimeOuts;
GetCommTimeouts (m_hComm, &CommTimeOuts);
CommTimeOuts.ReadIntervalTimeout = MAXDWORD;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = 10;
CommTimeOuts.WriteTotalTimeoutConstant = 1000;

if(!SetCommTimeouts( m_hComm, &CommTimeOuts ))
{
TRACE( _T("SetCommTimeouts 返回错误") );
return FALSE;
}

// m_pPortOwner = pPortOwner;

//指定端口监测的事件集
SetCommMask (m_hComm, EV_RXCHAR);

//分配设备缓冲区
SetupComm(m_hComm,1024,1024);

//初始化缓冲区中的信息
PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
m_hReadCloseEvent = CreateEvent(NULL,TRUE,FALSE,NULL);

调试过m_hComm都分配有地址,发送数据给打印机:
char c[4];
memset(c,'\0',4);

//开锁
c[0] = 0x0A;
c[1] = 0x0A;
c[2] = 0x0A;
c[3] = 0x0A;
bWriteStat=WriteFile(m_hComm,c,4,&dwBytesWrite1,NULL);
如果是在电脑上,打印机这样是有反应的;可是在wince板上就没反应了,各位高手帮忙看看哪里用错了??
CreasyChan 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yhp1888 的回复:]
数据本不分16进制,8进制,10进制,只是为了让人看懂。
任何数据,都是0和1

楼主连这个基本概念都是外行,串口发送能不出问题??

楼主应该先连其它能显示接收数据的设备,调试好,再连打印机。

说不定,楼主只是搞错了打印机能接收的数据格式。
[/Quote]
我用电脑的程序直接向打印机发送16进制的数据都可以打印;用wince编译过的程序,在那块板上就没反应了,且我用调试模式跟踪过,串口是打开的,发送数据给打印机串口就是没有效果!!
CreasyChan 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 iwillbeback008 的回复:]
引用 3 楼 panzekai 的回复:
bootloader我也看了很久,可是还是云里雾里的,嵌入式要慢慢了,急不得。


说有感触阿!

不要着急,问题还是得慢慢分析解决的
[/Quote]

在工作呀,这问题两天都还没解决,不急不行呀,两位老兄!!
iwillbeback008 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 panzekai 的回复:]
bootloader我也看了很久,可是还是云里雾里的,嵌入式要慢慢了,急不得。
[/Quote]

说有感触阿!

不要着急,问题还是得慢慢分析解决的
zhdi1986 2010-05-26
  • 打赏
  • 举报
回复
串口发送的数据就是以数据的二进制形式按位发送的,16进制仅仅是一种表示形式而已,效果都是一样的。
wjf_zjut 2010-05-26
  • 打赏
  • 举报
回复
接下去就得分析驱动了。
panzekai 2010-05-25
  • 打赏
  • 举报
回复
bootloader我也看了很久,可是还是云里雾里的,嵌入式要慢慢了,急不得。
CreasyChan 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gooogleman 的回复:]
可以的,你的串口驱动是不是有问题啊
[/Quote]
我用的是wince6.0系统的那块板上的串口直接连接一个设备(比如是打印机,也是串口进行连接),那板直接向这打印发送数据进行打印,但是没有效果。。。。但串口通信像是不用驱动的呀??
gooogleman 2010-05-25
  • 打赏
  • 举报
回复
可以的,你的串口驱动是不是有问题啊

19,502

社区成员

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

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