树莓派与串口通信

树莓派3B+

树莓派3B+内置了一个称之为硬件串口(/dev/ttyAMA0),一个称之为mini串口(/dev/ttyS0)。在树莓派3代中,由于板载蓝牙模块,硬件串口被默认分配给与蓝牙模块通信了,而把那个mini串口默认分配给了排针引出的GPIO(14,15)。
树莓派的串口默认为串口终端调试使用,如要正常使用串口则需要修改树莓派设置。关闭串口终端调试功能后则不能再通过串口登陆访问树莓派,只能通过ssh或者远程桌面连接树莓派后进行控制。
默认值

 serial0是GPIO引脚对应的串口,serial1是蓝牙对应的串口。serial0(GPIO串口)默认使用的是ttyS0(mini串口),serial1(蓝牙)使用的是ttyAMA0(硬件串口)。

通过命令行来关闭串口访问,让串口只用来通信:

sudo nano /boot/cmdline.txt

删除console=serial0,115200,也就是关闭console,其余保持不变.

然后重启~sudo reboot
重启之后查看映射:

可以发现,GPIO连接了ttyAMA0硬件串口,蓝牙连接了ttys0 mini串口。

硬件连接

usb-ttl与树莓派连接,利用串口模拟软件实现树莓派与串口的通信。

测试demo:

#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdlib.h>
#include <sys/time.h>
#include <string.h>
#include <unistd.h>
int main()
{
        int fd;
        int nread;
        char buf[128]={'\0'};
        char *str="hello";
        if(wiringPiSetup()==-1){
                printf("wiringPi init failed\n");
                exit(-1);
        }
        fd=serialOpen("/dev/ttyAMA0",9600);
        if(fd==-1){
                printf("open failde\n");
        }
        while(1){
                serialPrintf(fd,str);
                nread=serialDataAvail(fd);
                if(nread>0){
                        read(fd,buf,nread);
                        printf("read from uart:%s\n",buf);
                }
                memset(buf,'\0',128);
                delay(1000);
        }
        return 0;
}

用到的函数都是wiringPi库中有关串口通信的函数,读和写也可以创建子进程分开去做。

运行结果:

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值