C++Builder串口通信设计(二)-发送字节包
1、PC机
2、STM32F10x
通过通过串口连接(由相应的硬件芯片支持:MAX323或USB转串口芯片等)。
设计一个由PC机通过串口发送数据包的程序。串口也可采用USB转串口。串口与单片机(stm32F10x通信)。单片机程序是收到数据后再通过串口发回去(发给PC机)。
二、设计工程
1、界面
一个mscomm控件;
一个memo1控件显示串口接收的内容;
三个button分别用于串口初始化、发送、终止程序;
2、串口初始化化部分
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender) //串口初始化
{
static st=0;
AnsiString s;
if(st==0)
{
try
{
Form1->MSComm1->_CommPort=3;//COM3( 采用USB转串口)
Form1->MSComm1->Settings="9600,n,8,1"; //初始化串口
Form1->MSComm1->InputMode=type; //采用全局变量type设置传入数据的格式,0表示文本形式 ,1表示二进制格式,初始默认取为1。
Form1->MSComm1->RThreshold=1;
Form1->MSComm1->PortOpen=true; //打开串口
Application->MessageBoxA("串口初始化成功","串口初始化",0);
}
catch(...)
//catch(EOleException&e)
{
Application->MessageBoxA("串口未连接好或已经打开","故障提示");
}
Button1->Caption="关闭";
st=1;
}
else
{
Form1->MSComm1->PortOpen=false;
Button1->Caption="打开";
st=0;
}
}
3、串口中断接收部分
//---------------------------------------------------------------------------
void __fastcall TForm1::MSComm1Comm(TObject *Sender) //串口接收事件
{
AnsiString str; //声明一个AnsiString类型的变量
OleVariant rec; //声明一个用于接收数据的OleVariant变量。
int count;
int j;
unsigned char buf[128];
switch(MSComm1->CommEvent)
{
case comEvReceive: //接收事件
if(type==0) //字符型接收
{
str=MSComm1->Input;//收到字符串;
Memo1->Text=Memo1->Text+str+" "; //显示收到的字符串
}
else //type=1 为二进制接收
{
count=MSComm1->InBufferCount; //字节数
rec=MSComm1->Input; //取出接收缓冲器内容
for(j=0;j
{
buf[j]=rec.GetElement(j); //转换成字节类型
}
Memo1->Text=Memo1->Text+"";
for(j=0;j
{
Memo1->Text=Memo1->Text+IntToHex(buf[j],2)+" "; //显示接收的字节(以十六进制显示)
}
}
break;
default: break;
} //switch(MSComm1->CommEvent)
}
//---------------------------------------------------------------------------
4、串口发送部分
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender) //发送
{
int i;
OleVariant send;
int count=5; //发送包的字节数
unsigned char pc_to_stm32[5]={0x80,0x81,0xff,0x05,0x05}; //PC发出的数据包
send=VarArrayCreate(OPENARRAY(int,(0,count-1)),varByte); //创建一个动态数组
for(i=0;i
{
send.PutElement(pc_to_stm32[i],i); //填充待发送的数据元素
}
MSComm1->Output=send;//从串口发送
}
5、程序终止部分
void __fastcall TForm1::Button3Click(TObject *Sender) //退出应用程序
{
Application->Terminate();
}
三、运行结果
C++Builder串口通信设计发送字节 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)