
- 别 称
- 通常指COM接口
- 简 称
- 串口
- 中文名
- 串行接口
- 外文名
- Serial Interface
-
串口通信的基本知识
2014-07-02 14:41:03[编辑简介]:本文介绍了串口通讯的基本概念、数据格式、通讯方式、典型的串口通讯标准等内容。 [关键词]:串口通讯,RS232,RS485,停止位,奇校验,偶校验 1 串口通讯 串口通讯(Serial Communication),是指外设和...串口通信的基本知识
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,分享一下给大家。点击跳转到教程。
本文介绍了串口通讯的基本概念、数据格式、通讯方式、典型的串口通讯标准等内容。串口通讯,RS232,RS485,停止位,奇校验,偶校验1 串口通讯
串口通讯(Serial Communication),是指外设和计算机间,通过数据信号线、地线等,按位进行传输数据的一种通讯方式。
串口是一种接口标准,它规定了接口的电气标准,没有规定接口插件电缆以及使用的协议。
2 串口通讯的数据格式
一个字符一个字符地传输,每个字符一位一位地传输,并且传输一个字符时,总是以“起始位”开始,以“停止位”结束,字符之间没有固定的时间间隔要求。
每一个字符的前面都有一位起始位(低电平),字符本身由7位数据位组成,接着字符后面是一位校验位(检验位可以是奇校验、偶校验或无校验位),最后是一位或一位半或二位停止位,停止位后面是不定长的空闲位,停止位和空闲位都规定为高电平。实际传输时每一位的信号宽度与波特率有关,波特率越高,宽度越小,在进行传输之前,双方一定要使用同一个波特率设置。
3 通讯方式
单工模式(Simplex Communication)的数据传输是单向的。通信双方中,一方固定为发送端,一方则固定为接收端。信息只能沿一个方向传输,使用一根传输线。
半双工模式(Half Duplex)通信使用同一根传输线,既可以发送数据又可以接收数据,但不能同时进行发送和接收。数据传输允许数据在两个方向上传输,但是,在任何时刻只能由其中的一方发送数据,另一方接收数据。因此半双工模式既可以使用一条数据线,也可以使用两条数据线。半双工通信中每端需有一个收发切换电子开关,通过切换来决定数据向哪个方向传输。因为有切换,所以会产生时间延迟,信息传输效率低些。
全双工模式(Full Duplex)通信允许数据同时在两个方向上传输。因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。在全双工模式中,每一端都有发送器和接收器,有两条传输线,信息传输效率高。
显然,在其它参数都一样的情况下,全双工比半双工传输速度要快,效率要高。
4 偶校验与奇校验
在标准ASCII码中,其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。
5 停止位
停止位是按长度来算的。串行异步通信从计时开始,以单位时间为间隔(一个单位时间就是波特率的倒数),依次接受所规定的数据位和奇偶校验位,并拼装成一个字符的并行字节;此后应接收到规定长度的停止位“1”。所以说,停止位都是“1”,1.5是它的长度,即停止位的高电平保持1.5个单位时间长度。一般来讲,停止位有1,1.5,2个单位时间三种长度。
6 波特率
波特率就是每秒钟传输的数据位数。
波特率的单位是每秒比特数(bps),常用的单位还有:每秒千比特数Kbps,每秒兆比特数Mbps。串口典型的传输波特率600bps,1200bps,2400bps,4800bps,9600bps,19200bps,38400bps。
PLC/PC与称重仪表通讯时,最常用的波特率是9600bps,19200bps。PLC/PC或仪表与大屏幕通讯时,最常用的波特率是600bps。
7 典型的串口通讯标准
EIA RS232(通常简称“RS232”): 1962年由美国电子工业协会(EIA)制定。
EIA RS485(通常简称“RS485”): 1983年由美国电子工业协会(EIA)制定。
8 RS232串口
RS232是计算机与通信工业应用中最广泛一种串行接口。它以全双工方式工作,需要地线、发送线和接收线三条线。RS232只能实现点对点的通信方式。
8.1 RS232串口缺点
●接口信号电平值较高,接口电路芯片容易损坏。
●传输速率低,最高波特率19200bps。
●抗干扰能力较差。
●传输距离有限,一般在15m以内。
●只能实现点对点的通讯方式。
8.2 RS232串口接口定义
RXD:接收数据,TXD:发送数据,GND/SG:信号地。
8.3 电脑DB9针接口定义
电脑DB9针接口是常见的RS232串口,其引脚定义如下:
2号脚:RXD(接收数据)
3号脚:TXD(发送数据)
5号脚:SG或GND(信号地)
其它脚:我们不用
电脑RS232串口与仪表串口连接图:
9 RS485串口
9.1 RS485串口特点
●RS485采用平衡发送和差分接收,具有良好的抗干扰能力,信号能传输上千米。
●RS485有两线制和四线制两种接线。采用四线制时,只能实现点对多的通讯(即只能有一个主设备,其余为从设备)。四线制现在很少采用,现在多采用两线制接线方式。
●两线制RS485只能以半双式方式工作,收发不能同时进行。
●RS485在同一总线上最多可以接32个结点,可实现真正的多点通讯,但一般采用的是主从通信方式,即一个主机带多个从机。
●因RS485接口具有良好的抗干扰能力,长的传输距离和多站能力等优点使其成为首选的串行接口。
9.2 485抑制共模干扰示意图
9.3 RS485串口接口定义
A或Data+(D+)或+:信号正;
B或Data-(D-)或-:信号负。
9.4 计算机与RS485仪表通讯
计算机自带的串口只有RS232,没有RS485,如果计算机要与RS485串口的仪表进行通讯,必须使用串口转换器或装上RS485串口转换卡后才能进行通讯。
9.5 RS485串口的终端电阻
●一般情况下不需要增加终端电阻,只有在RS485通信距离超过100米的情况下,要在RS485通讯的开始端和结束端增加终端电阻,RS485典型终端电阻是120欧。
●终端电阻是为了消除在通信电缆中的信号反射在通信过程中,有两种信号因导致信号反射:阻抗不连续和阻抗不匹配。
阻抗不连续,信号在传输线末端突然遇到电缆阻抗很小甚至没有,信号在这个地方就会引起反射。消除这种反射的方法,就必须在电缆的末端跨接一个与电缆的特性阻抗同样大小的终端电阻,使电缆的阻抗连续。由于信号在电缆上的传输是双向的,因此,在通讯电缆的另一端可跨接一个同样大小的终端电阻。
引起信号反射的另一原因是数据收发器与传输电缆之间的阻抗不匹配。这种原因引起的反射,主要表现在通讯线路处在空闲方式时,整个网络数据混乱。要减弱反射信号对通讯线路的影响,通常采用噪声抑制和加偏置电阻的方法。在实际应用中,对于比较小的反射信号,为简单方便,经常采用加偏置电阻的方法。
10 串口通讯硬件常见的注意事项
●通讯电缆端子一定接牢,不可有任何松动,否则,可能会烧坏仪表或上位机的通讯板。
●不可带电拔插通讯端子,否则,可能会烧坏仪表或上位机的通讯板,一定要关闭仪表电源后才能去拔插通讯端子或接通讯线。
●通讯用的屏蔽电缆最好选用双层隔离型屏蔽电缆,其次选用单层屏蔽电缆,最好不要选用无屏蔽层的电缆,且电缆屏蔽层一定要能完全屏蔽,有些质量差的电缆,屏蔽层很松散,根本起不到屏蔽的作用。单层屏蔽的电缆屏蔽层应一端接地,双层屏蔽的电缆屏蔽层其外层(含铠装)应两端接地,内层屏蔽则应一端接地。
●仪表使用RS232通讯时,通讯电缆长度不得超过15米。
●一般RS485协议的接头没有固定的标准,可能根据厂家的不同引脚顺序和管脚功能可能不尽相同,用户可以查阅相关产品RS485的引脚图。
●RS485通讯电缆最好选用阻阬匹配、低衰减的RS485专用通讯电缆(双绞线),不要使用普通的双绞电缆或质量较差的通讯电缆。因为普通电缆或质量差的通讯电缆,可能阻抗不匹配、衰减大、绞合度不够、屏蔽层太松散,这样会导致干扰将非常大,会造成通讯不畅,甚至通讯不上。
●仪表使用RS485通讯时,每台仪表必须手牵手地串下去,不可以有星型连接或者分叉,如果有星型连接或者分叉,干扰将非常大,会造成通讯不畅,甚至通讯不上。
●485总线结构理论上传输距离达到1200米,一般是指通讯线材优质达标,波特率9600,只有一台485设备才能使得通讯距离达到1200米,而且能通讯并不代表每次通讯都正常,所以通常485总线实际的稳定通讯距离远远达不到1200米。负载485设备多,线材阻抗不同时,通讯距离更短。
●仪表使用RS485通讯时,必要时,请接入终端电阻,以增强系统的抗干扰性,典型的终端电阻阻值是120欧。
11 串口通讯软件设置要点
11.1 有关通讯的一些基本概念
●主机与从机:在通讯系统中起主要作用、发布主要命令的称为主机,接受命令的称为从机。
●连续方式:指主机不需要发布命令,从机就能自动地向主机发送数据。
●指令方式:指主机向从机发布命令,从机根据指令执行动作,并将结果“应答”给主机的模式。
●输出数据类型:指在连续方式通讯时,从机输出给主机的数据类型。
●通讯协议:指主机与从机通讯时,按哪一种编码规则来通讯。
●波特率:主从机之间通讯的速度。
●数据位:每次传输数据时,数据由几位组成。
●校验位:数据传输错误检测,可以是奇校验、偶校验或无校验。
●地址:每一台从机的编号。
11.2 主从机之间通讯设置要点
●要点一:主/从RS232/485硬件有无设置正确,通讯线有无接对。有些通讯板卡是RS422与RS485共用的,依靠板上跳线来实现的,有些仪表RS232/485也需要通讯跳线来实现。
●要点二:主机上的通讯端口有无设置正确;超时(一般设置为2s)、通讯延时(一般设置为5~20ms)、ACK信号延时(一般设置为0ms)有无设置正确。
●要点三:主/从机通讯协议有无选择正确。
●要点四:主/从机波特率有无选择正确。
●要点五:主/从机数据位有无选择正确。数据位可以选择7位,8位。
●要点六:主/从机校验位有无选择正确。校验位一般可选择偶校验、奇校验、无校验。
●要点七:主/从机停止位有无选择正确。停止位可以选择1位、1.5位还是2位。
●要点八:从机地址有无选择正确。
●要点九:主/从机的通讯方式有无选择正确。进行通讯测试的时候经常会进行线路测试,测试所用的串口线是否可用,方法有二如下:1 把串口线接到不同的串口,用串口调试工具从一个串口发数据,另一个能正常收到说明串口线是OK的。2 把串口线的一端短接(用金属把2,3号脚连通),用万用表测另一端的2,3号如果正常的话会有嘀嘀的短接报警声。 -
c# 简单的串口通信 新手篇
2018-09-26 11:17:10最近自己闲着 自学了C# ,本人不是搞软件的 ,搞嵌入式的 ,经常要用串口调试工具来调试 ,有时候还要处理一些数据但是市面上的不能满足我的要求 ,正好一个项目需要学习C#,借此机会来开发一个串口 ,说不定对我也...最近自己闲着 自学了C# ,本人不是搞软件的 ,搞嵌入式的 ,经常要用串口调试工具来调试 ,有时候还要处理一些数据但是市面上的不能满足我的要求 ,正好一个项目需要学习C#,借此机会来开发一个串口 ,说不定对我也有用!
话不多说先看看成果!
串口调试工具 功能:
通过串口设置设置相应的参数 ,串口检测 检测插上的串口号 ,发送与接收数据,HEX显示 ,定时发送,文件保存。
1.在vs2017 菜单栏点击 文件 -> 新建项目, 创建c#下的 windows窗体应用:
在窗体上添加四个 “GroupBox”控件 ,分别将窗体分为“串口设置”,“数据接收”,“数据发送”,”文件操作“。
添加若干个"Label”和"ComboBOX” ,添加两个" RodioButton " 给字符与HEX 选择,添加若干个 “Button”
发送与接收 添加 TextBox 控件。
不说了上代码!
设置一下标志位与 Form1 初始化。
串口检测 界面初始化
private void SetPortProperty () // 设置串口名
{
sp = new SerialPort();
sp.PortName = cbxComPort.Text.Trim(); //设置串口名
sp.BaudRate = Convert.ToInt32(cbxBaudRate.Text.Trim()); //设置串口波特率
float f = Convert.ToSingle(cbxStopBits.Text.Trim()); //设置停止位
if(f==0)
{
sp.StopBits = StopBits.None;
}
else if(f==1)
{
sp.StopBits = StopBits.One;
}
else if(f==1.5)
{
sp.StopBits = StopBits.OnePointFive;
}
else if (f == 2)
{
sp.StopBits = StopBits.Two;
}
else
{
sp.StopBits = StopBits.One;
}
sp.DataBits = Convert.ToInt16(cbxDataBits.Text.Trim()); //设置数据位string s = cbxParity.Text.Trim(); //设置奇偶校验
if (s.CompareTo("无") == 0)
{
sp.Parity = Parity.None;
}
else if (s.CompareTo("奇校验") == 0)
{
sp.Parity = Parity.Odd;
}
else if (s.CompareTo("偶校验") == 0)
{
sp.Parity = Parity.Even;
}
else
{
sp.Parity = Parity.None;
}sp.ReadTimeout = -1; // 设置超时读取时间
sp.RtsEnable = true;// 定义Data Received 事件 , 当串口收到数据后触发事件
sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
if (rbnHex.Checked)
{
isHex = true;
}
else
{
isHex = false;
}}
上面3图 发送 数据 清除数据 打开文件
发送文件
定时发送
需要完整代码 私信 。
上面代码都是自己写的如果那里有不足之处还请多多指教 ,如果觉得对你有帮助就关注一下。
下载链接 : https://download.csdn.net/download/misslxy/12608949 解压密码私信
-
Android 串口编程
2011-11-28 23:28:32Android 串口编程,《Android 串口编程原理和实现方式》代码 -
介绍几款串口监控工具
2015-01-05 10:34:53特在网上找了几款串口监控软件,作了简单对比: 一、Device Monitoring Studio 网址:http://www.hhdsoftware.com 程序截屏: 软件功能比较强大,是收费软件,免费试用15天。从截图可以看出,选择了通信端口...在开发上位机下位机通讯程序时,有一个好的监控工具会事半功倍。特在网上找了几款串口监控软件,作了简单对比:
一、Device Monitoring Studio
网址:http://www.hhdsoftware.com
程序截屏:
软件功能比较强大,是收费软件,免费试用15天。从截图可以看出,选择了通信端口以后,可以很轻松监控串口数据。另外从界面上看它还有数据统计等很多其它功能,我没有全部试用,就不多介绍了。需要注意一点,它的启动按钮在界面右侧下方。
二、微软portmon
微软工具包Sysinternals Suite工具包监控工具之一,可惜只支持32位系统,而且最新版操作有点复杂,下面把操作步骤记录一下:
1.下载安装
地址:http://technet.microsoft.com/de-de/sysinternals/bb896644.aspx ,绿色软件,不需要安装,直接放到D:/PortMon
2.创建client
给portmon.exe创建一个快捷方式,然后按下图给它设置一个启动参数:
为了便于区分,把快捷方式命名更改为client
3.启动client
确保要监控的串口目前是没有被占用的,然后启动client,这时界面如下:
4.启动portmon
再直接双击portmon.exe,这时标题栏显示Not Connected。界面:
5.连接
按快捷键ctrl+r,输入localhost:
点OK连接,这时会提示连接成功。
从这里设置可以看出,这软件应该也支持远程调试的。不过我没有测试。
注意在监控过程中,两个Portmon窗口都不可以关闭。
6.设置
点击菜单Capture-Ports,选取要监控的串口。注意这里是复选方式,可以同时监控多个端口。
同时我们设置一下Filter-Filter/Highlight:
当然大家也可以根据自己实际需要更改Filter。
软件界面查看内容不方便,我们把输出指向到一个文档,点击File-Log to File,设置记录的文档。
这时候就可以监控串口数据了。
我这里使用ComMonitor作示例:
可以在Log里看到数据,其中发送的数据为write,接收的数据为Read。
其它的功能按钮可以设置滚动、清屏、停止监控等,比较简单不再赘述。
网上也有讲有win7、win8下可用的版本,不过我没有找到。如果大家找到希望能分享一份给我,谢谢。
我的系统是Win7,为了使用它,是建了winxp的虚拟机,虚拟机中使用物理机的串口。这个设置与本文关系不大,不再这里介绍了。
三、Comsky
这是前三款软件中最好用的一款,界面非常简单。国产软件,可从http://www.jizhuo.com下载。在使用串口调试软件同步测试时,需要注意:
1.先打开Comsky,并且选取要监控的串口,点击“监视”,再打开串口调试软件。
2.串口调试软件打开后,点一下关闭串口,再打开串口。
这时候就能监控数据了,放一个使用截图:
这时候就可以监控串口数据了。
四、串口监控器
主要功能如下:
接收数据:
1. 以十六进制方式显示接收到的数据。
2. 以字符方式显示接收到的数据。
3. 数据帧自动识别,分行显示。
4. 接收数据自动换行设置。
5. 显示或隐藏数据帧的接收时间。
6. 自动清除,自动保存接收到的数据。
7. 接收数据个数计数。
发送数据:
1. 十六进制方式发送数据。
2. 字符串方式发送数据。
3. 发送“发报窗口”当前光标行的数据帧。
4. 循环发送“发报窗口”当前光标行的数据帧。
5. 循环发送“发报窗口”固定行的数据帧。
6. 循环依次发送“发报窗口”的多行数据帧。(设置起始行,行数)
7. 触发发送,接收到“发报窗口”某一行数据,触发发送“发报窗口”另一行数据。
8. 发送数据个数计数。
实用增强功能:
1. 强大易用的进制转换功能。
2. 智能识别当前光标处数据帧的行号,“字符”或“十六进制数”的个数。
3. 智能计算当前选择的“字符”或“十六进制数”的个数。
4. 强大的数据查找功能。
5. 定时保存,定时清除数据。
6. 根据自己的喜好,灵活变换操作界面。
应用场合:
1. 截取和分析设备之间通讯数据流。
2. 串行外围设备硬件开发。
3. 串行设备驱动程序开发。
4. 调试和测试设备和设备之间的串行通讯过程。
5. 记录和分析RS232/422/485通信过程。
6. 模拟某设备通讯过程,对另外设备进行通讯测试。下载地址:
http://hb.onlinedown.net/down/comsetup.zip
内容来自:https://bbs.csdn.net/wap/topics/330178092
五、 AccessPort
具体使用方式可参考:https://jingyan.baidu.com/article/acf728fd6e25bcf8e510a38d.html
-
【常用模块】HC-05蓝牙串口通信模块使用详解(实例:手机蓝牙控制STM32单片机)
2018-05-19 16:09:54HC-05蓝牙串口通信模块应该是使用最广泛的一种蓝牙模块之一了。为什么呢? 因为HC05模块是一款高性能主从一体蓝牙串口模块,可以不用知道太多蓝牙相关知识就可以很好的上手。说白了,只是个蓝牙转串口的设备,你...HC-05蓝牙串口通信模块应该是使用最广泛的一种蓝牙模块之一了。为什么呢?
因为HC05模块是一款高性能主从一体蓝牙串口模块,可以不用知道太多蓝牙相关知识就可以很好的上手。说白了,只是个蓝牙转串口的设备,你只要知道串口怎么编程使用,就可以了,实现了所谓的透明传输。
但是就是这么一个很常见的模块,网上很多的博客写的都是错的,或者都是很不详细的。
所以本文就介绍一下这款蓝牙通信模块的使用,包括蓝牙模块的调试、手机与蓝牙模块之间的传输、手机蓝牙控制STM32单片机,应该是逐渐深入的一个过程。但是这仅仅是使用,以后有时间应该会对蓝牙有一个稍微深度的学习,而不能仅仅是浮于表面,只会用。
模块名称:HC-05蓝牙串口通信模块
参考资料:HC-05蓝牙串口通信模块官方资料包
其他模块:USB转TTL模块、手机蓝牙串口助手app
手机蓝牙串口助手软件,可以点击链接下载:蓝牙串口。因为这是我见过所有手机端界面最好看的了,其他的界面都有点太糟糕了。
蓝牙模块的调试
准备工作
USB转TTL模块与HC-05蓝牙模块的接线:
两模块共地,两模块共VCC(VCC取5V);蓝牙模块的RX接转换模块的TX,蓝牙模块的TX接转换模块的RX。如下图所示:
这个时候就要将转换模块连接到电脑上,然后利用串口调试助手进行蓝牙模块的调试。
附可能会用到的驱动:链接:https://pan.baidu.com/s/1bpYLfCr 密码:yabv
蓝牙模块的调试
HC-05蓝牙串口通讯模块具有两种工作模式:命令响应工作模式和自动连接工作模式。在自动连接工作模式下模块又可分为主(Master)、从(Slave)和回环(Loopback)三种工作角色。
- 当模块处于自动连接工作模式时,将自动根据事先设定的方式连接的数据传输;
- 当模块处于命令响应工作模式时能执行AT命令,用户可向模块发送各种AT 指令,为模块设定控制参数或发布控制命令。
怎么进入命令响应工作模式?
进入命令响应工作模式有两种方法:
- 模块上电,未配对情况下就是AT模式,波特率为模块本身的波特率,默认:9600,发送一次AT指令时需要置高一次PIO11;
- PIO11 置高电平后,再给模块上电,此时模块进入AT 模式,波特率固定为:38400,可以直接发送AT指令。
什么叫做置高一次PIO11?
在蓝牙模块中有一个小按键,按一下就置高一次PIO11。也就是说,第一种方法需要每发送一次AT指令按一次;而第二种方式是长按的过程中上电,之后就无需再管了,直接发送AT命令即可。
需要注意一下,两种进入命令响应工作模式的方式使用的波特率是不一样的,建议使用第二种方式。
怎么区分进了命令响应工作模式呢?
在蓝牙模块上有灯,当灯快闪的时候,就是自动连接工作模式;当灯慢闪的时候,就是命令响应工作模式。
AT命令
进入到命令响应工作模式之后,就可以使用串口调试助手进行蓝牙调试了。
首先有一点,AT指令不区分大小写,均以回车、换行结尾。下面介绍常用的AT指令:
常用AT指令 指令名 响应 含义 AT OK 测试指令 AT+RESET OK 模块复位 AT+VERSION? +VERSION:<Param> OK 获得软件版本号 AT+ORGL OK 恢复默认状态 AT+ADDR? +ADDR:<Param> OK 获得蓝牙模块地址 AT+NAME=<Param> OK 设置设备名称 AT+NAME? +NAME:<Param> OK 获得设备名称 AT+PSWD=<Param> OK 设置模块密码 AT+PSWD? +PSWD:<Param> OK 获得模块密码 AT+UART=<Param1>,<Param2>,<Param3> OK 设置串口参数 AT+UART? +UART:<Param1>,<Param2>,<Param3> OK 获得串口参数 对于AT指令,有几点注意:
- AT+NAME?:获得设备名称,这个AT指令有很大可能性是没有返回的,因为我也看到了很多的例子……,但是其他的指令都是没有问题的,直接设置设备名称就行了;
- AT+UART?:获得串口参数,串口的参数一共有三个,波特率、停止位、检验位。其取值如下:
串口参数 参数名称 取值 波特率 2400、4800、9600、19200、38400、5760、
115200、230400、460800、921600、1382400
停止位 0:1位
1:2位
校验位 0:NONE 1:Odd 2:Even 其默认值为:9600,0,0。
例子:
本文中,蓝牙串口的波特率设置成115200。之后的内容,就会采用这个波特率来进行通讯了。
手机与蓝牙模块之间的传输
直接将蓝牙模块与转换模块连接,再讲其连接到电脑上,蓝牙模块直接进入自动连接工作模式。
此时手机打开蓝牙串口调试应用,用其来连接蓝牙模块。手机蓝牙串口助手软件,可以点击链接下载:蓝牙串口。万分推荐这款,因为界面脱离了那种黑不溜秋的感觉,比较简洁、清爽。
这个软件的使用:点击界面右下角蓝牙的标志,选择蓝牙进行连接。
然后在电脑上的调试助手和手机的蓝牙串口调试应用之间就可以相互传输了,比如:
可以清楚的看到:电脑向手机发送了“hello you”,手机向电脑发送了“hello world”。
手机蓝牙控制STM32单片机
之前的两个例子都是相比较而言比较简单的,这个例子将会涉及到程序的内容了。
实现功能:手机通过蓝牙,向STM32单片机发送消息,STM32接收到消息之后原封不动的返回给手机。当然如果掌握了这个例子,也可以修改成,手机发送特定的消息,然后,STM32单片机做出相对应的动作。比如:点亮LED等、发动电机等等。
连接说明
使用USART1进行试验,也就是说STM32选取PA9、PA10来和HC-05进行连接。同时手机通过蓝牙来和HC-05进行连接。
原理就是:手机通过蓝牙传输到HC-05上,再通过串口通信和STM32通信;而之前一般都是电脑上通过USB线转串口的方式,通过串口和STM32通信。本质上没有区别的。
这个时候就应该更加深刻地体会到了本文开篇的一句话:说白了,只是个蓝牙转串口的设备,你只要知道串口怎么编程使用,就可以了,实现了所谓的透明传输。蓝牙的相关一切都被封装起来了,都不需要接触到。
STM32控制程序
#include "stm32f10x.h" void My_USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStrue; USART_InitTypeDef USART_InitStrue; NVIC_InitTypeDef NVIC_InitStrue; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIO端口使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//串口端口使能 GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9; GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz; GPIO_Init(GPIOA,&GPIO_InitStrue); GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10; GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz; GPIO_Init(GPIOA,&GPIO_InitStrue); USART_InitStrue.USART_BaudRate=115200; USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None; USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx; USART_InitStrue.USART_Parity=USART_Parity_No; USART_InitStrue.USART_StopBits=USART_StopBits_1; USART_InitStrue.USART_WordLength=USART_WordLength_8b; USART_Init(USART1,&USART_InitStrue); USART_Cmd(USART1,ENABLE);//使能串口1 USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开启接收中断 NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn; NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE; NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1; NVIC_InitStrue.NVIC_IRQChannelSubPriority=1; NVIC_Init(&NVIC_InitStrue); } void USART1_IRQHandler(void) { u8 res; if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET) { res= USART_ReceiveData(USART1); USART_SendData(USART1,res); } } int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); My_USART1_Init(); while(1); }
这段程序和【STM32】串口相关配置寄存器、库函数(UART一般步骤)中的程序一模一样,几乎没有什么改动。
区别就是,在UART实验中,USART1是和USB转串口模块连接在一起的,然后与电脑上的串口调试助手进行通信;现在改成USART1是和蓝牙模块连接在一起的,然后和手机上的蓝牙串口调试助手进行通信。
-
【STM32】HAL库 STM32CubeMX教程四---UART串口通信详解
2019-08-11 08:57:51今天我们学习STM32CubeMX串口的操作,以及HAL库串口的配置,我们会详细的讲解各个模块的使用和具体功能,并且基于HAL库实现Printf函数功能重定向,UART中断接收,本系列教程将HAL库与STM32CubeMX结合在一起讲解,使... -
Qt 串口通信(QSerialPort)
2018-08-14 16:55:50与下位机,单片机通信少不了使用串口进行通信,Qt 也提供了串口通信的类 QSerialPort https://doc.qt.io/qt-5.9/qserialport.html //小伙伴们具体去看文档 使用的时候在 pro 添加这句导入模块 QT += serialport ... -
异步串口通信
2012-07-12 22:09:19多线程异步串口通信, 通过底层API实现,VS2010环境编码 在本人博客中有详尽的文档说明,介绍串口通信的知识 http://blog.csdn.net/mingojiang/article/details/7713529 -
Java使用开源Rxtx实现串口通讯 串口开发
2014-04-13 15:48:48Java使用开源Rxtx实现串口通讯 串口开发,里面包含实例,下载后按自己的要求进行修改即可(仅限对java有基础的人员)。 -
python 串口工具制作(1)
2020-03-18 19:56:56使用serial庫加TK界面製作庫完成簡單的串口工具,實現串口數據收發。 製作完成之後界面大概就這樣子,我們可以看到這個工具可以自動監測你電腦接了幾個串口,并顯示在左側的文本框裏,點擊選擇即可連上串口,并實現... -
基于MATLAB GUI的串口通信
2017-09-12 21:23:45之前学过单片机 对于串口通信比较了解 最近在学习MATLAB 发现它还可以控制串口 于是通过MATLAB 的GUI创建了一个串口通信的小软件 效果如下 如果没有单片机或者其他硬件的话 我们可以直接用软件模拟串口 ... -
单片机 串口编程之串口通信仿真实验
2018-11-17 18:28:24单片机 串口编程之串口通信仿真实验 一、简述 记--简单的使能串口,串口收发数据的例子。(使用Proteus仿真+虚拟串口调试) 代码,仿真文件打包:链接: https://pan.baidu.com/s/1nyb46fTJrYcAy_VarFdO3A 提取... -
STM32串口发送数据和接收数据方式总结
2018-05-13 20:34:22之前写了篇关于ESP8266使用AT指令进行互相通讯的实验,在写STM32串口接发数据的程序中,觉得有必要将之前学的有关于串口方面的使用经历加以总结。 串口发送数据: 1. 串口发送数据最直接的方式就是标准调用... -
Java串口编程:串口数据的发送与监听读取
2015-03-15 11:23:53本人在近期的开发工作中遇到向串口发送设备控制指令的需求,遂对串口编程进行了略微深入的钻研,在此对自己的一些心得和经验进行总结,以供大家参考与交流。 串口介绍 串口全称为串行接口,一般指COM接口,是... -
Python 之 Serial串口通信
2019-06-07 09:36:13确定串口名称 WINDOWS #!/usr/bin/env python #-*- coding: utf-8 -* import serial import serial.tools.list_ports plist = list(serial.tools.list_ports.comports()) if len(plist) <= 0: print... -
Android 串口开发(一) 串口读写操作
2018-07-20 12:04:22开发串口程序首先要求你的设备需要支持串口通信,可以在设备上装一个App端的串口工具来检测一下 链接:https://pan.baidu.com/s/11L4aZI9orBhbnztka6H1Og 提取码:bvot 或者在电脑端下载一个友善串口助手检测一下... -
VS2010/2008/2005 MSCOMM串口控件
2011-04-29 19:00:11VS2010MFC没有串口控件,此压缩包里包含了串口控件相关的3个文件。mscomm32.ocx MSCOMM32.oca MSCOMM32.DEP MSCOMM.SRG 将这几个文件拷贝到一个固定的目录下然后注册就可以在MFC里正常使用串口控件了。 注册:开始->... -
高级串口编程—C/C++打开串口、关闭串口和读串口函数
2019-02-27 09:25:05最近在做一个陀螺仪的原始数据读取遇到了串口数据读取问题,在网上查阅了一篇技术文档,觉得写的不错,分享一下! 1.1前言 通常使用以下函数来通过Windows系统来对外围设备进行通信,做串口方面的程序,使用... -
QT5串口编程——编写简单的上位机
2016-01-30 15:51:48注:更新自2018年12月13日(我回看了一年多前写的这篇博客,觉得不是很好,故翻新了一遍。) 最近在学习嵌入式,而上位机又是一个不可缺少的工具,于是就开始接触QT,学习编写上位机。...下面开始介绍串口类的... -
USB转4路串口 USB转多路串口 串口神器
2018-10-26 16:54:22作为嵌入式工程师,串口是必要的。通常一个电脑的U口只能使用一个USB转串口模块,也就是只能查看一路串口数据。电脑的USB口一般都是2-3个,如果加上鼠标和键盘基本上就只能冗余出一个串口,这样如果想查看两路串口... -
树莓派串口
2018-11-09 15:20:49树莓派上自带一个串口,用于连接蓝牙或是串口命令行,串口资源很少,对于嵌入式的应用来说串口设备很多,需要的串口数量也很多,因为通过USB外接串口是一个不错的选择。树莓派的 raspberry 2018.04.18 stretch版本的... -
python 串口工具制作(2)
2020-04-03 20:18:39基于上一篇python TK之串口工具制作(1)的博文,我在这里做一些功能的完善,添加文本框数据编写发送功能。 首先我们在TK界面制作页面(按键初始化)增加文本框以及数据发送按钮: #按钮初始化 def Button_Init(): ... -
STM32—串口通讯详解
2019-07-30 22:26:34串口通讯目录物理层协议层USART简介代码讲解 串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,其通讯协议可分层为协议层和物理层。物理层... -
python串口工具,串口上位机
2019-12-19 18:40:57python 使用pyserial串口库开发串口工具 之前发过用tkinter库设计的串口工具UI代码,以下为python串口的逻辑代码,已整理成模块,可以随时保存下来使用。部分函数采用中文命名,只是测试中文函数是否可运行,事实... -
常用串口调试工具比较
2016-07-17 00:03:33目前有许多免费的串口调试工具,比较常用的有: 1、友善串口调试助手(v3.8.5) 优点: 1)使用方便,超级稳定,不死机,不丢包; 2)串口自动识别,支持COM9以上串口; 3)支持多串口调试; 4)支持... -
串口通信——硬串口
2018-07-18 12:49:17为了便于后期问题的解决,在此我们梳理一下Arduino的硬串口(HardwareSerial)与软串口(SoftwareSerial)之前的区别与联系,以及在使用过程中应该注意的问题。 Arduino面板 以常见的Arduino UNO为例,面板上只有一... -
Linux 检测串口并查看串口消息
2018-09-12 15:19:23背景:在win7 系统不能识别usb,尝试使用Ubuntu来识别串口并查看串口消息 当给电脑插上USB串口线后,先在windows下设备管理器查看端口,对应虚拟机下会多一个可移动设备 在ubuntu虚拟机下的可移动设备的串口... -
Arduino虚拟串口软串口
2018-04-16 09:07:57#include &... //定义虚拟串口名为serial,rx为6号端口,tx为7号端口 void setup() { serial.begin(9600); //初始化虚拟串口 Serial.begin(9600); //初始化Arduino默认串口 } char a; void loo... -
关于STC8单片机串口1、串口2、串口3、串口4的配置
2019-07-03 17:54:33串口1初始化配置: void Uart1Init(void) // 9600bps@12.000MHz { SCON = 0x50; // 8位数据,可变波特率 AUXR |= 0x40; // 定时器1时钟为Fosc,即1T AUXR &= 0xFE; // 串口1选择定时器1为波特率发生器 TMOD... -
Linux下串口通信详解(上)打开串口和串口初始化详解
2016-02-21 17:03:21linux下串口通信主要有下面几个步骤 串口通信流程图 下面我会一一介绍这几个步骤。 1.打开串口 代码(串口为ttyUSB0) //打开串口 int open_port(void) { int fd; fd=open("/dev/ttyUSB0",O_RDWR | O_NOCTTY...
-
QHVlcPlayer.rar
-
selenium.common.exceptions.NoSuchWindowException: Message: no such window: window was already closed
-
UIStepper之纯Swift创建及其常见方法
-
MySQL 触发器
-
NFS 网络文件系统
-
异步请求
-
MaxScale 实现 MySQL 读写分离与负载均衡
-
Opencv task3
-
DeepTables表格数据的深度学习工具包
-
龙芯生态应用开发基础:C语言精要
-
金士顿U盘微博营销活动策划方案.ppt
-
深度学习vad人声检测之训练数据加载
-
第五章 C语言 PTA函数——作业-答案.html
-
项目管理工具与方法
-
ELF视频教程
-
鸿蒙系统Harmonyos源码架构分析-第1期第2课
-
c# 非托管
-
【LeetCode】888. 公平的糖果棒交换(C++)
-
机器视觉学习基础绪论及应用
-
opencv3.3.1要的文件.rar