6、串口开发

串口设置

将树莓派的硬件串口与mini串口默认映射对换

因为:硬件串口由硬件实现,有单独波特率时钟源,性能高,可靠,而mini串口要依附CPU内核提供时钟。因此我们要用硬件串口,但是树莓派3b的硬件串口默认连接的是蓝牙,所以我们要改一下,把蓝牙映射到mini串口上,而释放硬件串口。

  • 查看相关文件:cd /boot/overlays,找到pi3-miniuart-bt.dtb或pis-miniuart-bt-overlay.dtb,这两个是同一个文件。如果没有的话需要进行下载。
  • READ文件说明了此文件的功能时将树莓派3的蓝牙切换到mini串口(ttyS0),并且恢复硬件串口(ttyAMA0)到GPIO14和15引脚中。
  • 以上就保证了蓝牙串口和硬件串口同时可用。

查看串口映射关系

  • 查看:ls -l /dev
  • 可以看到默认的串口的映射关系serial0 -> ttyS0serial1 -> ttyAMA0

修改串口映射关系

  • sudo vi /boot/config.txt
  • 添加 dtoverlay=pi3-miniuart-bt
  • 重启并查看,就会发现默认的串口映射调换了。
  • serial1 -> ttyS0serial0 -> ttyAMA0

禁用串口的控制台功能

交换串口的映射后树莓派还不能与电脑进行通信,因为树莓派的IO口默认是用来做控制台使用的,而不是通信。
禁用默认设置:

sudo systemctl stop [email protected]sudo systemctl disable [email protected]

修改配置:

  • sudo vi /boot/cmdline.txt
  • 删除 console=serial0,115200,保存重启。

安装minicom调试助手

  • 安装: sudo apt-get install minicom
  • 打开:sudo minicom -D /dev/ttyAMA0 -b115200-D后接串口位置和名称,-b设置波特率,波特率一致才可以进行收发。
  • 进入调试界面后,ctrl + a -> e后进行输入显示切换。
  • 退出 ctrl + a -> q

第一个串口C语言函数

#include 
#include 
#include 
#include 
#include 

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\n", strerror(errno));
        return 1;
    }

    serialPuts(fd, "Usart send Test,Just by launcher!");

    for(;;)
    {
        if(serialDataAvail(fd) > 0)
        {
            putchar(serialGetchar(fd));
        }
    }
    return 0;
}

参考文章1

参考文章2


注意

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

注意原文

  • 使用固定CPU时钟频率 *
    使用固定CPU时钟频率,以便mini UART能以准确的波特率进行通信.
    修改/boot/config.txt,上面的修改变成:
core_freq=250
dtoverlay=pi3-miniuart-bt

修改后重启。此后的UART通信,就可以通过/dev/ttyS0进行。

你可能感兴趣的:(树莓派开发)