目录

一、串口通信协议

1、先了解下全双工和半双工的区别

2、串口通信关注点

二、树莓派和电脑之间串口通信编程

1、初次使用树莓派串口编程,需要配置

2、串口通信相关的API

(1)serialOpen——打开并初始串口

(2)serialPutchar——发送一个字节的数据到串口

(3)serialPuts——发送一个字符串到串口

(4)serialGetchar——读取串口数据

(5)serialDataAvail——判断读取的串口是否有数据

(6)serialClose——关闭fd关联的串口

测试代码1:发送一个字符串到串口

测试代码2:读取串口数据


一、串口通信协议

1、先了解下全双工和半双工的区别

全双工好比两个人可以互相讲话

半双工好比两个人讲话时只能是一个人讲话,一个人听着

串口通信方式是全双工的

2、串口通信关注点

(1)数据格式(好比语言),包括数据位、停止位、奇偶校验位

(2)波特率(好比语速),比如常用的波特率:115200

二、树莓派和电脑之间串口通信编程

首先串口在Linux底下也是文件

1、初次使用树莓派串口编程,需要配置

(1)修改cmdline.text文件

sudo vi /boot/cmdline.txt

(2) 删除【】之间的部分:【console=ttyAMA0,115200】这部分删除

dwc_otg.lpm_enable=0 【console=ttyAMA0,115200】 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

(3)重启树莓派

sudo reboot 

2、串口通信相关的API

使用时需要包含头文件:#include <wiringSerial.h>

(1)serialOpen——打开并初始串口

int serialOpen (char *device, int baud)device:  串口的地址,默认是"/dev/ttyAMA0"
baud:    波特率,比如9600,或者115200
返回:    正常返回文件描述符,否则返回-1失败。

(2)serialPutchar——发送一个字节的数据到串口

void  serialPutchar (int fd, unsigned char c)fd:      文件描述符
c:       要发送的数据

(3)serialPuts——发送一个字符串到串口

void  serialPuts (int fd, char *s)fd:     文件描述符
s:      发送的字符串,字符串要以'\0'结尾

(4)serialGetchar——读取串口数据

int serialGetchar (int fd)fd:     文件描述符
返回:   读取到的字符
如果串口缓存中没有可用的数据,则会等待10秒,如果10后还有没,返回-1,
所以,在读取前,做好通过serialDataAvail判断下

(5)serialDataAvail——判断读取的串口是否有数据

int   serialDataAvail (int fd)fd:       文件描述符
返回:     判断读取的串口是否有数据,有数据返回读取的字节数,无数据,返回-1

(6)serialClose——关闭fd关联的串口

void serialClose (int fd)fd:文件描述符

测试代码1:发送一个字符串到串口 

#include <stdio.h>
#include <wiringSerial.h>
#include <wiringPi.h> int main(){int fd;wiringPiSetup();//初始化 fd = serialOpen("dev/ttyAMAO",9600);         //打开并初始化串口while(1){     //serialPutchar(fd,'c');                 //发送一个字节数据到串口serialPuts(fd,"china very good \r\n");   //发送一个字符串到串口delayMicroseconds(1000000);              //每隔1秒发送一次}serialClose(fd);                             //关闭串口return 0;
}

测试代码2:读取串口数据

#include <stdio.h>
#include <wiringSerial.h>
#include <wiringPi.h> int main(){int fd;int cmd;wiringPiSetup();//初始化fd = serialOpen("dev/ttyAMAO",9600);             //打开并初始化串口while(1){while(serialDataAvail(fd) != -1){           //判断读取的串口是否有数据       cmd = serialGetchar(fd);                //读取串口数据printf("get data: cmd=%d\n",cmd);if(cmd == '2'){serialPuts(fd,"my name is Bob 2\r\n");}if(cmd == '3'){serialPuts(fd,"my name is Bob 3\r\n");}if(cmd == '4'){serialPuts(fd,"my name is Bob 4\r\n");}}}serialClose(fd);                                //关闭串口return 0;
}

