背景
树莓派控制信号源,信号源使用的是RS232 串口通讯,因此需要打开树莓派的串口。
一、树莓派串口通讯是什么?
指令:
gpio readall
树莓派串口通讯使用的是树莓派的8、10针(GPIO15、16),一发一收引脚。
官网介绍:GPIO引脚
二、使用步骤
1.树莓派串口知识
树莓派包含两个串口:ttyAMA0、ttyS0 。 ttyAMA0 :硬件串口,由硬件实现,稳定性高,有单独的波特率时钟源,一般与其他硬件的串口通讯使用ttyAMA0 。 ttyS0 :mini串口,时钟源是由CPU内核时钟提供的,因此当CPU使用率高时,其波特率不稳定。 serial0 是GPIO 引脚对应的串口,主串口 serial1 是蓝牙bt 对应的串口,辅助串口
2.查看当前的串口使用及映射关系
ls -l /dev/serial*
当前开放串口只有蓝牙串口serial1,连接的是ttyAMA0
3.释放串口ttyAMA0
官方在树莓派/boot/overlays/README 中明确写到:
Name: disable-bt
Info: Disable onboard Bluetooth on Pi 3B, 3B+, 3A+, 4B and Zero W, restoring UART0/ttyAMA0 over GPIOs 14 & 15.
N.B. To disable the systemd service that initialises the modem so it doesn't use the UART, use 'sudo systemctl disable hciuart'.
Load: dtoverlay=disable-bt
Params: <None>
即,通过使用 dtoverlay=disable-bt 可以禁用 Pi 3B、3B+、3A+、4B和零W上的板载蓝牙,通过 GPIO 14 和 15 恢复 UART0 /ttyAMA0。 同时,要禁用初始化调制解调器的 systemd 服务,使其不使用 UART,请使用
sudo systemctl disable hciuart
现在我们按照操作来逐步进行设置:
第一步:在树莓派/boot/config.txt中最后一行添加
dtoverlay=disable-bt
重启后会发现蓝牙不再开启,但是提示以下内容: 解决方法:设置串口可以进行通信,但是禁止串口的控制台功能。 立即重启
第二步:输入如下指令,关闭服务。
sudo systemctl disable hciuart
此时再重新查看下串口使用及映射关系 对比下最初的串口使用: 可以看出:ttyAMA0已经重新分配给主串口,可以通过引脚进行通讯
3.代码控制串口,验证是否可用
直接使用树莓派自带的python3来编写代码
python3
import serial
ser = serial.Serial('/dev/ttyAMA0',115200)
此时会直接报错:串口ttyAMA0访问被拒绝 此时,修改ttyAMA0 权限
sudo chmod 777 /dev/ttyAMA0
重新打开串口会发现成功。
至此,树莓派串口ttyAMA0的使用结束
三、minicom串口回环测试
1.安装minicom
sudo apt-get install minicom
2.配置minicom
sudo minicom –s
进入到“Serial port setup ”,设置A和F 键盘控制输入A,更改后回车 ,键盘控制输入F,回车 ,再回车 。 保存当前配置为默认配置
退出,选择Exit from Minicom 。
3.回环测试
第一步:用杜邦线连接Pin8(TxD)和Pin10(RxD)引脚。 第二步:运行 sudo minicom 。 可以看到打开的是ttyAMA0 。 第三步:Ctrl+A 按下E 选择回显。 第四步:输入信息hello,显示为hheelllloo YES!至此从软件(python3的Serial )和硬件(minicom串口回显 )都验证了串口ttyAMA0 已经可以正常使用。
4.minicom其他常用指令
Ctrl+A W:当显示的内容超过一行之后自动换行
Ctrl+A C:清屏
Ctrl+A X:退出minicom
补充
PS:本方式适用于禁止使用蓝牙,如果依然需要使用蓝牙通讯,请在/boot/config.txt中使用dtoverlay=miniuart-bt,并按照下列内容进行其他更改;
Name: miniuart-bt
Info: Switch the onboard Bluetooth function on Pi 3B, 3B+, 3A+, 4B and Zero W to use the mini-UART (ttyS0) and restore UART0/ttyAMA0 over GPIOs 14 & 15.
Note that this may reduce the maximum usable baudrate.
N.B. It is also necessary to edit /lib/systemd/system/hciuart.service and replace ttyAMA0 with ttyS0, unless using Raspbian or another distribution with udev rules that create /dev/serial0 and /dev/serial1, in which case use /dev/serial1 instead because it will always be correct. Furthermore, you must also set core_freq and core_freq_min to the same value in config.txt or the miniuart will not work.
Load: dtoverlay=miniuart-bt,<param>=<val>
Params: krnbt Set to "on" to enable autoprobing of Bluetooth driver without need of hciattach/btattach
|