MCU-串口通信协议

2023-10-27

MCU-串口通信协议

一、 介绍

串行通信就像单车道,所有数据得一个一个通行,并行就像多车道,一次可以通行多辆车。
在这里插入图片描述
MCU常用到的串口通信模块主要有两种:UART和USART。

UART:全称是Universal Asynchronous Receiver/Transmitte,即通用异步收发器。
USART:全称是Universal Synchronous/Asynchronous Receiver/Transmitter,即通用同步/异步收发器。

区别:
UART只支持异步收发,USART支持同步和异步收发。

串口通讯协议可以分成两层来理解,物理层和协议层。

物理层:约定双方连接的硬件接口,电平标准。
协议层:约定双方传输数据帧的格式,怎么打包,怎么解包。

二、 物理层

比较常见的有四种电气标准:TTLRS232RS422RS485

TTL RS232 RS422 RS485
信号类型 电平信号 电平信号 差分信号 差分信号
电压范围 03.3V或05.0V -15V~+15V -0.25V~+6V -7V~+12V
传输距离 1m 10m 1200m 1200m
传输模式 全双工,点对点 全双工,点对点 全双工,点对点 半双工,多对多
最大传输速率 100Kb/s 100Kb/s 10Mb/s 10Mb/s

单工:只允许单向通信
半双工:同一时刻只允许单向通信,也就是在发送时无法接收数据
全双工:同一时刻允许双向通信,也就是在发送时也可以接收数据

三、协议层

不管物理层用哪种标准,只要使用异步收发,通讯的数据帧格式都是相同的,由以下四部分组成:起始位、数据位、校验位和停止位。
在这里插入图片描述

  • 起始位

    数据帧的起始信号由1个逻辑 0 的数据位表示。

  • 数据位

    在数据帧的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为 5、6、7 或8位长。

  • 校验位

    在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验(odd)、偶校验(even)、0校验(space)、1校验(mark)以及无校验(noparity)。

    奇校验要求有效数据和校验位中 1 的个数为奇数,比如一个8位长的有效数据为:01101001,此时总共有 4 个 1 ,为达到奇校验效果,校验位为 1 ,最后传输的数据将是8位的有效数据加上1位的校验位总共9位。

    偶校验与奇校验要求刚好相反,要求帧数据和校验位中 1 的个数为偶数,比如数据帧:11001010,此时数据帧 1 的个数为4个,所以偶校验位为 0

    0 校验是不管有效数据中的内容是什么,校验位总为 0 ,1校验是校验位总为 1

  • 停止位

    数据帧的停止信号可由 0.5、1、1.5 或2个逻辑1的数据位表示,只要双方约定一致即可。

通信耗时计算:
假设波特率为9600,8位数据位,无校验位,1位停止位。

那么传输100个字节的数据需要多长时间?
已知一个字节由8的比特组成,传输一个字节只需要一个数据帧=1个起始位+8个数据位+0个校验位+1个停止位=10bit
波特率为9600,即传输一个bit需要1/9600s
总时间 = 1/9600 * 10 * 100 = 0.10417s

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

