WINCE应用层设计经验总结-关于用串口发AT命令给蓝牙

来源:互联网 发布:消音器会影响威力知乎 编辑:程序博客网 时间:2024/05/01 06:49

//=====================================================//

//TITLE:关于用串口发AT命令给蓝牙

//Author:Mercury Xu

//Detail:用wince串口发送AT命令给蓝牙模块

//软件环境:wince 5.0 + vs2005 +自定制SDK(和标准SDK类似) //硬件类型:UART串口-》USP也可以。其实是一样的。

//Date:2008-07-02

//======================================================

// 背景知识: UARTs (Universal Asynchronous Receiver/Transmitter) 串口 USPs (Universal Serial Port) 串口TOO....S社特定的一种串口模式。。。差很久都没查到具体的描述。。只在S社的文档中看到了相关解释。。具体如下: Universal serial ports (USP) are used for serial communication where only 1 bit is transmitted

The advantage of a serial port is that it requires fewer pins so it is often more cost-effective than

port especially in long-range communication. The serial port is a general-purpose interface that

or receives data a bit at one time and used for almost any type of device. USP has 3 major categories:

• PC peripherals: modem, mouse, and printer

• Communication devices : Cable modem, ISDN, and xDSL

• Embedded systems – A/D, D/A converters, RF modules, and serial EEPROMs 看来看去就是UART...唉。。S社的工程师还是厉害。设计出来一个这个接口。不愧是清“滴”大学的牛人。。。。。。。 //=====================================================//

正题: 其实整体的概念很简单。 仔细参考串口的写入和读出的方法。readfile & writefiel...这两个函数真的要熟悉。。很好很强大的。 下面列出两个函数的使用方法(抄MSDN的,自己加了点注释)

BOOL WriteFile(//这个当然是用来读COM。 HANDLE hFile,//这个是你的COM入口,注意点两个COM一般的格式是_T("COMX:"), //X是数字代表第几个从0开始哦,当然这个是先要使用CreatFile //建立一个HANDLE型变量放过来就好,习惯定义是叫hCom之类的 LPCVOID lpBuffer,//这个是你要写入的东西,注意点是定义成CHAR *的来做。很方便控制AT命令也容易些。 DWORD nNumberOfBytesToWrite,//这个。自己看咯。个数了。我先用CString的然后 //获取个长度送给这个变量。还算好用 LPDWORD lpNumberOfBytesWritten,//取个地址就好 LPOVERLAPPED lpOverlapped //最后这个参考下MSDN,给大家个参考,我也是在网上找的 //m_osWrite.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL););BOOL ReadFile(//同上了。只是个反操作 HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped);

HANDLE CreateFile(//这个就不多介绍了。只介绍几个要注意的地方 LPCTSTR lpFileName,//这里。。。上面说过了的_T("COMX:")。注意咯。。。 DWORD dwDesiredAccess,//允许读和写的设定GENERIC_READ|GENERIC_WRITE这样子小例子 DWORD dwShareMode, //独占方式我设定了0 LPSECURITY_ATTRIBUTES lpSecurityAttributes,//NULL DWORD dwCreationDisposition, //OPEN_EXISTING, //打开而不是创建 DWORD dwFlagsAndAttributes, //FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, //重叠方式 HANDLE hTemplateFile //NULL);

MS的工程师真的是人才。以上所有的函数返回都为bool的大家想怎么YY就怎么YY了。。。BOOL型很适合YY 另外。。。你创建了成功了。。。还要配置下波特率什么的。。。给大家一个参考。我用的一个蓝牙模块的参考 也是参考网上高手的写的。很好用。主要是要符合你的硬件要求哦。。。超时是不可以少的。

SetupComm(hCCom,100,100); //输入缓冲区和输出缓冲区的大小都是100COMMTIMEOUTS TimeOuts;//设定读超时TimeOuts.ReadIntervalTimeout=MAXDWORD;TimeOuts.ReadTotalTimeoutMultiplier=0;TimeOuts.ReadTotalTimeoutConstant=0;//在读一次输入缓冲区的内容后读操作就立即返回,//而不管是否读入了要求的字符。//设定写超时TimeOuts.WriteTotalTimeoutMultiplier=100;TimeOuts.WriteTotalTimeoutConstant=500;SetCommTimeouts(hCCom,&TimeOuts); //设置超时DCB dcb;GetCommState(hCCom,&dcb);dcb.BaudRate=9600; //波特率为9600dcb.ByteSize=8; //每个字节有8位dcb.Parity=NOPARITY; //无奇偶校验位dcb.StopBits=TWOSTOPBITS; //两个停止位SetCommState(hCCom,&dcb);PurgeComm(hCCom,PURGE_TXCLEAR|PURGE_RXCLEAR);

接下来具体讲下写值得问题。其实在大学学过了然后类。。。。不说了。。我对不起老师。。花了1个小时才折腾出来 char *  XXX这个东西可以多定义几个。 E.G. char * ATCom; char * CallNum; char CallOut[150];//这个用来送出去的。 然后组合的话就把ATCom和CallNum和CallOut组合起来吧。。。。 include一个string.h安全一些。然后 STRCPY STRCAT STRCMP.....想怎么用怎么用吧。 忘记了或者不会的自己去查查大学的课本。不要再费解了。老老实实看看书吧。

原创粉丝点击