赞
踩
看了很多的帖子,各种方法也都有,这里我按照自己的需求(使用Python程序来发送和接收电脑串口助手发送的数据)来配置USART。
这一步我参考了相当多大佬的文章和各种博客,可以说各种方法都用尽了。在快要绝望的时候,看到了这一篇文章(树莓派3B+ 串口使用大全(实现串口通信功能)_Stay Hungry Stay Foolish-CSDN博客_树莓派3b+串口),让我豁然开朗。下面我就我的理解进行解释。
首先,需要知道树莓派中包含两个串口(ttyS0和ttyAMA0),前者由Soc内部提供时钟信号,不是很稳定,后者由外部晶振提供信号,稳定。树莓派默认只开启一个串口,即ttyAMA0,用于给蓝牙模块通信使用,而GPIO所用的串口并没有开启。
所以第一步应该是开启ttyS0,树莓派会将这个串口映射给GPIO使用。为了提高GPIO的稳定性,我们需要改变映射关系,使ttyAMA0映射给GPIO。
映射关系调节完毕之后,树莓派串口默认用于登录,就好像SSH远程登录一样。如果想让树莓派和其他设备通信,需要禁用控制台功能。
经过这样几步之后,才算完成了GPIO中USART的配置。下面介绍详细步骤。
首先键入:
sudo raspi-config
进入设置界面,选择Interfacing Options,之后选P6 Serial,会出现弹窗问题,第一个问题是:would you like a login shell to be accessible over serial?,选择NO;第二个问题是:would you like the serial port hardware to be enabled?,选择 YES(一定注意看清楚问题,不同版本顺序可能不一样)。设置完毕之后两个串口都开启,键入:
ls -l /dev/serial*
来查看映射关系:
serial0对应GPIO串口,serial1则对应蓝牙。这里应该是和我的相反,下面才开始改变映射关系。
首先备份一下将要修改的文件:
sudo cp /boot/config.txt /boot/config.txt.back
接下来用nano编辑器修改文件:
sudo nano /boot/config.txt
在文件的最后一行,加入:
dtoverlay=pi3-miniuart-bt
之后保存退出后重启一下树莓派:
sudo reboot
再次查看映射关系,就可以看到和上面图片一样的情况了。
这一步非常关键,否则串口一直会收到树莓派的登录请求。键入下面内容:
- sudo systemctl stop serial-getty@ttyAMA0.service
- sudo systemctl disable serial-getty@ttyAMA0.service
然后修改另一个配置文件(第一句是备份,第二句是用nano编辑器打开配置文件)
- sudo cp /boot/cmdline.txt /boot/cmdline.txt.back
- sudo nano /boot/cmdline.txt
打开文件后,删除其中的下面语句,其余部分不管。
console=serial0,115200
下面重启树莓派就可以了。
需要在树莓派上用apt装一个测试助手,参看这个大佬的文章(Minicom使用介绍_常驻-CSDN博客_minicom)。
进入配置页面之后,配置串口名字为:ttyAMA0,两个选项都选择NO,之后EXIT即可。然后按Ctrl+A,松开后再按Z键,选择E(开启回显模式)。
此时将树莓派GPIO口的TX和RX线短接,键入任意一个字母之后,都会出现两个,说明串口测试通过。
这里再一次借鉴另一位大佬的代码(最简单的树莓派+python3+串口通信的教程以及出现的问题的解决方式_朱少强的博客-CSDN博客_树莓派串口通信python)针对我自己的情况,做了对应的调整:
- # -*- coding:utf-8 -*-
- import serial
- import time
-
- ser = serial.Serial("/dev/ttyAMA0", 115200) # 位置1
- ser.flushInput() # 位置2
- ser.write("begin".encode("utf-8")) # 位置3
- def main():
- while True:
- count = ser.inWaiting() # 位置4
- if count != 0:
- recv = ser.read(count) # 位置5
- ser.write("Recv some data is : ".encode("utf-8")) # 位置6
- ser.write(recv) # 位置7
- ser.flushInput()
- time.sleep(0.1) # 位置8
-
- if __name__ == '__main__':
- main()
写好程序之后,记住使用sudo来运行Python程序。把单片机和CH340E连接到电脑上,用电脑的串口助手可以实现功能了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。