树莓派和电脑之间串口通信编程相关推荐

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

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

  2. 21 树莓派和电脑之间串口通讯编程

    linux特性:一切皆文件(设备虽然是硬件,但在Linux当中它还是以文件形式存在) 在cd/dev目录下ls 初次使用树莓派串口编程,需要配置. 参考:树莓派wiringPi库详解 - lulipr ...

  3. 树莓派外设开发基础—串口通信

    文章目录 一.串口通信的一些概念 二.树莓派串口通信设置 三.树莓派串口通信API 四.树莓派与PC通信 1.接线 2.程序与测试 拓展 一.串口通信的一些概念 串口通信通常用在多机通信中. 串口通信 ...

  4. 树莓派与电脑之间的串口通信编程

    树莓派与电脑之间的串口通信编程 数据通信的三个方式介绍 单工通信 半双工通信 全双工通信 串口通信 编程步骤 数据通信的三个方式介绍 单工通信 只支持数据在一个方向上传输,又称为单向通信.如无线电广播 ...

  5. VC串口通信编程-2

    VC串口通信编程 (2009-07-08 13:48:40) 转载▼ Win32串口编程(转:韩耀旭) 在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信 ...

  6. Visual C++串口通信编程---多线程异步方式

    Visual C++串口通信编程---多线程异步方式 1. 串口通信基础 提到串口让人想起并口,它们是计算机中两个比较重要的通信方式. 串口:也叫COM口,把字节的二进制位按位列队进行传输,每个字节占 ...

  7. MFC 串口通信编程

    本篇文章主要介绍了"RS-232/RS-485/RS-422 接口简介与编程",主要涉及到RS-232/RS-485/RS-422 接口简介与编程方面的内容,对于RS-232/RS ...

  8. 【转载】MFC实现串口通信编程nbsp;-nbsp;yu…

    MFC实现串口通信编程 vc++.c#专题     2009-10-08 22:32 在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题.计算机和单片机(如MCS-51)都具 ...

  9. (串口通信编程) 开源串口调试助手Common (Com Monitor)

    原文地址为: (串口通信编程) 开源串口调试助手Common (Com Monitor) 最新的文档见这里:http://blog.twofei.com/566/ 我写的串口调试助手程序以及源代码. ...

最新文章

  1. cors在服务器还是接口_cors
  2. 未来哲学的六个问题域
  3. 线程间通信共享变量和queue
  4. 图像金字塔(pyramid)与 SIFT 图像特征提取(feature extractor)
  5. 在Windows Server 2008 R2下搭建jsp环境(四)-在测试的过程中可能出现的问题
  6. HDU 4787 GRE Words Revenge
  7. K-means算法在手写体数字图像数据上的使用示例-代码详解
  8. GM6 frontend Shell._resolveHashFragment when tile is clicked
  9. 2个字符串相等 swift_Swift快速入门(一)之 Swift基础语法
  10. 类创建几种java_Java创建对象的几种方式
  11. html语言arc属性,为要素图层设置 HTML 弹出窗口属性
  12. stl_algorithm算法之排序算法
  13. MFC 鼠标光标资源 及 更换
  14. php 银行卡二三四要素验证接口
  15. 如何选择和更换阿里云服务器操作系统?
  16. 解析2019年新零售社区团购发展方向
  17. Technica Engineering Enhanced Ethernet Switch, 车载以太网交换机功能介绍(100/1000BASE-T1 Switch, AVB/TSN)
  18. 如何控制舵机的速度?
  19. Java并发 - 线程的生命周期
  20. Day 2: On Your Choices

热门文章

  1. 怎么抠图最简单 教你一行Python代码去除照片背景
  2. PHP Task Exec 2
  3. QT 获得并刷新当前时间
  4. 计算机毕业设计之java+ssm医院资产管理系统
  5. html鼠标样式怎么去掉,CSS鼠标样式cursor属性怎么设置
  6. 【智能物流】基于客户定制的电子商务一体化自动物流系统建设
  7. 总结在线营销的几种方式
  8. 安全狗:zabbix多版本注入漏洞分析
  9. `echarts`实现关系图拖拽
  10. 【嵌入式系统开发11】串口通讯“小试牛刀”——完成一个STM32的USART串口通讯程序