单片机 串口以二进制发送数据

平时串口按字符发送数据,这样发送数据简单,直接用“串口调试助手”就可接受数据,方便调试。
如果用二进制发送数据,发送内容会大大减少,因为不用把二进制转换成字符了。不过需要自己写上位机接收程序,按固定的大小接受数据,然后解析数据。
单片机二进制发送串口示例代码
void(){
 S s;
 byte * p=&s;
 size=sizeof(S);
 for(int i=0;i++;i<size){
  sendOneByte(p);
  p++;
 }


}
其中s是一个结构体
上位机接收串口数据示例代码
if(::ReadCommBlock(m_ComConfig,buffer,sizeof(s))!=0)
 {
  status=*((Status*)buffer);
  str.Format("%lu/t%lu/t%lu/t%lu/t%lu/t/r/n",ntohl(status.time_step),ntohl(status.sensor),ntohl(status.left_speed),ntohl(status.right_speed),ntohl(status.direct));
  fprintf(file,str);
}
其中s为相同的结构体

可能会遇到的问题:
单片机复位时,串口端电平改变会造成串口发送若干字节。这需要在上位机程序处首先读取该字节,然后抛弃。我测试的该字节为一个字节。
单片机发送数据和电脑CPU字节顺序可能不一样,可能一个是小端,一个是大端。这需要实际测试,如果字节顺序不一样,需用ntohl或者ntohs转换字节顺序

上位机软件用VC的MSCOMM完成的,其参数的默认值要改变:RThreshold 为1
InputMode为1,另Setting参数设置波特率的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值