当前位置:   article > 正文

从零开始的树莓派开发(二):使用USART_树莓派 tx rx duanjie

树莓派 tx rx duanjie

第四章 使用USART

看了很多的帖子,各种方法也都有,这里我按照自己的需求(使用Python程序来发送和接收电脑串口助手发送的数据)来配置USART。

        这一步我参考了相当多大佬的文章和各种博客,可以说各种方法都用尽了。在快要绝望的时候,看到了这一篇文章(树莓派3B+ 串口使用大全(实现串口通信功能)_Stay Hungry Stay Foolish-CSDN博客_树莓派3b+串口),让我豁然开朗。下面我就我的理解进行解释。

        首先,需要知道树莓派中包含两个串口(ttyS0和ttyAMA0),前者由Soc内部提供时钟信号,不是很稳定,后者由外部晶振提供信号,稳定。树莓派默认只开启一个串口,即ttyAMA0,用于给蓝牙模块通信使用,而GPIO所用的串口并没有开启。

        所以第一步应该是开启ttyS0,树莓派会将这个串口映射给GPIO使用。为了提高GPIO的稳定性,我们需要改变映射关系,使ttyAMA0映射给GPIO。

        映射关系调节完毕之后,树莓派串口默认用于登录,就好像SSH远程登录一样。如果想让树莓派和其他设备通信,需要禁用控制台功能。

        经过这样几步之后,才算完成了GPIO中USART的配置。下面介绍详细步骤。

1.启用ttyS0

        首先键入:

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则对应蓝牙。这里应该是和我的相反,下面才开始改变映射关系。

2.修改映射关系

        首先备份一下将要修改的文件:

sudo cp /boot/config.txt /boot/config.txt.back

接下来用nano编辑器修改文件:

sudo nano /boot/config.txt

在文件的最后一行,加入:

dtoverlay=pi3-miniuart-bt

之后保存退出后重启一下树莓派:

sudo reboot

再次查看映射关系,就可以看到和上面图片一样的情况了。

3.禁用控制台

        这一步非常关键,否则串口一直会收到树莓派的登录请求。键入下面内容:

  1. sudo systemctl stop serial-getty@ttyAMA0.service
  2. sudo systemctl disable serial-getty@ttyAMA0.service

然后修改另一个配置文件(第一句是备份,第二句是用nano编辑器打开配置文件)

  1. sudo cp /boot/cmdline.txt /boot/cmdline.txt.back
  2. sudo nano /boot/cmdline.txt

打开文件后,删除其中的下面语句,其余部分不管。

console=serial0,115200

下面重启树莓派就可以了。

4.用串口测试助手测试

        需要在树莓派上用apt装一个测试助手,参看这个大佬的文章(Minicom使用介绍_常驻-CSDN博客_minicom)。

        进入配置页面之后,配置串口名字为:ttyAMA0,两个选项都选择NO,之后EXIT即可。然后按Ctrl+A,松开后再按Z键,选择E(开启回显模式)。

        此时将树莓派GPIO口的TX和RX线短接,键入任意一个字母之后,都会出现两个,说明串口测试通过。

5.用Python调用串口

        这里再一次借鉴另一位大佬的代码(最简单的树莓派+python3+串口通信的教程以及出现的问题的解决方式_朱少强的博客-CSDN博客_树莓派串口通信python)针对我自己的情况,做了对应的调整:

  1. # -*- coding:utf-8 -*-
  2. import serial
  3. import time
  4. ser = serial.Serial("/dev/ttyAMA0", 115200) # 位置1
  5. ser.flushInput() # 位置2
  6. ser.write("begin".encode("utf-8")) # 位置3
  7. def main():
  8. while True:
  9. count = ser.inWaiting() # 位置4
  10. if count != 0:
  11. recv = ser.read(count) # 位置5
  12. ser.write("Recv some data is : ".encode("utf-8")) # 位置6
  13. ser.write(recv) # 位置7
  14. ser.flushInput()
  15. time.sleep(0.1) # 位置8
  16. if __name__ == '__main__':
  17. main()

写好程序之后,记住使用sudo来运行Python程序。把单片机和CH340E连接到电脑上,用电脑的串口助手可以实现功能了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/484527
推荐阅读
相关标签
  

闽ICP备14008679号