树莓派Raspberry Pi 3b中串口设置成外接控制器

总结了一下RPi3中串口的状态和设置方法。分享一下。

RaspberryPi 3b调试笔记为格式化文字,更可读。
前面部分是讲解,不想看的直接跳到最后两节照着做就行。

1. 串口
1.1. Rpi3中串口的用途
在RPi3中,有两个串口:
从RPi2继承过来的高性能串口是ttyAMA0,在RPi3中默认分配给蓝牙模块;

另一个是外接的低性能串口,ttyS0,默认情况下,ttyS0给Linux调用,用来串口登录设备。

两个串口的用途、名称及映射关系总结如下:
/dev/ttyAMA0 -> Bluetooth
/dev/ttyS0 -> GPIO serial port 

基于以上,两个串口在默认情况下都不能用于设备控制。

1.2. Rpi3中串口的初始状态
ttyAMA0是分配给蓝牙模块使用的,也是默认开启的。如果想让蓝牙正常工作,这个串口不要动,使用ttyS0来进行设备控制就可以。如果不使用蓝牙模块,想使用高性能串口进行设备控制,也有办法,放在最后。
ttyS0的开启/关闭状态,可以通过
sudo raspi-config ->Advanced Options ->Serial
来设置,对应的配置文件内容是:
cat /boot/config.txt | grep uart
enable_uart=1
图形和命令两种方式是等效的。如果想使用ttyS0进行设备控制,必须先开启它。重启系统生效。 

1.3. 设置ttyS0
默认ttyS0是分配给Linux做console的。要改为设备控制,就要先改掉原来的用途。
Linux Console是通过getty进程与ttyS0关联的,所以先停掉getyy,解除系统占用:
sudo systemctl stop getty@...service
sudo systemctl disable getty@...service
再把内容定位关掉:
sudo vi /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
其中的console=serial0,115200,就是内容定位,删掉剩下:
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
重启之后,ttyS0就被彻底释放了。此时可以通过python或串口调试工具对ttyS0进行测试。
1.1节中介绍了在RPi3中,ttyS0有个alias name叫serial0,所以在代码中,一律使用serial0更好。

1.4. 总结一下
想用ttyS0做设备控制,只需如下三步:
开启ttyS0:raspi-config或config.txt中enable_uart=1均可;
释放ttyS0:停掉getty服务systemctl disable getty@...service,然后从/boot/cmdline.txt中删掉console=serial0,115200;
代码中统一使用名称为serial0。

1.5. 串口调换
如果想用高性能串口做设备控制,把低性能串口留给蓝牙或干脆不用,可以这样做:
sudo vi /boot/config.txt
增加一行:
dtoverlay=pi3-disable-bt
重启生效。此时:

与1.1节中命名已经对调,在代码中使用serial0则为高性能串口ttyAMA0。

注意将串口改作他用,首先要先从系统中把串口释放出来,例如停掉蓝牙、getty。

 

永不止步步 发表于11-05 14:09 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:308117个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号