加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 一、前言
    • 二、配置串口
    • 三、串口收发测试
    • 四、程序编写并运行
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

树莓派从零开始快速入门第9讲——串口

07/09 15:25
2664
阅读需 12 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

一、前言

串口是嵌入式环境里面使用最多的通讯方式之一,相信很多接触过单片机的同学对串口或多或少都有些了解,老规矩,通信原理和相关的一些参数(如:波特率)我就不介绍了,这些东西都比较简单,不清楚的同学自行查阅相关资料,我主要讲一下大家可能不太清楚的一些知识点。

串口的冷门知识:

串口的类型其实不止一种,串口常用的电平有三种:TTL、RS232、RS485,还有一种不常见的RS422,不常用的我就不说了,我主要讲一下常用的这三种电平的区别。

TTL:电压范围0V至+5V,高电平>2.4V,低电平<0.4V,一般MCU直接输出的串口就是TTL电平的。

RS232:电压范围-15V至+15V,高电平为-3V至-15V,低电平为+3V至+15V。

RS485:电压范围-7V至+12V,不同于TTL和RS232,RS485采用的差分信号负逻辑,高电平为两线间的电压差-2V至-6V,低电平为两线间的电压差+2V至+6V。

三种电平之间不能直接连接,需要通过转换芯片改变电平,一般MCU端出来的电平都是TTL。

如果MCU的串口需要连接到PC端,一般有三种方法:

1、通过一个USB转TTL的芯片转换,可以放在主板上,也可以用那种转换小板,这个大家应该比较熟悉了,某宝上面随处可见。
2、通过一个TTL转232的芯片转换,然后再接一根USB转232的连接线,常用DB9接口。
3、通过一个TTL转485的芯片转换,然后再接一根USB转485的连接线。

TTL一般是板内模块间通讯用的比较多,因为串口线过长会有线损,影响通讯,因此,外接的传感器和MCU的通讯大多使用RS232和RS485这两种,像RS485,串口线即使长达一百米,也不影响正常通讯。

二、配置串口

特别说明:关于串口的配置,我专门查阅了相关的资料,发现众说纷纭,一时间搞得我也有点懵,最后,我用了一种跟大家都不太一样的方法解决了这个问题,当然,我不觉得他们说的就是错的,应该是跟树莓派硬件版本和镜像版本有关系。

我总结了一下网上关于串口的配置,基本都是修改config.txt和cmdline.txt这两个文件,于是在我把串口调试好了之后,将这两个文件的内容贴出来,做个参考。
cmdline.txt文件内容如下:

console=tty1 root=PARTUUID=88efaca1-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

config.txt文件内容如下:

在这里插入图片描述

我这里用的是树莓派是3B+,镜像是2021-05-07-raspios-buster-armhf.img,其他版本不确定以下方法是否可行。

配置方法1:通过配置命令

sudo raspi-config    // 打开配置
sudo reboot          // 重启,如果之前没有使能,配置完之后要重启才能生效

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置完成后重启即可。

注意:如果同时打开了端口和shell打印,就只能用于shell调试,不能当普通串口使用,不然会导致串口数据传输不稳定,偶尔出现乱码。

配置方法2:在可视化界面的设置里面修改

在这里插入图片描述
在这里插入图片描述

配置完成后重启即可。

注意:如果同时打开了端口和shell打印,就只能用于shell调试,不能当普通串口使用,不然会导致串口数据传输不稳定,偶尔出现乱码。

三、串口收发测试

1、查询端口

串口的端口有两个:ttyAMA0(硬件串口)和ttyS0(mini串口),serial也有两个。

serial0:对应的shell调试串口(引脚有引出,可以直接使用)。

serial1:对应的蓝牙串口(引脚没有引出直接连接板载蓝牙,不能直接使用)。

ttyAMA0:硬件串口,默认打开,默认映射serial1。

ttyS0:mini串口,默认不打开。(据说该串口不稳定,实际测试关闭shell之后并没有出现过异常情况)

注:serial0和serial1的映射关系可以通过配置反过来(具体怎么配置这里就不说了),据说ttyAMA0比ttyS0稳定,实际测试都没有发现不稳定的情况(也可能是我测试的次数不够多,或者其他进程启动的不够多)。

