Liunx树莓派(ARM)开发篇—1、全双工与半双工、串口、COM口、TTL、RS-232、RS-485区别;2、全双工、半双工的区别3、树莓派和电脑之间串口通信编程实例(附代码)

一、串口简述

串口,也称串行通信接口(通常指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;
}

实验结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44933419/article/details/113808919