赞
踩
树莓派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库中有关串口通信的函数,读和写也可以创建子进程分开去做。
运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。