搭建机器人电控系统——通信协议——串口通信USART/UART、RS232、RS485及其实例

2023-11-18

通信协议

串口通信详解
IIC通信详解
SPI通信详解
CAN通信详解


计算机与外界的信息交互称为通信

基本的通信方式分为两种:
串行通信:所传送的数据各位按顺序一位一位地发送或接受,占用资源少,速度相对较慢。
并行通信:所传送的数据的各个位是同时发送或接受。速度快,占用引脚资源多。

通信的速率
比特率(bit rate):每秒能传输的二进制位数。
波特率(Baud rate):每秒能传输的码元数(不一定是二进制)。
对于数字信号而言,波特率=比特率。

串行通信的种类
同步通信:带时钟同步信号传输,通讯双方是受同一个时钟源控制,如I2C、SPI、USART。
异步通信:不带时钟信号同步,不是同一个时钟源,按照一定规则传输,如USART、UART、单总线、CAN。

串行通信的方式
单工:只允许单方向传输,只需一条信号线
半双工:允许非同时进行的双方向传输,只需一条信号线。
全双工:允许同时进行双方向传输,需要两条信号线。

通信协议是主控MCU与各类驱动器、传感器之间实现信息交互的基本逻辑,搞懂通信协议在机器人的电控系统中占有很重要的地位。在接下来的内容中,我将分别讲解串口IICSPICAN通信协议的区别原理以及结合实际一些模块的代码部分。


什么是串口?

串口,全称串行接口(Series Interface),是指以串口协议为基础,数据一位一位地按顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信。

串口分类

根据串口具体实物表现的不同,我们将串口分为UART/USART、RS232、RS485等。其中UART只能异步通信,而USART既能够异步也能同步通信。

USART/UART、RS232、RS485的区别

不同串口分类遵循相同的协议——串口协议
它们的本质区别是遵循的通信方式电平格式不一样

UART/USART:全双工传输;TTL电平格式,常见以3.3V/5V高电平为1,以0V低电平为0。
在这里插入图片描述

RS232:全双工传输;负逻辑电平格式,-5V~-15V为1,5V到+15V为0。
在这里插入图片描述

RS485:半双工传输;差分传输电平格式,压差在-2V~-6V之间为1,在2V到6V之间为0。
(RS485通常适用于远距离传输)
在这里插入图片描述

串口协议原理

以上,不管是串口的何种分类,不管电平格式或者通信方式有多大的不同,它们都遵循统一的一种协议,即串口协议,这也是为什么不管是RS232、RS485或者UART/USART,它们在程序上的写法都是一样的

传输协议

空闲状态:TX、RX信号线为“1”高电平。(电压表测USART线为3.3V/5V,测RS232线为-5—-15V)

传输状态

  • 起始位(发送线置“0”表示开始传输);
  • 数据位(一般为8位,最高为9位,先发低位再发高位);
  • 奇偶校验位(0位/1位);
  • 停止位(发送线置“1”表示结束传输,1位/2位)。
    在这里插入图片描述

*数据帧格式:把用于完成数据传输的格式称为数据帧。

需要定义的参数

  • 数据位长度
  • 奇偶校验位长度
  • 停止位长度
  • 传输模式:只用于收/发,收/发均使用
  • 传输速率设置:波特率
    在这里插入图片描述

在这一章的开头,我讲解过,要想学会MCU控制传感器、电机等,先要掌握MCU的三大基石——时钟、GPIO和中断。现在可以看到MCU三大基石在我们想要利用MCU控制一个模块时的作用。

发送函数USART_SendData

在这里插入图片描述

发送函数中核心在于

USARTx->DR = (Data & (uint16_t)0x01FF)

其中将你要发送的数据Data与十六进制的01FF(二进制为0000 0001 1111 1111)做与运算,是因为我们讲过串口协议发送的数据位最高可以设置为9位

Example:比如我要发送的数据为0x01(0000 0000 0000 0001),那么与0x01FF做与运算后就为我发送的数据本身。
(如果不与0x01FF与运算,那么当你实际写入一个0x11FF时,就会发生错误,接收方接收不到正确的信息,0x01FF的存在就是防止此类事件的发生)

接收中断USART3_IRQHandler中的USART_GetITStatus位

前提:初始化开启USART外设中断

USART_GetITStatus位将默认为0(RESET),当串口中断发生时,将变为1(SET),所以通常利用此位的变化作为接收数据的标志。

串口通信硬件管脚

TX(发送)、RX(接收)、VCC(提供传输电源)、GND(保证共地)
很显然,两个模块做通信时,发送方TX接接收方RX。


串口通信实例——蓝牙和RS232通信的定位模块

蓝牙模块

蓝牙模块通常有六个引脚:TX、RX、VCC、GND、MD0、MD1。
其中MD0和MD1用于蓝牙模块的模式选择,通常蓝牙模块有三种模式:

MD0 MD1
00:通信功能(在使用蓝牙模块进行通信时,将这两个管脚拉低即可)
01:固件升级
10:配置功能
(根据厂商不同,可能不一样)

RS232陀螺仪定位模块

引脚:TX、RX、VCC、GND

你需要一个RS232转TTL电平格式的模块才能用MCU去控制。如果你买到了一个独立的模块,可以把该模块作为MCU的一部分,也可以把它当成陀螺仪定位模块的一部分。

(比如当成MCU的一部分时,从MCU引出的USART_TX接该模块的USART_TX,把该模块引出的RS232_TX接定位模块RS232_RX)
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

搭建机器人电控系统——通信协议——串口通信USART/UART、RS232、RS485及其实例 的相关文章

