一、串口简述
串口,也称串行通信接口(通常指COM接口),通常用于多机通信,通常使用的是全双工。是采用串行通信方式的扩展接口。
数据传送
串行接口 (Serial Interface)是指数据一位一位地顺序传送。
特点
是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。
二、串口、COM口、TTL、RS-232、RS-485区别
1、串口、COM口是指的物理接口形式(硬件)。而TTL、RS-232、RS-485是指的电平标准(电信号)。TTL标准是低电平为0,高电平为1(+5V电平)。RS-232标准是正电平为0,负电平为1(±15V电平)。
2、接设备的时候,一般只接GND RX TX。不会接Vcc或者+3.3v的电源线,避免与目标设备上的供电冲突。
3、PL2303、CP2102、CH340芯片是 USB 转 TTL串口 的芯片,用USB来扩展串口(TTL电平)。
4、MAX232芯片是TTL电平与RS232电平的专用双向转换芯片,可以TTL转RS-232,也可以RS-232转TTL。
5、RS-485与RS-232类似,但是采用差分信号负逻辑。这里略过不讲。
三、全双工、半双工的区别
1、全双工传输(英文Full - Duplex )
是指交换机在发送数据的同时也能够接收数据,两者同步进行,这好像我们平时打电话一样,说话的同时也能够听到对方的声音。全双工的好处在于迟延小,速度快。
2、半双工(英文Half Duplex)
与全双工对应的是这个概念,就是指一个时间段内只有一个动作发生。类似对讲机,同一时间只能一个人说话。
四、树莓派与PC串口通信编程(全双工)
树莓派串口通信API,可参考树莓派wiringPi库详解
实物连接(RXD、TXD要相互反接)
使用时需要包含头文件:
#include <wiringSerial.h>
初次使用树莓派串口编程,需要配置。
第一步:修改 cmdline.txt文件
/* 修改 cmdline.txt文件 */
>cd /boot/
>sudo vim cmdline.txt
删除【】之间的部分
dwc_otg.lpm_enable=0 【console=ttyAMA0,115200】 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
第二步:修改 inittab文件(若没有inittab文件,则第二步可以跳过):
/*修改 inittab文件 */
>cd /etc/
>sudo vim inittab
注释掉最后一行内容:,在前面加上 # 号
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
第三步:
sudo reboot 重启
实验程序
#include<wiringSerial.h>
#include<wiringPi.h>
#include<stdio.h>
#include<string.h>
int main(){
int fd;
int data;
wiringPiSetup();
fd=serialOpen("/dev/ttyAMA0",9600);
while(serialDataAvail(fd) != -1){
data=serialGetchar(fd);
if(data!=-1){
printf("get data=%c\n",data);
if(data == '1'){
printf("aipolo\n");
serialPuts(fd,"rec aipolo\r\n");
}
else if(data == '2'){
printf("abllll\n");
serialPuts(fd,"rec abllll\r\n");
}
}else{
serialPuts(fd,"please input:\r\n");
printf("no find input\n");
}
}
return 0;
}