STM32驱动开发(一)--串口原理与开发实践

2023-05-16

STM32驱动开发(一)–串口原理与开发实践

  参考:野火嵌入式《STM32库开发实战指南》、韦东山《STM32MP157 M4 用户手册

一、简介
  在工业现场目前用的最多的对外通信就是串口(UART)通信和CAN通信。两种通信一样重要并且使用广泛,本文先介绍串口通信,后续介绍CAN通信。

二、概念
  2.1、串行通信与并行通信。
  串行通信一次只能传一位,并行通信一次可传多位数据。图片来源:韦东山《STM32MP157 M4 用户手册》
在这里插入图片描述

  串行通信优点:成本小,使用线少,后续发展的差分平衡信号传输技术,使得传输速度加快,同时不像并行传输一样,各线容易相互干扰。所以目前工业现场用的都是串行通信,也就是串口。

  2.2、串口按电平标准分类
  按电平标准,串口分为TTL、RS232、RS422\485标准,稳定性和传输距离依次增加,所以工业现场一般是用RS485标准(注:此三类标准指的都是串行异步通信)。MCU引脚支持的是TTL标准,要在不同电平标准的串口之间通信,需要使用相应的电平转换芯片。其电平标准如下:图片来源:韦东山《STM32MP157 M4 用户手册》
在这里插入图片描述

由表可见,
  1TTL电平标准适配MCU芯片的芯片电压3.3V,所以不需要转换电路,节约电路,需要TX, RX, GND三根通信线。用于厘米级别的短距离传输,一般用于调试口,例如调试烧录口或者打印log调试信息,不会用在工业现场长距离传输;
  2)从RS232开始,电压采用负逻辑。RS232为了增加传输距离,提高了电平(15V),因此需要加电平转换芯片,例如MA3232芯片,需要TX, RX, GND三根通信线。目前台式机一般默认带RS232串口,为DB9形态,在开发中可用此串口经过相应的转换电路,连接单板,与其进行串口通信。
  RS232也存在一定问题,比如电平过高(15V),增加烧坏电路的风险,依然使用共地线的方式,会产生共模干扰(电气概念,指接受双方的基准地不一致产生的干扰),所以传输距离仍然有限,最长15米,对于工业现场来说也是不够的。
  3RS485标准采用差分信号传输的方式,即检测的电平取决与A\B两线的电势差,因此去除了地线的共模干扰。所以RS485只需要A\B两根信号线传输。
  RS485与前两种电平的最大差异是采用差分信号的方式,一个位的信号传输需要两根线共同作用,不像TTL,RS232一根线负责一种传输。因此同一时间只能处于收或者发的一个状态,需要芯片引出一个控制引脚,控制处于收还是发的状态。这叫半双工。TTL和RS232标准属于全双工目前工业现场用的最多的串口标准是RS485标准。

  2.3、不同电平标准对驱动编程的差异
  TTL和RS232标准,在驱动编程上无差异,由外部的硬件转换芯片做电路转换即可。对于芯片来说,对应TX,RX两个引脚即可
  RS485和前两种标准,在驱动编程上有差异,除了芯片的A\B两个串口引脚外,还需要一个GPIO控制引脚需要编程者在收发过程中手动调用),外接到RS485转换芯片上,控制当前处于收还是发状态。芯片的三个引脚如下图的左边:图片来源:韦东山《STM32MP157 M4 用户手册》
在这里插入图片描述
  因此,TTL和RS232标准的串口,芯片上对应两个收发引脚,而对于RS485标准的串口来说,除了A\B两个引脚之外,还需要GIOP控制引脚,一共三个引脚。后续引入MODBUS协议的编程实例来说明RS485的编程和TTL的差异。

  2.4、串口通信协议层定义
  上面的概念介绍的是串口通信物理层(电气特性)的定义,现在介绍串口通信的协议层定义。
  协议层定义包含:波特率、起始位、有效数据位、校验位、停止位。
  通常的包定义为:一个起始位(逻辑0),八个数据位,零个校验位,一个停止位(逻辑1)。所以对于串口传输,每传输10个位的内容,就有8个位为有效数据(传输效率 4/5)。每个包传输一个字节(8位)。若配置了需要校验,则每个包包含11个位(传输效率 8/11)。
在这里插入图片描述

  协议层带校验位,可以配置为奇(数据位+校验位中1的个数为奇数)、偶(数据位+校验位中1的个数为偶数)、0(校验位填0)、1(校验位填1)、无校验(不发送校验位)五种方式。串口通信通常在应用层对一帧进行CRC校验,为了提高整体传输效率不对每个包进行校验。

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

STM32驱动开发(一)--串口原理与开发实践 的相关文章

  • ROS当中TF坐标系是怎么发布和管理的

    一 ROS坐标系的发布 千言万语离不开一句话tfBroadcaster sendTransform odomTrans 1 其中tfBroadcaster为专门用来发布广播的对象 需要进行这样的声明tf TransformBroadcast

