jjzjj

树莓派3B+:串口通讯

善良的小猪 2023-07-18 原文

树莓派3B+:串口通讯


背景

树莓派控制信号源,信号源使用的是RS232串口通讯,因此需要打开树莓派的串口。


一、树莓派串口通讯是什么?

指令:

gpio readall

树莓派串口通讯使用的是树莓派的8、10针(GPIO15、16),一发一收引脚。

官网介绍:GPIO引脚


二、使用步骤

1.树莓派串口知识

树莓派包含两个串口:ttyAMA0、ttyS0
ttyAMA0:硬件串口,由硬件实现,稳定性高,有单独的波特率时钟源,一般与其他硬件的串口通讯使用ttyAMA0
ttyS0:mini串口,时钟源是由CPU内核时钟提供的,因此当CPU使用率高时,其波特率不稳定。

serial0GPIO引脚对应的串口,主串口
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

有关树莓派3B+:串口通讯的更多相关文章

  1. STM32读取串口传感器数据(颗粒物传感器,主动上传) - 2

    文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  2. ruby - 如何在 Ruby 中使用 OpenID 访问 Google 通讯录 - 2

    我正在使用devise登录omniauth,authid。当用户登录时,我得到user_info:name:RiccardoTacconilast_name:Tacconiemail:email@gmail.comfirst_name:Riccardouid:https://www.google.com/accounts/o8/id?id=xxxxxxxxxprovider:google_apps我找到了一个插件:http://stakeventures.com/articles/2009/10/06/portable-contacts-in-ruby获取Google通讯录。我只需要使

  3. 1个串口用1根线实现多机半双工通信+开机控制电路 - 2

    功能需求:主机使用一个串口,与两个从机进行双向通信,主机向从机发送数据,从机能够返回数据,由于结构限制,主机与从机之间只有3根线(电源、地、数据线),并且从机上没有设物理的电源开关,需要通过与主机连接的数据线来控制开机,总结如下:1、数据线只有1根2、能够双向通信3、主机能够控制从机开机4、主机可以单独向1个从机发数据,也可以同时向两个从机发送数据根据需求,设计出如下电路:工作原理分析:VCC_24V_IN、GND、LINE_L(LINE_R)三根线接线连接到从机,电源开启电路是从机内部的电源控制。开机的逻辑:*主机先上电,LINE_L因为主机的R1上拉而有高电平,使Q6导通,Q5的G极电压被

  4. python模拟通讯录的数据删除功能 - 2

    通讯录(删除)描述模拟通讯录的数据删除功能。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬通讯录中信息包括:姓名,电话,所在学院。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬

  5. Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信) - 2

    运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid

  6. [蓝桥杯单片机]学习笔记——串口通信的基本原理与应用 - 2

    目录一、原理部分1、什么是串行通信(1)并行通信与串行通信(2)串行通信的制式(3)串行通信的主要方式  2、配置串口(1)SCON和PCON:串行口1的控制寄存器(2)SBUF:串行口数据缓冲寄存器 (3)AUXR:辅助寄存器​编辑(4)ES、PS:与串行口1中断相关的寄存器(5)波特率设置  3、串口框架编写二、程序案例一、原理部分1、什么是串行通信(1)并行通信与串行通信微控制器与外部设备的数据通信,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信。并行通信:数据的各位同时发送与接收,每个数据位使用一条导线,这种方式传输快,但是需要多条导线进行信号传输。串行通信:数据一位一

  7. QT 设计一个串口调试工具,用一个工程就能轻松解决,外加虚拟串口工具模拟调试,在日常工作中可类比模块间通信,非常详细建议收藏 - 2

    QT串口调试工具第一节虚拟串口工具安装第二节QT创建一个基于QWidget的项目第三节UI界面设计第三节项目头文件widget.h第四节项目实现文件widget.cpp第五节main函数第六节编译结果重点第七节使用QT打包程序,不安装QT的电脑可使用第一节虚拟串口工具安装-----------------------------------------下载所需工具---------------------------------------------------------------------链接:https://pan.baidu.com/s/1QkT36S4EnH2HEAhZ1TZ8

  8. 嵌入式Linux入门-彻底理解UART串口,手把手教你写程序 - 2

    UART串口这个东西,是嵌入式学习上避不开的,不仅在调试中经常用到,还有很多模块通过串口与SOC相连。这篇文章让你彻彻底底,搞明白串口程序的编写。没有基础的先看:嵌入式Linux学习系列全部文章:嵌入式Linux学习—从裸机到应用教程大全 目录1.UART串口1.1UART硬件连接1.2UART软件通信协议2.读手册,编程序2.1找对应引脚2.2设置GPIO为UART功能2.3设置UART(初始化)2.4编写发送接收函数3.完整代码和验证1.UART串口全称:通用异步收发传输器(UniversalAsynchronousReceiver/Transmitter,简称UART)是一种串行异步收发

  9. 如何通过websoket实现即时通讯+断线重连? - 2

    本篇博客只是一个demo,具体应用还要结合项目实际情况,以下是目录结构:1.首先通过express搭建一个本地服务器npminstallexpress2.在serve.js中自定义测试数据 constexpress=require('express');constapp=express();consthttp=require('http');constserver=http.createServer(app);app.get('/',(req,res)=>{res.send('服务器搭好了');});app.get('/list',(req,res)=>{res.send([{id:1,nam

  10. 【USB】Android实现读写USB串口数据 - 2

    最近在研究USB方面的内容;先后做了关于Android读写HID、串口设备的DEMO。本文比较简单,主要介绍的是Android实现读取串口数据的功能废话不多说,先看一下业务层是如何调用的;如图:首先,监听USB连接状况,当USB进行请求USB权限,当USB权限申请成功,进行调用打开Usb设备的方法;当监听到USB断开,进行关闭连接;这是向串口写入数据的方法;本DEMO主要使用Handle进行数据各个线程之间的数据传到,以及USB连接读写情况的反馈;下面直接上代码:连接USB设备的代码publicvoidopenCDC(UsbDeviceusbDevice,UsbDeviceConnection

随机推荐