树莓派串口通信

串口通信概况

常用于多机通信

模块化编程

半双工通信:只能单方发消息

全双工通信:两方都能发信息
串口通信是全双工

一个是整个服务需求处理器,一个是挂载的交互信息的载体设备

都有独立的代码,独立的硬件

通信要求

1、两个通信之间需要有共同的,相互能识别的语言

2、要有一样的传输速度

串口通信的两点要求是:

  • 数据格式
    • 数据位
    • 停止位
    • 奇偶校验位
  • 波特率

串口通信代码

每隔一秒发一个字符

#include<stdio.h>
#include<wiringSerial.h>
#include<wiringPi.h>

int main()
{
        int fd;
        wiringPiSetup();  //初始化硬件设备
        fd = serialOpen("/dev/ttyAMA0",9600);  //打开串口,定义波特率为9600
        while(1){
                serialPutchar(fd,'c');  //发送单个字符
                delayMicroseconds(1000000);   //1秒的等待时间
        }
		serialClose(fd);
        return 0;
}

每隔一秒发一个字符串
不能发中文

#include<stdio.h>
#include<wiringSerial.h>
#include<wiringPi.h>

int main()
{
        int fd;
        wiringPiSetup();  //初始化硬件设备
        fd = serialOpen("/dev/ttyAMA0",9600);  //打开串口,定义波特率为9600
        while(1){
                serialPuts(fd,"yangyingchun is king!\r\n");  //发送字符串

                delayMicroseconds(1000000);   //1秒的等待时间
        }
		serialClose(fd);
        return 0;
}

接收串口发来的数据,并打印

#include<stdio.h>
#include<wiringSerial.h>
#include<wiringPi.h>

int main()
{
        int fd;
        int cmd;
        wiringPiSetup();  //初始化硬件设备
        fd = serialOpen("/dev/ttyAMA0",9600);  //打开串口,定义波特率为9600
        while(1){
                while(serialDataAvail(fd) != -1){
                        cmd = serialGetchar(fd); //接收串口发来的字符
                        printf("get data cmd= %d\n", cmd);
                }
        }
		serialClose(fd);
        return 0;
}

判断收到的字符,返回预设的对应信息

#include<stdio.h>
#include<stdlib.h>
#include<wiringSerial.h>
#include<wiringPi.h>

int main()
{
        int fd;
        int cmd;
        wiringPiSetup();  //初始化硬件设备
        fd = serialOpen("/dev/ttyAMA0",9600);  //打开串口,定义波特率为9600
        while(1){
                while(serialDataAvail(fd) != -1){
                        cmd = serialGetchar(fd);
                        if(cmd == '1'){
                                serialPuts(fd,"yangyingchun is king_one!\r\n");
                                printf("get data cmd= %c\n", cmd);
                        }
                        if(cmd == '2'){
                                serialPuts(fd,"yangyingchun is king_two!\r\n");
                                printf("get data cmd= %c\n", cmd);
                        }
                        if(cmd == '3'){
                                serialPuts(fd,"yangyingchun is king_three!\r\n");
                                printf("get data cmd= %c\n", cmd);
                        }
                        if(cmd == '4'){
                                serialPuts(fd,"king quit!\r\n");
                                printf("quit\n");
                                serialClose(fd);
                                exit(-1);
                        }
                }
        }
        serialClose(fd);

        return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值