当前位置:   article > 正文

树莓派与串口通信_树莓派串口通信

树莓派串口通信

树莓派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:

  1. #include <stdio.h>
  2. #include <wiringPi.h>
  3. #include <wiringSerial.h>
  4. #include <stdlib.h>
  5. #include <sys/time.h>
  6. #include <string.h>
  7. #include <unistd.h>
  8. int main()
  9. {
  10. int fd;
  11. int nread;
  12. char buf[128]={'\0'};
  13. char *str="hello";
  14. if(wiringPiSetup()==-1){
  15. printf("wiringPi init failed\n");
  16. exit(-1);
  17. }
  18. fd=serialOpen("/dev/ttyAMA0",9600);
  19. if(fd==-1){
  20. printf("open failde\n");
  21. }
  22. while(1){
  23. serialPrintf(fd,str);
  24. nread=serialDataAvail(fd);
  25. if(nread>0){
  26. read(fd,buf,nread);
  27. printf("read from uart:%s\n",buf);
  28. }
  29. memset(buf,'\0',128);
  30. delay(1000);
  31. }
  32. return 0;
  33. }

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

运行结果:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/689141
推荐阅读
相关标签
  

闽ICP备14008679号