树莓派——串口通信

  • Post author:
  • Post category:其他



工作方式:

UART异步全双工通信


目的:

通过串口实现

多机通信




:树莓派使用串口通信前需要进行一些配置

sudo vi /home/boot/cmdline.txt

需要将里面用于串口登录的

console=serial0,115200

删除

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=cd48578f-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh splash plymouth.ignore-serial-consoles

然后sudo reboot

Tips:删除之后就无法通过串口登录树莓派,若需要串口登录再添加进去就ok了


接线

:列如使用USB转TTL让电脑和树莓派进行通信,树莓派的TXD则接转换模块的RXD,RXD接TXD

交叉连接

。同时需要把GND也接上,因为两个平台的电压可能不同,导致数据传输发生错误,

接上GND可以稳个压

在这里插入图片描述

在树莓派中有封装好的wiringPi库,可以使用库函数进行通信

#include <wiringSerial.h>

int serialOpen(char *device, int baud);   // 打开并初始化串口

返回值:调用成功返回文件描述符,失败返回 -1
device :串口的地址,在 Linux 中就是设备所在的目录,默认一般是 "/dev/ttyAMA0"
baud:波特率

void serialClose(int fd);   // 关闭 fd 关联串口

void  serialPutchar(int fd, unsigned char c);   // 向串口发送一个字节的数据

void  serialPuts(int fd, char *s);   // 发送一个字符串到串口

void  serialPrintf(int fd, char *message, …)   // 向串口发送数据,用法类似 C语言中的 printf()

int   serialDataAvail(int fd);   // 获取串口缓冲区可用的字节数,错误返回 -1

int serialGetchar(int fd);   /* 从串口读取一个字节数据并返回,如果串口缓冲区中没有可用的数据,则会等待大概10 秒,若 10 秒后仍
无数据,则返回-1,所以读取前最好调用 serialDataAvail() 判断,读取多个字符则采用地址偏移的方式读取 */

void serialFlush(int fd);   // 清空串口缓冲区

#include <unistd.h>

ssize_t read(int fd, void *buf, size_t count);   // Linux 下的标准 IO库 函数
ssize_t write(int fd, const void *buf, size_t count);   // Linux 下的标准 IO库 函数


!注

:在使用read函数对串口进行读取数据之前,最好先使用serialFlush函数对串口缓冲区进行刷新,不然可能会一直读不到数据。。。。。。(反正我在使用中出现过这种情况)


last:



1,一位大佬的wiring P i库详解



2,串口通信详解



版权声明:本文为m0_53267045原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。