串口数据交互(树莓派)

Posted 是光哥呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了串口数据交互(树莓派)相关的知识,希望对你有一定的参考价值。

一、串口配置

树莓派CPU内部有两个串口,一个是硬件串口(官方称为PL011 UART),一个是迷你串口(官方成为mini-uart)。在树莓派2B/B+这些老版树莓派上,官方设计时都是将“硬件串口”分配给GPIO中的UART(GPIO14&GPIO15),因此可以独立调整串口的速率和模式。而树莓派3的设计上,官方在设计时将硬件串口分配给了新增的蓝牙模块上,而将一个没有时钟源,必须由内核提供时钟参考源的“迷你串口”分配给了GPIO的串口,这样以来由于内核的频率本身是变化的,就会导致“迷你串口”的速率不稳定,这样就出现了无法正常使用的情况。
目前解决方法就是,关闭蓝牙对硬件串口的使用,将硬件串口重新恢复给GPIO的串口使用,也就意味着树莓派3的板载蓝牙和串口,只能二选一使用。

下图是树莓派3的接口图:
在这里插入图片描述

1、接线

按照R-T,T-R,USB转TTL模块连接引脚15和引脚16

2、修改文件:

命令行输入

sudo  vi  /boot/cmdline.txt 

删除console=serial0,115200这段程序
在这里插入图片描述

3、重新启动树莓派

sudo reboot

二、相关功能函数:

1、打开并初始串口

int serialOpen (char *device, int baud)

device:串口的地址,在Linux中就是设备所在的目录。

默认一般是"/dev/ttyAMA0",我的是这样的。

baud:波特率

返回:正常返回文件描述符,否则返回-1失败

2、发送一个字符串到串口

void  serialPuts (int fd, char *s)

fd:文件描述符

s:发送的字符串,字符串要以’\\0’结尾

3、获取串口缓存中可用的字节数

int   serialDataAvail (int fd)

fd:文件描述符

返回:串口缓存中已经接收的,可读取的字节数,-1代表错误

4、从串口读取一个字节数据返回

int serialGetchar (int fd)

fd:文件描述符

返回:读取到的字符

三、程序实现

1、发送数据到主机

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

int main()
{
        int fd;
        wiringPiSetup();

        fd=serialOpen("/dev/ttyAMA0",9600);
        while(1){
                serialPuts(fd,"hen shuai\\r\\n");
                delayMicroseconds(1000000);
        }
        return 0;
}

串口助手波特率要与程序相对于,本文为9600
运行效果:串口助手不断收到数据
在这里插入图片描述

2、串口数据通信

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

int main()
{
        int fd;
        int cmd;

        wiringPiSetup();

        fd=serialOpen("/dev/ttyAMA0",9600);
        while(1){
                while(serialDataAvail(fd) != -1){
                        cmd=serialGetchar(fd);
                        printf("get data:cmd=%d\\n",cmd);
                }
        }
        return 0;
}

运行效果:串口助手发送数据,树莓派端可显示出接收到的数据
在这里插入图片描述

以上是关于串口数据交互(树莓派)的主要内容,如果未能解决你的问题,请参考以下文章

串口方式登录树莓派

树莓派串口问题

树莓派python串口收发数据

树莓派 | 串口03 - 使用串口方式远程登陆树莓派终端

树莓派串口通信

树莓派串口通信