随机推荐

  • open-embeded meta-ros

    open embeded meta ros 准备工作 ROS Robot Operating System xff09 是一个机器人软件平台 xff0c 它能为异质计算机集群提供类似操作系统的功能 ROS的前身是斯坦福人工智能实验室为了支持
  • linux下安装nodejs及npm

    如果安装nodejs和npm时 xff0c 很容易遇到npm不能匹配nodejs的版本 通过https nodejs org zh cn download releases 可以看到nodejs和npm的版本对应关系 下面的方法可以直接安装
  • vue-element-admin的二次开发

    最近也是完成了公司招聘管理系统后台的前端开发 xff0c 项目已经开始测试了近期估计就会交付使用 一直是一个人在做 xff0c 配合两个后端 xff0c 说实话这种从很多不会到一个个独立debug解决问题到最后终于完成项目的感觉真的太有成就
  • 烧写APM板的bootloader

    所需工具材料 xff1a 1 一个AVRusbasp编程器以及相应的烧写软件 xff0c 推荐progisp1 72下载链接https download csdn net download sky7723 12477620 2 AVR的US
  • APM_V2.8.0的改进说明

    APM V2 8 0版基于3DR公司出的V2 5 2版优化设计而来 xff0c 硬件功能跟V2 5 2一样 xff0c 尺寸也一样 xff0c 仍旧可以使用2 52版的外壳 不同的是V2 8 0版针对内部电路设计BUG做了改进 xff0c
  • Ardupliot飞控PID等参数加密屏蔽方法(针对Mission Planner的刷新参数等功能)

    当辛辛苦苦调试OK的参数 xff0c 被别人连上飞地面站后轻松获取 xff0c 是不是有点难受 xff1f 本文针对四旋翼Copter4 0 7和 xff08 4 1 5 xff09 最新版本调试了两个加密方法 4 0 7固件 在对4 0
  • ROS省略source devel/setup.bash的方法

    为了不每次运行程序的时候都source一次devel文件夹里的setup bash xff0c 可以打开主目录 按下Crtl 43 h 显示隐藏文件 xff0c 双击打开bashrc文件 xff0c 在最后加入 source home ca
  • 浅谈prometheus(普罗米修斯) client golang

    浅谈prometheus client golang 含类型精讲 43 接口示例 43 源码节选 Prometheus xff1a prometheus是什么 xff0c 网上已经有很多文章了 xff0c prometheus的部署和启动可
  • Git中submodule的使用

    背景 面对比较复杂的项目 xff0c 我们有可能会将代码根据功能拆解成不同的子模块 主项目对子模块有依赖关系 xff0c 却又并不关心子模块的内部开发流程细节 这种情况下 xff0c 通常不会把所有源码都放在同一个 Git 仓库中 有一种比
  • 测控系统中上位机开发小节

    对测控系统中上位机开发小节 关键字即内容 xff1a 工业控制 xff0c 测量控制 xff0c 上位机 xff0c 下位机 通讯协议 xff0c tcpip rs232 rs485 报警状态 xff0c 控制开关 xff0c 采集数据 x
  • Remmina:一个 Linux 下功能丰富的远程桌面共享工具

    转自 https linux cn article 8493 1 html Remmina 是一款在 Linux 和其他类 Unix 系统下的自由开源 功能丰富 强大的远程桌面客户端 xff0c 它用 GTK 43 3 编写而成 它适用于那
  • 个人简历

    大家好 xff1a 本人系重庆大学2003级硕士研究生 xff0c 将于2006年7月毕业 相关技能 xff1a 1 计算机 xff1a 熟悉计算机软 硬件体系结构 xff0c 了解计算机接口技术 xff1b 熟悉C 43 43 汇编等语言
  • 游戏开发踩的那些坑:abs函数的平台差异

    转载请注明 xff0c 来自 xff1a http blog csdn net skyman 2001 我写了个弹性3D箭头功能 xff0c 指定起点 终点和圆弧的夹角 xff0c 就会渲染出弯曲的3D箭头 xff0c 里面用了abs函数计
  • 实时水墨渲染探究

    转载请注明 xff1a 来自http blog csdn net skyman 2001 xff0c by 吴俊 中国绘画源远流长 xff0c 有着丰富多彩的遗产 独特而鲜明的艺术特点 xff0c 在东方乃至世界都自成体系 xff0c 别具
  • ios platform 型号

    转载自 xff1a http hulefei29 iteye com blog 1701464 xfeff xfeff Platforms iFPGA gt iPhone1 1 gt iPhone 1G M68 iPhone1 2 gt i
  • fopen vs access vs stat

    xfeff xfeff 转载请注明 xff0c 来自 xff1a http blog csdn net skyman 2001 vs2010 win7 function call time fopen 1 149000 ms access
  • OpenGL运行库下载

    OpenGL运行库下载 可能有些同志遇到过这样的情况 xff1a 下载的OpenGL程序由于缺少一个或多个dll文件而不能运行 xff0c 这里是我搜集的常用的OpenGL运行dll库 xff0c 包括 xff1a opengl32 dll
  • OpenGL通过读取Z Buffer深度值将屏幕2D坐标转化为场景3D坐标(含完整源码)

    如需转载请注明出处 xff1a http blog csdn net skyman 2001 主要有2种方法来实现屏幕2D坐标转化为场景3D坐标 xff1a 一种是通过拣选射线 xff0c 我的 APRG Demo 就是这样做的 xff0c
  • gen_fsm中send_event和send_all_state_event的区别

    文档原文 xff1a The difference between send event and send all state event is which callback function is used to handle the e
  • STM32驱动开发(一)--串口原理与开发实践

    STM32驱动开发 xff08 一 xff09 串口原理与开发实践 参考 xff1a 野火嵌入式 STM32库开发实战指南 韦东山 STM32MP157 M4 用户手册 一 简介 在工业现场目前用的最多的对外通信就是串口 xff08 UAR