串口数据交互(树莓派)

一、串口配置

树莓派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;
}

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

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是光哥呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值