查询serial端口是否打开,命令如下:

ls -l /dev            // 查询所有dev
ls -l /dev/serial     // 只查询serial

在这里插入图片描述

serial0端口对应的是树莓派物理引脚的第8脚和第10脚。

在这里插入图片描述

2、串口调试

我这里用的调试工具是minicom。

1)下载minicom

sudo apt-get install minicom

在这里插入图片描述

2)硬件连接

通过一个USB转TTL的模块,连接电脑和树莓派。(USB转TTL的模块可以自由选择,如果你的树莓派扩展板带有usb转ttl的芯片,也是可以使用的)

在这里插入图片描述

3)运行minicom

sudo minicom -D /dev/ttyS0  // 默认波特率为115200,-D代表端口,/dev/ttyS0 类似于windows中的COM口

在这里插入图片描述

3)PC端打开串口助手

随便打开一个串口助手,设置好波特率和com口。

在这里插入图片描述

4)PC端和树莓派相互收发数据

在minicom窗口输入字符串即可发送至PC端,窗口默认不显示键盘输入的字符串。

在PC端发送字符串,会在minicom的窗口显示出来。

minicom使用技巧:

1:输入crtl+A,再输入E,可以打开串口发送显示(默认是关闭显示的),再操作一遍则是隐藏显示。

2:输入crtl+A,再输入Q,Enter,可以退出minicom窗口。

在这里插入图片描述
在这里插入图片描述

四、程序编写并运行

示例代码:

#!/usr/bin/python
# -*- coding:utf-8 -*-
import serial

#ser = serial.Serial("/dev/ttyAMA0",115200)
ser = serial.Serial("/dev/ttyS0",115200)

print("serial test start ...")
ser.write("Hello Wrold !!!n")
try:
    while True:
        ser.write(ser.read())
except KeyboardInterrupt:
    if ser != None:
        ser.close()

示例代码运行结果:

运行后PC端会收到“Hello Wrold !!!”,PC端随意发送一个字符串,树莓派会返回一样的字符串。

![在这里插入图片描述](https://img-blog.csdnimg.cn/0a82f08641ed459387a05b5ebedfb67d.png

注:代码运行后可通过Crtl+C退出运行。

在这里插入图片描述

进阶代码:

修改1:波特率改为9600
修改2:增加一个功能:通过串口来控制LED灯。

#!/usr/bin/python
# -*- coding:utf-8 -*-
import serial
import RPi.GPIO as GPIO

LED = 26
GPIO.setwarnings(False)               #禁用警告(可以不用)
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED,GPIO.OUT)

#ser = serial.Serial("/dev/ttyAMA0",115200)
ser = serial.Serial("/dev/ttyS0",9600)

print("serial test start ...")
ser.write("Hello Wrold !!!n")
try:
    while True:
        rx_buf = ser.read()
        ser.write(rx_buf)

        if rx_buf == 'a':
            GPIO.output(LED,GPIO.HIGH)
            print("led on")

        if rx_buf == 'b':
            GPIO.output(LED,GPIO.LOW)
            print("led off")

except KeyboardInterrupt:
    if ser != None:
        ser.close()

进阶代码运行结果:

和预期的一样,波特率9600,串口通信依然正常,PC端发送打开LED灯,发送b关闭LED灯。

在这里插入图片描述

五、结束语

总结一下串口的配置,树莓派的串口有两个,但是只有一个是有用排针引出来,所以先要把调试串口或硬件串口映射到引出来的那对引脚,然后再编写串口收发的程序即可。

好了,这一讲的内容就这么多了,如果对你有帮助,可以点个赞或者给个收藏,如果想了解更多树莓派的知识可以关注我,后续我会继续更新更多的教程,谢谢!

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
ABS25-32.768KHZ-T 1 Abracon Corporation CRYSTAL 32.7680KHZ 12.5PF SMD

ECAD模型

下载ECAD模型
$1.17 查看
HFBR-1522 1 Avago Technologies FIBER OPTIC TRANSMITTER, 5Mbps, THROUGH HOLE MOUNT
$13.86 查看
HFBR-1521Z 1 Foxconn Transmitter, 5Mbps, DIP, Through Hole Mount, ROHS COMPLIANT PACKAGE
$17.03 查看

相关推荐

电子产业图谱