MCU-串口通信协议 的相关文章

  • 串口接收数据分包问题处理(QT上位机/单片机等)

    串口数据出现分包如何正确完整接收 提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 设计思路 二 代码参考 总结 前言 串口通信在QT上位机以及单片机或者安卓串口等使用情况下 经常容易出现一包数据分成几包
  • qt5.10 串口通信 QSerialPort 的使用

    在qt5中 使用QSerialPort进行串口通信 主要用到的QSerialPort 使用步骤 步骤一 在 pro文件中进行声明 QT serialport 在 pro文件中添加这个声明 步骤二 实例化 QSrerialPort QSeri
  • RTT-信号量

    RTT 信号量 概念 信号量就是一个标记位 释放信号量就是标记位加一 获取信号量后自动减一 减到0后不能再获取了 信号量 Semaphore 是一种实现线程间通信的机制 实现线程之间同步或临界资源的互斥访问 常用于协助一组相互竞争的线程来访
  • ESP32-C3入门教程 基础篇(三、UART模块 — 与Enocean无线模块串口通信)

    测试第三课 ESP32 C3的串口通信测试 老样子 使用Enocean无线模块和ESP32 C3进行串口通信 目录 前言 1 UART示例测试 1 1 UART 基础测试 1 2 与Enocean无线模块串口通信测试 2 ESP32 C3
  • CSerialPort教程4.3.x (5) - CSerialPort在cmake中的使用

    CSerialPort教程4 3 x 5 CSerialPort在cmake中的使用 环境 系统 windows 10 64位 QT 5 12 9 5 9及以上版本支持cmake构建 MFC vs2008 前言 CSerialPort项目是
  • 串口的单线半双工模式(stm32f10x系列)

    关注 星标公众号 及时获取更多技术分享 作者 冰茶奥利奥 微信公众号 嵌入式电子创客街 这两天折腾CTS RTS硬件流控 看到说232协议的CTS RTS只是用来做半双工换向使用的 正好手头上有块stm32的板子 看了看stm32的Usar
  • 小记stm32实现串口接收的四种方法(hal库)

    开发环境 STM32CUBMX 正点原子STM32F407ZGT6探索者开发板 MDK ARM 5 31 第一种方式 直接接收 配置外部时钟源 2 配置时钟树 3 配置串口一 生产代码后进入工程 重定向printf到串口1 建议在usart
  • Java串口通信-JSerialComm

    Java串口通信 JSerialComm 目前网上的Java串口通信主要使用RXTXComm 但是这个库已经很久没有更新 最近的更新似乎在2012年 并且与JavaFX集成打包时会出现BUG JSerialComm是一个较新的串口通信库 其
  • STM32F103-定时器

    STM32F103系列的单片机一共有11个定时器 其中 1个系统嘀嗒定时器 2个看门狗定时器 2个基本定时器 TIM6和TIM7 4个通用定时器 TIM2 TIM5 2个高级定时器 TIM1和TIM8 基本定时器 TIM6和TIM7 只具有
  • 树莓派Pico入手

    树莓派Pico入手 树莓派 Pico 中文站 一 介绍 1 1 价格 开发板 19 00 1 2 型号 目前主要有两个型号 Pico 基础版 Pico W 板载WIFI芯片 H的是指给你焊好排针 1 3 性能 核心 双核 Arm Corte
  • USB转串口那些事儿—USB转串口工作原理及应用

    一 简介 USB转串口即实现计算机USB接口到物理串口之间的转换 可以为没有串口的计算机或其他USB主机增加串口 使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备 USB虚拟串口应用特点 USB应用广泛 支持热插拔 传输速
  • 【Python】PyCharm中调用另一个文件的函数或类

    欢迎来到Python专栏 PyCharm中调用另一个文件的函数或类 o o 嗨 我是小夏与酒 博客主页 小夏与酒的博客 该系列文章专栏 Python学习专栏 文章作者技术和水平有限 如果文中出现错误 希望大家能指正 欢迎大家关注 目录 Py
  • Python:简易的串口收发程序

    Python 简易的串口收发程序 更新历史 20201204 首次发布 最近需要搞一个基于Python的串口程序 要求 能够将字符串形式的十六进制数 例如 12 34 CD EF 转化成对应的二进制数据后发送给一个串口设备 能够从串口设备接
  • 数字电路的时钟(1)-- 时钟抖动和分类

    时钟抖动通常分为时间间隔误差 Time Interval Error 简称TIE 又叫相位抖动 周期抖动 Period Jitter 和相邻周期抖动 cycle to cycle jitter 三种抖动 TIE又称为phase jitter
  • Android Things:连接到串行调试控制台

    我一直在尝试连接到串行控制台树莓派 3 with 安卓事物 using USB to TTL cable从我的Linux Ubuntu 机器 尽管我按照文档连接了电缆 但执行时我得到的只是minicom命令如下 with 没有机会输入任何字
  • 启用 DMA 的 UART Tx 模式

    我已经为 UART 在传输模式下编写了一个简单的设备驱动程序 并启用了 DMA 和中断 我使用的硬件是 omap 4460 pandaboard 其中加载了 Linux 3 4 下面我分享一下相关部分的代码 在开放阶段 dma map io
  • 英特尔伽利略裸机 UART

    我想编写一些 hello world 程序裸机申请于英特尔伽利略木板 当然 使用 UEFI 打印文本 到 UART 1 效果很好 但我想 手动 访问 UART 而不需要 UEFI 的任何帮助 在 QEMU 中我的代码运行良好 h file
  • C语言UART通信(十六进制)

    我想向写入函数发送一个十六进制值 例如 0 90 这是因为需要通信的设备接收到的是十六进制数的命令 未使用的变量在测试时出现 并注释为丢失十六进制值 稍后将被删除 如何编写具有字符串以外的十六进制值的写入函数 对于初学者 请告诉我们如何通过
  • STM32 上的 ADC 单次转换

    我正在研究 STM32 F103x 上的 ADC 编程 并从最简单的情况 单次转换开始 测量内部温度传感器 连接到 ADC1 的值 并使用 USART 将其发送到 COM 端口 目标似乎很明确 但是当我尝试将源代码下载到闪存时 它不会向 C
  • 如何检测来自 QNX 中 ncurses 的屏幕调整大小事件?

    我无法配置为接收有关使用 ncurses QNX Momentics 更改终端大小的事件 我使用Putyy作为终端 通过COM端口传输数据 我的问题是如何实现使用远程终端时接收屏幕变化事件 FILE fcons fopen dev ser1

