Windows为宿主机,VMware虚拟机中安装了 Linux,也可以在 Linux 下编写程序对串口发送消息。原理同样是利用虚拟串口软件 VSPM 将COM3与COM4连接后通过串口调试器捕获。下面会附上Linux下串口程序的C代码示例。
VSPM的使用和下载参照《串口编程之一:虚拟串口VSPM解决串口编程问题》 http://blog.youkuaiyun.com/zh405123507/article/details/7424877
串口编程的VB代码请参照《串口编程之二:VB发送串口数据》http://blog.youkuaiyun.com/zh405123507/article/details/7424889
以 Ubuntu 命令行模式为例,在 VMware 下配置虚拟机的硬件。选择添加串口硬件,并选择使用本机的物理串口。根据给出的串口列表进行选择吧。(好像就只有COM3可选)
打开VSPM文件夹下的“虚拟串口互联插件”目录,将 vspm.ini 拷贝到VSPM主目录并覆盖原来的配置文件,目的是使 VSPM 在下次启动时将 COM3 和 COM4 相连,这样在Windows下就可以利用程序捕获 COM4 的输出,也就是虚拟机 Linux 中 COM3 的输入。
如果你给虚拟机分配的串口不是COM3也没关系。vspm.ini 文件的最后四行如下:
COM3=127.0.0.1:7102;127.0.0.1:7101;Active;UDP_BC
COM4=127.0.0.1:7101;127.0.0.1:7102;Active;UDP_BC
COM5=127.0.0.1:7202;127.0.0.1:7201;Active;UDP_BC
COM6=127.0.0.1:7201;127.0.0.1:7202;Active;UDP_BC
这四个端口是两两相连的(第一行和第二行相连,第三行和第四行相连)。所以可以将COM后面的数字进行修改已达到你需要的效果。
如果设置好 VMware 和 VSPM 后就可以启动虚拟机开始测试啦。现在分别启动VMware下的Linux和Windows下的串口调试器。
现在,在Ubuntu 输入命令(或其他Linux控制台,命令是通用的)
echo hello > /dev/ttyS0
如果串口调试器的接收窗口有显示“hello”说明链接成功,可以编写程序来对VMware Linux的虚拟串口进行调试了。
下面是一个简单的Linux C串口程序:
#include <termios.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/signal.h>
#define FALSE 0
#define TRUE 1
int main()
{
volatile int STOP=FALSE;
volatile int fd;
/*类似读写文件的方式打开串口*/
fd = open( "/dev/ttyS1", O_RDWR);
if (-1 == fd){
perror(" 提示错误!");
}
/*设置串口参数*/
struct termios Opt;
tcgetattr(fd, &Opt);
cfsetispeed(&Opt,B19200); //接收波特率
cfsetospeed(&Opt,B19200); //发送波特率
tcsetattr(fd,1,&Opt);
Opt.c_cflag &= ~PARENB;
Opt.c_cflag &= ~CSTOPB;
Opt.c_cflag &= ~CSIZE;
Opt.c_cflag |= ~CS8;
/*开始向fd送数据*/
int c='0';
printf("send data\n");
while (STOP==FALSE) /* modem input handler */
{
c++;
c %= 255;
write(fd,&c,1); /* stdout */
usleep(100000);
}
return 0;
}
/*需要另外编写函数捕获键盘输入使STOP == FALSE,发送停止*/
编译后,程序输出如下:
===================================
本文来自:http://blog.youkuaiyun.com/zh405123507
tags:串口 串口编程 VMware Linux 管道