zoukankan      html  css  js  c++  java
  • 树莓派3 B+ 的串口(USART)使用问题

    转载:http://ukonline2000.com/?p=880

    最新64位树莓派3已经发布快两周了,玩家们陆陆续续也开始使用上树莓派3了,随着玩家的增多,虽然拥有强大硬件配置的树莓派3也出现了各种各样的BUG,官方也在对这些BUG进行修复中。今天要说说树莓派3的UART串口的使用问题,该串口问题的官方反馈及回复请参考这两篇官方博文“https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=137932”和“https://www.raspberrypi.org/forums/viewtopic.php?f=107&t=138223

    根据官方的反馈和回复,我们了解到树莓派3上用户目前无法正常是使用GPIO中的UART串口(GPIO14&GPIO15),也就是说用户无论是想用串口来调试树莓派,还是想用GPIO中的串口来连接GPS,蓝牙,XBEE等等串口外设目前都是有问题的。

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

    目前解决方法就是,关闭蓝牙对硬件串口的使用,将硬件串口重新恢复给GPIO的串口使用,也就意味着树莓派3的板载蓝牙和串口,现在成了鱼和熊掌,两者无法兼得。

    下面我就讲讲如何恢复硬件串口的方法

    1.下载pi3-miniuart-bt-overlay文件,解压出pi3-miniuart-bt-overlay.dtb文件,并将dtb文件拷贝到/boot/overlays/目录下

    2.编辑/boot目录下的config.txt文件

    sudo nano /boot/config.txt

        添加下面两行:

    dtoverlay=pi3-miniuart-bt-overlay
    force_turbo=1

    3.编辑/boot目录下的cmdline.txt文件

    sudo nano /boot/cmdline.txt

    修改为如下内容:

    dwc_otg.lpm_enable=0 console=serial1,115200  console=tty1 root=/dev/mmcblk0p2  kgdboc=serial1,115200 rootfstype=ext4 elevator=deadline fsck.repair=yes  rootwait

    保存退出

     关闭板载蓝牙的方法:

    1.SSH登录树莓派3后,输入下面命令关闭hciuart使用uart0.

    sudo systemctl disable hciuart

    2.编辑/lib/systemd/system/hciuart.server 将 “ttyAMA0”修改为“ttyS0”

    sudo nano /lib/systemd/system/hciuart.service

    将 “ttyAMA0”修改为“ttyS0”

    保存退出(注:这里的我修改完之后,有自动的被修改回来成了dev-serial1.device,应该是系统自己修改的,我们修改完不需要动他就行了)

    3.更新并重启

    sudo apt-get update
    sudo apt-get upgrade
    sudo reboot

    上面就完成了硬件方面的设置,现在开始在树莓派中编写串口的程序:

    #include <wiringSerial.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <errno.h>
    
    int main(int argc, int *argv[]) //int serialOpen (const char *device, const int baud)
    {
        int fd;
        if((fd = serialOpen("/dev/ttyAMA0", 115200)) < 0)
        {
            fprintf(stderr,"Unable to open serial device: %s
    ", strerror(errno));
            return 1;
        }
    
        serialPuts(fd, "Usart send Test,Just by launcher!");
    
        for(;;)
        {
            if(serialDataAvail(fd) > 0)
            {
                putchar(serialGetchar(fd));
            }
        }
        return 0;
    }

    编写makefile:

    main.o:main.c
        gcc main.c -o main.o -l wiringPi

    最终的到的文件如下图所示:

    安装CH340串口驱动程序(下载链接:http://download.csdn.net/download/u012654756/7731601),连接好CH340模块和树莓派的串行接口GPIO14&GPIO15:

      

                     串口安装驱动结果USB-SERIAL CH340(COM4)                                         硬件连接图GPIO14 & GPIO15

               

    打开串口调试助手:

      

    运行树莓派上的程序:

    sudo ./main.o

    结果如下:

    附加:关于Raspberry Zero W的相关配置可以参考这篇文章:https://blog.csdn.net/RambleMY/article/details/81206090

    这里亲自测试过可以使用,转载再次,方便自己查阅:

    S1.修改cmdline.txt文件

    sudo nano /boot/cmdline.txt

    原来文件中的内容是:

    dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=a05c3c8f-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

    去掉其中所有何console相关的内容,结果如下:

    dwc_otg.lpm_enable=0 root=PARTUUID=a05c3c8f-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

    S2.关闭板载蓝牙

    sudo systemctl disable hciuart

    编辑config.txt文件

    sudo nano /boot/config.txt

    添加如下的内容:

    dtoverlay=pi3-disable-bt

    重启树莓派

    sudo shutdown -r now

    S3.禁用串口的控制台功能

    编辑config.txt文件,增加如下一行:

    enable_uart=1

    测试并运行.

  • 相关阅读:
    Path Sum II
    Convert Sorted Array to Binary Search Tree
    Construct Binary Tree from Inorder and Postorder Traversal
    Construct Binary Tree from Preorder and Inorder Traversal
    Maximum Depth of Binary Tree
    Binary Tree Zigzag Level Order Traversal
    Binary Tree Level Order Traversal
    Same Tree
    Validate Binary Search Tree
    Binary Tree Inorder Traversal
  • 原文地址:https://www.cnblogs.com/uestc-mm/p/7204429.html
Copyright © 2011-2022 走看看