随机推荐

  • 单片机设计_单路测温系统(AT89C51、DS18B20温度传感器、LCD1602)

    单片机测温系统 想要更多项目私wo 一 简介 此系统主要由AT89C51 DS18B20温度模块和LCD1602组成 大致的原理是DS18B20温度采集到的数据传送给AT89C51的P3 3 INT1 外部中断1 最后通过LCD1602显示
  • 让开发人员偷懒的正则表达式

    正则表达式是一种基于特殊模式符号系统的文本处理系统 简而言之 它为程序员提供了轻松处理和验证字符串的能力 它代表了DRY Don t Repeat Yourself 原则的实现 在几乎所有支持的语言中 正则表达式模式根本不会改变形式 在后端
  • github部署本地

    github的java项目部署到本地 通过idea 1 注册github 如果你没有github的账号 那需要注册一个 注册github可以参考 https zhuanlan zhihu com p 103268406 当然 由于githu
  • SSM项目-基于Java+Mysql的大学生奖助学金发放管理系统(附论文+源码)

    大家好 我是职场程序猿 感谢您阅读本文 欢迎一键三连哦 当前专栏 Java毕业设计 精彩专栏推荐 安卓app毕业设计 微信小程序毕业设计 演示视频 ssm112大学生奖助学金发放管理系统演示 源码下载地址 https download cs
  • HCNP Routing&Switching之MAC安全

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • Spark 源码阅读一-启动脚本

    Spark Complile Help Links Because spark 1 5 need maven version 3 3 3 so i track the branch 1 4 git branch a git checkout
  • Day13 static-静态变量

    一 static 1 关于JavaBean类中的成员变量 public class Student private String name private int age private String gender 新增老师姓名 publi
  • 网页访问计数器 html,网页计数器(访问量)

    1 PHP实现网站访问量计数器 思路 用户向服务器发出访问请求 服务器读取访问次数文件 1 向客户端返回 服务器保存新的浏览次数 新用户访问 重复即可 解决方案 主要算法 1 数据文件 counter dat 2 读出数据文件 打开文件 如
  • Python Web:Flask异步执行任务

    Flask 是 Python 中有名的轻量级同步 web 框架 在一些开发中 可能会遇到需要长时间处理的任务 此时就需要使用异步的方式来实现 让长时间任务在后台运行 先将本次请求的响应状态返回给前端 不让前端界面 卡顿 当异步任务处理好后
  • jQuery empty() vs remove()

    https stackoverflow com questions 3090662 jquery empty vs remove http www cnblogs com yeer archive 2009 06 10 1500682 ht
  • JavaSE复习笔记

    第一章 Java概述 一 计算机语言 机器语言 汇编语言 高级语言 二 跨平台原理 Java可以在一处开发到处运行 即在一类操作系统上开发的程序 可以在任何操作系统上运行 不同的操作系统有不同的JVM java是运行在JVM上 从而实现了跨
  • win7系统打开定位服务器地址,win7 定位服务器地址

    win7 定位服务器地址 内容精选 换一换 您可以通过云日志服务 查看访问七层共享型负载均衡请求的详细日志记录 分析负载均衡的响应状态码 快速定位异常的后端服务器 您已经创建了七层负载均衡 您已经开通了云日志服务 登录管理控制台 在管理控制
  • 函数式组件与类组件有何不同?

    与React类组件相比 React函数式组件究竟有何不同 在过去一段时间里 典型的回答是类组件提供了更多的特性 比如state 当有了Hooks后 答案就不再是这样了 或许你曾听过它们中的某一个在性能上的表现优于另一个 那是哪一个 很多此类
  • MultipartFile实现文件上传和下载(Springboot)

    MultipartFile是SpringMVC提供简化上传操作的工具类 在不使用框架之前 都是使用原生的HttpServletRequest来接收上传的数据 文件是以二进制流传递到后端的 然后需要我们自己转换为File类 使用了Multip
  • 计算机专业选修课怎么选比较好,大一选修课选什么好 大学选修课推荐

    大学之于高中最大的不同点除了越来越多的自由时间以外 大学有各种各样的选修课供我们选择 在专业课之余 还可以选择其他自己感兴趣的学科进行学习 同时也能给自己增加一项技能 大学热门选修课 1 职场礼仪 礼仪是永远不会过时的 它是一个人的修养素质
  • 语法6:raise - 触发异常

    目录 1 基础格式 2 raise 单独语句 3 raise class 4 raise instance 5 raise from 6 try raise 实现循环跳出
  • JDK的命令行工具——修改中

    目录 一 jps 虚拟机进程状况工具 二 jstat 虚拟机统计信息监视工具 三 jinfo java配置信息工具 四 jmap java内存映像工具 五 jhat 虚拟机堆转储快照分析工具 仅做了解即可 六 jstack java堆栈跟踪
  • 以太坊私有网络的设置与体验

    记录一下搭建一个以太坊私有网络环境的过程 方便以后的开发 我这里采用的是Geth客户端 在geth ethereum org网站上有详细的文档介绍 这里主要是按照官网的教程来操作 安装 我是Ubuntu的环境 执行以下命令来安装 sudo
  • 使用hydra进行FTP认证破解

    hydra入门 hydra是什么 hydra的安装 hydra的基本使用 熟悉常见协议 HTTP协议 FTP协议 SSH协议 Telnet协议 熟悉hydra的参数 基本参数 高级参数 使用方法 使用hydra进行HTTP认证破解 HTTP
  • 搭建机器人电控系统——通信协议——串口通信USART/UART、RS232、RS485及其实例

    通信协议 串口通信详解 IIC通信详解 SPI通信详解 CAN通信详解 文章目录 通信协议 什么是串口 串口分类 USART UART RS232 RS485的区别 串口协议原理 传输协议 需要定义的参数 发送函数USART SendDat