电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
树莓派基础实验36:通用串口通信实验
分 享
扫描二维码分享
树莓派基础实验36:通用串口通信实验
树莓派
python
串口通信
张国平
关注
发布时间: 2020-08-31
丨
阅读: 2601
## 一、介绍 对于树莓派 3B+来说,他的UART功能有三种: 1、内部蓝牙使用; 2、控制终端使用; 3、与其他设备进行串口通信。 在[树莓派基础实验35:USB TO TTL模块实验](https://www.icxbk.com/article/detail?aid=1674)中学习了通过串口对树莓派进行控制台控制,让串口作为控制终端调试口即 serial console,但是在项目中常常会使用串口同其他传感器、单片机等设备进行通用串口通信。 本实验中设置树莓派的串口为通用串口与PC电脑的串口调试工具进行通信。 ## 二、组件 ★Raspberry Pi 3 B+主板*1 ★树莓派电源*1 ★USB TO TTL模块*1 ★面包板*1(可选) ★40P软排线*1 ★跳线若干 ## 三、实验原理 ####(一)树莓派的串口 树莓派从大的方向来说一共出了3代,每一代的CPU外设基本相同,但内核不同,外设里面一共包含两个串口,一个称之为硬件串口(/dev/ttyAMA0),一个称之为mini串口(/dev/ttyS0)。 硬件串口由硬件实现,有单独的波特率时钟源,性能高、可靠,mini串口性能低,功能也简单,并且没有波特率专用的时钟源而是由CPU内核时钟提供,因此mini串口有个致命的弱点是:波特率受到内核时钟的影响。内核若在智能调整功耗降低主频时,相应的这个mini串口的波特率便受到牵连了,虽然你可以固定内核的时钟频率,但这显然不符合低碳、节能的口号。 在所有的树莓派板卡中都通过排针将一个串口引出来了,目前除了树莓派3代以外 ,引出的串口默认是CPU的那个硬件串口。而在树莓派3代中,由于板载蓝牙模块,因此这个硬件串口被默认分配给与蓝牙模块通信了,而把那个mini串口默认分配给了排针引出的GPIO Tx Rx。 树莓派的串口默认为串口终端调试使用,如要正常使用串口则需要修改树莓派设置。关闭串口终端调试功能后则不能再通过串口登陆访问树莓派,只能通过ssh或者远程桌面连接树莓派后进行控制。 ![](https://cf02.ickimg.com/bbsimages/202008/b128c9c15b642fedce04e7d0268a4844.png) 上图红框中就是引出的串口IO(GPIO 14/15),如果我们需要通过UART外接模块,默认情况下必须得使用性能很低的mini串口了,而且随着内核主频的变化,还会造成波特率的变化导致通信的失败,几乎很难使用。所以我们一般要恢复硬件串口(/dev/ttyAMA0)与GPIO 14/15的映射关系,使得我们能够通过GPIO使用高性能的硬件串口来连接我们的串口设备。 恢复映射关系前先看下默认的映射关系: ![](https://cf02.ickimg.com/bbsimages/202008/40f6bcb2274608755144f0f146803011.jpg) **serial0是GPIO引脚对应的串口,serial1是蓝牙对应的串口。**如图所示,serial0(GPIO串口)默认使用的是ttyS0(mini串口),serial1(蓝牙)使用的是ttyAMA0(硬件串口)。 ## 四、实验步骤 **第1步:** 连接电路。与[树莓派基础实验35:USB TO TTL模块实验](https://www.icxbk.com/article/detail?aid=1674)一样,使用USB TO TTL模块连接好树莓派的串口和PC电脑的USB接口。 | 树莓派(name) | T型转接板(BCM) | USB TO TTL模块 | |:-:|:-:|:-:| |TXD|TXO|RXD| |RXD|RXI|TXD| |GND|GND|GND| 下图中的USB要插到笔记本电脑上哈,为方便拍照就没插上。连线很简单,电路图就没画了。 ![USB TO TTL模块实物接线图](https://cf02.ickimg.com/bbsimages/202008/0540b70fb6245cafc0832532d3667b9a.jpg) **第2步:** 首先我们先尝试使用默认的ttyS0(mini串口)来进行通用串口通信。 (1)设置树莓派,在Raspberry Pi Configuration中将Serial Port设置为Enable,但是Serial Console都要Disable,即关闭串口控制台功能,然后必须重启树莓派生效。 ![](https://cf02.ickimg.com/bbsimages/202008/85a69479c2e641ef951958a45ef40838.jpg) (2)PC电脑上运行串口调试工具,串口驱动的安装请参考[树莓派基础实验35:USB TO TTL模块实验](https://www.icxbk.com/article/detail?aid=1674)中的内容。如下图设置好参数,点击“打开串口”。 ![](https://cf02.ickimg.com/bbsimages/202008/1825d054e25070237704549407485d49.jpg) (3)树莓派上安装minicom,启动时配置参数串口为/dev/ttyS0,波特率(9600)。在树莓派上输入信息,在PC上的串口调试工具就会收到该信息。 ```python sudo apt-get install minicom #安装minicom sudo minicom -D /dev/ttyS0 -b9600 #启动minicom ``` ![](https://cf02.ickimg.com/bbsimages/202008/d32fa128fe67c8fa2376844e8670f20b.jpg) (4)PC上的串口调试工具发送字符信息,树莓派上也会显示该信息,证明两者的UART双向通信成功。 ![](https://cf02.ickimg.com/bbsimages/202008/080aa726b0015d469dda9474a6f1e2f1.jpg) (5)这里要注意的是:进入minicom工具,按提示按CTAL -A,然后按Z后会显示帮助信息。若再按O可以进入Minicom配置界面。 ![](https://cf02.ickimg.com/bbsimages/202008/6b10537915292a6bacaec8ff2ca124c9.jpg) 进入Minicom配置界面,再选择Serial port setup,可以对树莓派的串口进行设置。 ![](https://cf02.ickimg.com/bbsimages/202008/600fe3b7afe3291df2a90812980b939c.jpg) 进入串口设置,可以设置树莓派串口的设备、波特率等: ![](https://cf02.ickimg.com/bbsimages/202008/8c922c28dec18314117b3bae7981c0fb.jpg) **第3步:** 为了在树莓派3中通过GPIO使用高性能的硬件串口,我们必须将分配给蓝牙使用的硬件串口与分配给IO排针的mini串口进行对换,这必然会使得蓝牙模块的功能受到影响,不过这里我们不使用蓝牙。 (1)在/boot/overlays文件内有两个文件,README 和pi3-miniuart-bt.dtbo,首先查看有没有相关文件。 ![](https://cf02.ickimg.com/bbsimages/202008/d571cf20361c008d4651915bda77f860.jpg) (2)README文件中说明了此文件的功能,是将树莓派3的蓝牙切换到mini串口(ttyS0),并且恢复硬件串口(ttyAMA0)到GPIO14&15引脚中。 ![](https://cf02.ickimg.com/bbsimages/202008/b5bd47b2853f7a93fb64a732180accc8.jpg) (3)修改配置文件 ```python sudo vim /boot/config.txt ``` 在该文件中加一行代码 ```python dtoverlay=pi3-miniuart-bt ``` ![](https://cf02.ickimg.com/bbsimages/202008/1de68d761f0673cec2db31cfef218113.jpg) 保存后重启树莓派,再查看映射关系已经改变: ![](https://cf02.ickimg.com/bbsimages/202008/85511299ef2048cf901e6e58915c79a1.jpg) (4)进入minicom,发送信息给PC串口调试工具。与第2步不同的是:启动时配置参数串口必须为/dev/ttyAMA0,波特率可以更改为其它的,这里设置为115200。 ```python pi@raspberrypi:~ $ sudo minicom -D /dev/ttyAMA0 -b115200 ``` ![](https://cf02.ickimg.com/bbsimages/202008/b26da2313360af29806ac93573781987.jpg) 经过测试,双向通信成功!这里要注意,第2步里面关闭串口控制台功能的设置不能变,即Serial Console要Disable。 **补充:** 前面步骤当中的部分设置使用的是图形界面配置,在不能使用图形界面时,也可以直接修改配置文件。 (1)上面串口的开启的步骤中,是在Raspberry Pi Configuration 界面中,将Serial Port选项ENable,也可以直接修改/boot/config.txt文件。 ```python sudo vim /boot/config.txt ``` ![](https://cf02.ickimg.com/bbsimages/202008/dffda617b5053bfa77134e22a44f5b52.jpg) enable_uart=1即为Serial Port Enable串口开启,enable_uart=0即为Serial Port Disable串口关闭。 (2)上面关闭串口控制台功能,是在Raspberry Pi Configuration 界面中,将Serial Console选项Disable,可以直接修改/boot/cmdline.txt文件。 ```python sudo vim /boot/cmdline.txt ``` 修改前: ![](https://cf02.ickimg.com/bbsimages/202008/45d9dc7e7128b2ec4e6f5b2955f85c5e.jpg) 修改后: ![](https://cf02.ickimg.com/bbsimages/202008/3e20d18da4c9a5ac17e3b2a6b349ce7d.jpg) 去掉了“console=serial0,115200”,即Disable了串口控制台功能。 ![](https://cf02.ickimg.com/bbsimages/202008/cee6e0385c6365aba44d89e1dec885f4.jpg)
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
1
)
张国平
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交