Linux和Windows平台的单片机串口通讯

1/Windows

我们首先用串口调试助手进行串口通讯,再使用c语言编程进行通讯。
windows上的串口调试助手我使用的是安信可串口调试助手
http://wiki.ai-thinker.com/tools
在单片机中写好串口通讯的代码,在串口调试助手中对应设置好串口号、波特率等参数,串口在win10下可以通过win+x—设备管理器—端口来查看。当然,最简单的方法是插拔串口,串口调试助手中多出来的那个串口便是单片机的串口号。

stc单片机代码(stc89c52):

#include <reg52.h>
#include <stdio.h>

extern void uart_init(void);

uint16_t a,flag;

int main(void)
{
	    uart_init();
		while(1)
		{
				if(flag)
				{
					  if(a == 67)
						{
							  P1 = ~P1;//led
						}
						ES = 0;
						SBUF = a;
						while(!TI);
						TI = 0;
						ES = 1;
						flag = 0;
				}
		}
}

void uart_init(void)
{
		TMOD = 0x20;    
		TH1 = 0xfd;     
		TL1 = 0xfd;     
		TR1 = 1;             
		SM0 = 0;      
		SM1 = 1;  
        REN = 1; 	
		EA = 1;         					
		ES = 1;        
}

void ser() interrupt 4
{
      RI = 0;
	  a = SBUF;
	  flag = 1;
}

成功后,下一步我们就要用代码进行串口通讯了。这里我是在欧阳伟的串口通讯API上进行了修改。
https://github.com/ayowin/WzSerialPort
首先我将send函数的形参buf由const void*改为void *,用来发送变量。
int WzSerialPort::send(void* buf, int len)
接下来我又封装了一个自己的马达控制函数。

void motor_control(int ID, int val)
{
	char A[6] = { '0',' ','0','0','0',' ' };
	//最后必须有空格,单片机才会认为输入结束。
	WzSerialPort w;

	A[0] = ID + 48;
	A[2] = val / 100 + 48;
	A[3] = (val / 10) % 10 + 48;
	A[4] = val % 10 + 48;

	if (w.open("COM7", 9600, 0, 8, 1))
	{
		w.send(A, 6);//从A[0]开始,往后读6字节数据
		printf("send finished...\n");
	}
	else
	{
		printf("open serial port failed...\n");
	}
}
2/Linux

和在windows上一样,我们也是先跑通串口调试助手,然后再使用代码。
linux上我使用的串口调试助手叫cutecom(图形化界面),直接使用命令sudo apt-get install cutecom就可以在ubuntu上安装(支持arm版本,树莓派上也可以使用)。
其余的步骤都和windows上的一样,欧阳伟同样也提供了Linux上的串口通讯API!感谢开源!
值得一提的是,linux上的串口号是/dev开头的,和windows上的COM不一样,注意一下就可以,在程序中要做好相应的修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值