串口通信协议(基于面试),与及树莓派与电脑之间串口通信

一、首先来说一下基于面试的串口通信协议
树莓派wiringPi库详解
(1)串口通信是基于多机的通信
主要就是两根线:RXDTXD
举例,语音识别模块与树莓派之间进行串口通信
语音模块的T连接树莓派上的R,语音模块上的R连接树莓派上的T

(2)串口通信是全双工的
全双工和半双工的区别,举例说明
例:一个男孩跟一个女孩在吵架
全双工:男孩跟女孩可以互怼,不用顾忌
半双工:男孩骂女孩时,女孩闭嘴不能出声,反之,当女孩骂男孩的时候,男孩闭嘴不能出声

两个人吵架要注意的两点就是语言跟语速,语言是两个人都听得懂得才行,语速也是两个人都能接受的才行

那么串口通信也有两大因素:分别是数据格式波特率,数据格式相当于是语言,波特率是相当于是语速 ,数据格式又包括数据位,停止位,奇偶校验位,如下图所示
串口通信协议(基于面试),与及树莓派与电脑之间串口通信_第1张图片
在面试的时候也是这样说就行了,不需要说的太术语化,这样说已经足够了

二、树莓派与电脑之间串口通信
(1)初次在树莓派上进行串口编程时,需要进行简单的配置一下
a.修改cmdline.txt文件

>cd /boot/
>sudo vim cmdline.txt

删除红色部分的内容
dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200
root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes
rootwait

然后sudo reboot重启树莓派

(2)串口通信
使用时需要包含头文件#include
串口通信协议(基于面试),与及树莓派与电脑之间串口通信_第2张图片
串口通信协议(基于面试),与及树莓派与电脑之间串口通信_第3张图片
上面就是串口通信的相关的API,记住在linux底下一切皆文件,所以串口在linux看来也是一个文件,所以serialOpen函数返回的是一个文件描述符,这个文件描述符就是串口的意思

在这里简单说一下串口通信:
串口通信无非就是两根线,即RXDTXD线,如果想看到结果的话需要用一个USB转TTL(即USB转串口)模块连接电脑USB口,并打开串口调试助手波特率跟端口选对后就可以看到输出的东西,在串口调试助手这里也能想主控芯片(我的是树莓派)发送消息,这就实现了串口通信

(3)直接上代码

#include 
#include 
#include 

int main()
{
        int fd;
        int cmd;

        if(wiringPiSetup() == -1)
        {
                printf("fail to set up the wiringPi\n");
                return -1;
        }

        fd = serialOpen("/dev/ttyAMA0",9600);//把串口打开,设置波特率为9600
        if(fd == -1)
        {
                printf("fail to open the serial\n");
                return -1;
        }

        while(1)
        {
                //serialPutchar(fd,'c');
                while(serialDataAvail(fd) != -1)//等待串口缓存中可读取的字节数,-1代表错误
                {
                        cmd = serialGetchar(fd);
                        printf("the cmd is :%d\n",cmd);
                }

                serialPuts(fd,"hello Pi\r\n");
                delayMicroseconds(1000000);
        }

        serialClose(fd);
        return 0;
}

以上就是基于树莓派的与电脑之间的串口通信

学习笔记,仅供参考

你可能感兴趣的:(ARM开发,linux)