随机推荐

  • python Matplotlib库基础

    目录 Matplotlib 数据可视化入门 Pyplot 绘图 自定义配置文件 rcParams 创建绘图窗口 绘制子图 绘制饼图 绘制折线图 绘制条形图 绘制散点图 绘制热点图 绘制箱型图 绘制分类图背景 显示绘图窗口 DataFrame
  • FATFS文件系统f_mkfs函数详解

    1 f mkfs参数 参数path 要挂载 卸载的逻辑驱动器号 使用设备根路径表示 参数opt 系统的格式 如图所示 若需要格式化为FAT32文件系统 则选择FM FAT32即可 若需要格式化为exFAT文件系统 则应该开将宏定义 defi
  • kNN做回归任务

    kNN回归 kNN常用作分类任务 但是也可以做回归任务 做法 使用kNN计算某个数据点的预测值时 模型会从训练数据集中选择离该数据点最近的k个数据点 并且把他们的y值取均值 把该均值作为新数据点的预测值 代码 此次代码演示使用数据库中的鸢尾
  • AI业务强劲增长,百度迎来了“推卒过河”的纵横时刻

    文 螳螂观察 作者 陈淼 科技创新面临的处境与机遇大多与中国象棋中的 卒 相似 单次只能走一步 不像其他棋子一次能走多步 然而一旦 推卒过河 卒 就可纵可横 能发挥出极大的作用 因此 也就有了 过河走卒胜似车 的谚语 这种境遇像极了今天在人
  • linux下执行shell脚本报“ $'\r':command not found…”错误

    1 现象 在linux下执行脚本有时会出现错误如下 r command not found 2 原因分析 脚本本身却没有错误 是由于脚本在windows下打开过编辑过 因为在windows下的换行是回车 换行 r n 而在linux下的换行
  • BeautifulSoup解析通过js生成内容的本地html文件

    问题 当本地html文件中的元素都是由js生成时 我们无法通过beautifulsoup进行解析 思路 1 通过webdriver的无头浏览器 不在桌面打开浏览器的情况下 通过浏览器引擎加载html文件 2 获取浏览器的页面资源 3 将资源
  • 命名Java变量

    Java变量的命名规则 在面向对象编程中 对于包 类 方法和常量的命名都是有规则的 例如 英文大小写的区分 1 包的命名 包的命名都是由小写字母组成 为了保障每个Java包命名的唯一性 应在自己定义的包的名称前加上唯一的前缀 例如 edu
  • java solr功能代码

    package com wlsq search center util import org apache solr client solrj SolrQuery import org apache solr client solrj im
  • 《数据结构》02-线性结构3 Reversing Linked List

    题目 Given a constant K and a singly linked list L you are supposed to reverse the links of every K elements on L For exam
  • dns备用服务器信息,dns服务器地址(dns首选和备用填多少)

    dns服务器地址 DNS是计算机域名体系 DomainNameSystem或DomainNameService 的缩写 它是由解析器以及域名服务器组成的 域名服务器是指保存有该网络中所有主机的域名和对应IP地址 并具有将域名转换为IP地址功
  • CocosCreator Java传参数到JS

    最近正在接GooglePlay内购 在传参数回CocosCreator的环境的时候 没有调用到JS的方法 其中错误的写法是 app runOnGLThread new Runnable Override public void run Co
  • IPv6基础介绍

    IPv4理论上仅仅能够提供的地址数量是43亿 但是由于地址分配机制等原因 实际可使用的数量还远远达不到43亿 因特网的迅猛发展令人始料未及 同时也带来了地址短缺的问题 针对这一问题 曾先后出现过几种解决方案 比如CIDR和NAT 但是CID
  • npm ERR! Log files were not written due to an error writing to the directory: D:\Program Files (x86)

    配置前端环境报错 之前配置过vue环境 现在再次使用时报错 解决 第一步 删除C Users 用户 下的 npmrc文件 我的是已经删除过了 第二步 在dos命令下输入 npm cache clean force 第三步 然后再输入命令 n
  • QT中QString字符串的大小写转换函数

    str toLower 转换为小写 str toUpper 转换为大写
  • 图解 JavaScript——代码实现(六种异步方案, 重点是 Promise、Async、发布 / 订阅原理实现,真香)

    图解 JavaScript 代码实现 六种异步方案 重点是 Promise Async 发布 订阅原理实现 真香 本节主要阐述六种异步方案 回调函数 事件监听 发布 订阅 Promise Generator和Async 其中重点是发布 订阅
  • 编写Spring MVC控制器的14个技巧

    通常 在Spring MVC中 我们编写一个控制器类来处理来自客户端的请求 然后 控制器调用业务类来处理与业务相关的任务 然后将客户端重定向到逻辑视图名称 该名称由Spring的调度程序Servlet解析 以呈现结果或输出 这样就完成了典型
  • Python: 向下取整规则解释带有负号的除取整(//)和除取余(%)

    1 Python 中的 结果向下取整 例如 print 7 3 2 3333333 向下取整为 2 print 7 3 2 333333 向下取整为 3 print 7 3 2 333333 向下取整为 3 print 3 7 0 42 向
  • linux sed命令详解

    简介 sed 是一种在线编辑器 它一次处理一行内容 处理时 把当前处理的行存储在临时缓冲区中 称为 模式空间 pattern space 接着用sed命令处理缓冲区中的内容 处理完成后 把缓冲区的内容送往屏幕 接着处理下一行 这样不断重复
  • wireshark的usb抓包分析 1 - 抓取数据

    wireshark的版本为Version 3 2 4 v3 2 4 0 g893b5a5e1e3e 操作系统为Win10 64bit 安装过程要注意的是 有一步需要选择安装USBpcap 不装这个没法抓USB包 安装完成后需要重启电脑 1
  • MCU-串口通信协议

    MCU 串口通信协议 一 介绍 串行通信就像单车道 所有数据得一个一个通行 并行就像多车道 一次可以通行多辆车 MCU常用到的串口通信模块主要有两种 UART和USART UART 全称是Universal Asynchronous Rec