用API来实现串口通信其实不是很难,关于串口操作的函数在MSDN中都可以找到,大致的过程是1用CreateFile函数创建串口2用SetupComm函数分配串口的输入和输出缓冲区的大小,当然也可以不设置,系统会默认的分配1024和512字节作为输入和输出缓冲区的大小3用BuildCommDCB或者SetCommState函数来设置串口通信的相关参数,如波特率、奇偶校验、数据位、停止位以及线路检测等。4用WriteFile函数向串口发送数据5Wi
dows到WM_COMMNOTIFY消息的时候,用ReadFile函数从串口读取数据
我这里有一个示例程序,功能不是很强,但是学习串口API编程还是可以的:
u
itU
it1
i
terface
usesWi
dowsMessagesSysUtilsVaria
tsClassesGraphicsCo
trolsFormsDialogsStdCtrlsComCtrls
co
stWM_COMMNOTIFYWM_USER100通讯消息
typeTForm1classTFormStatusBar1TStatusBarMemo1TMemoMemo2TMemoLabel1TLabel
fLabel2TLabelGroupBox1TGroupBoxLabel3TLabelLabel4TLabelLabel5TLabelLabel6TLabelComboBox4TComboBoxComboBox3TComboBoxComboBox2TComboBoxComboBox1TComboBoxLabel7TLabelComboBox5TComboBoxbt
Ope
ComTButto
bt
Se
dDataTButto
bt
ReceiveDataTButto
bt
CloseComTButto
procedurebt
Ope
ComClickSe
derTObjectprocedureFormCreateSe
derTObjectprocedurebt
CloseComClickSe
derTObjectprocedurebt
Se
dDataClickSe
derTObjectprocedurebt
ReceiveDataClickSe
derTObjectprivatePrivatedeclaratio
sprocedureWM_COMMNOTIFYpublicPublicdeclaratio
se
dWMCOMMNOTIFYvarMessageTMessagemessage
var
fForm1TForm1
impleme
tatio
Rdfm
varCommHa
dleTHa
dlePostEve
tTHa
dleReadOsToverlappedCo
ectedBoolea
ReceiveBoolea
ReceiveDataDword
procedureAddToMemoStrPCharLe
Dword接收的数据送入显示区Memo2begi
设置接收后的字符串为NULL终止strLe
0Form1Memo2TextForm1Memo2TextStrPasstre
d
procedureCommWatchPtrPoi
terstdcall通讯监视线程vardwEvtMaskdwTra
serDwordPostMsgFlagBoolea
overlappedToverlapped
begi
ReceiveTrue
fFillCharoverlappedSizeOfoverlapped0overlappedhEve
tCreateEve
t
ilTrueFalse
il创建重叠读事件对象ifoverlappedhEve
t
ullthe
begi
MessageBox0overlappedEve
tCreateErrorNoticeMB_OKExite
d
进入串口监视状态,直到全局变量Receive置为False停止whileReceivedobegi
dwEvtMask0等待串口事件发生if
otWaitCommEve
tCommHa
dledwEvtMaskoverlappedthe
begi
ifERROR_IO_PENDINGGetLastErrorthe
GetOverLappedResultCommHa
dleoverlappeddwTra
serTruee
d
串口读事件发布消息ifdwEvtMaska
dEV_RXCHAREV_RXCHARthe
begi
等待允许传递WM_COMMNOTIFY通讯消息WaitForSi
gleObjectPosteve
tINFINITE处理WM_COMMNOr