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驱动开发(一)--串口原理与开发实践 的相关文章

  • STM32 F072上的软件如何跳转到bootloader(DFU模式)?

    STM32应用笔记2606对此进行了讨论 但没有简单的代码示例 该答案已使用 IAR EWARM 在 STM32F072 Nucleo 板上进行了测试 这个答案使用 STM32标准外设库 仅此而已 请注意 验证您是否成功进入引导加载程序模式
  • CMSIS 库是否应该包含在版本控制中? [复制]

    这个问题在这里已经有答案了 通常 我曾经在版本控制中包含芯片供应商 ST 提供的设备特定标头和源以及 CMSIS Core 标头 数量不多 也没有更新的习惯 我使用STM32微控制器 但我不使用立方体框架 or the 标准外设库 最近 我
  • 140-基于stm32单片机智能晾衣杆控制系统Proteus仿真+源程序

    资料编号 140 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 光敏传感器 蜂鸣器 LED灯 制作一个基于stm32单片机智能晾衣杆控制系统Proteus仿真 2 通过光敏传感器
  • 135-基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真+源程序

    资料编号 135 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 电机 超声波传感器 制作一个基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真 2 通过DHT11传感器检测当前
  • rt-thread studio中新建5.02版本报错

    先吐槽一下 rt thread studio出现BUG真多 好多时间都是在找BUG 但里面用好多控件还是挺好用的 真是又爱又恨 所以一般使用功能不多的话还是用keil多一点 创建5 02版本工程之后直接进行编译 直接会报下面这个错误 资源
  • Push_back() 导致程序在进入 main() 之前停止

    我正在为我的 STM32F3 Discovery 板使用 C 进行开发 并使用 std deque 作为队列 在尝试调试我的代码 直接在带有 ST link 的设备上或在模拟器中 后 代码最终在 main 中输入我的代码之前在断点处停止 然
  • STM32F103

    提示 来源正点原子 参考STM32F103 战舰开发指南V1 3PDF资料 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 开发环境硬件普中科技 接线图在g
  • STM32超声波——HC_SR04

    文章目录 一 超声波图片 二 时序图 三 超声波流程 四 单位换算 五 取余计算 六 换算距离 七 超声波代码 一 超声波图片 测量距离 2cm 400cm 二 时序图 1 以下时序图要先提供一个至少10us的脉冲触发信号 告诉单片机我准备
  • 毕业设计 江科大STM32的智能温室控制蓝牙声光报警APP系统设计

    基于STM32的智能温室控制蓝牙声光报警APP系统设计 1 项目简介 1 1 系统构成 1 2 系统功能 2 部分电路设计 2 1 stm32f103c8t6单片机最小系统电路设计 2 2 LCD1602液晶显示电路设计 2 2 风
  • linux应用程序直接return与exit的区别

    在Linux应用程序中 可以使用 return 语句直接从 main 函数返回 这将导致程序终止并返回给操作系统 然而 有时候使用 exit 函数比直接使用 return 语句更有优势 以下是一些原因 清理资源 exit 函数可以确保在程序
  • STM32 GPIO工作原理详解

    STM32 GPIO介绍 1 STM32引脚说明 GPIO是通用输入 输出端口的简称 是STM32可控制的引脚 GPIO的引脚与外部硬件设备连接 可实现与外部通讯 控制外部硬件或者采集外部硬件数据的功能 以STM32F103ZET6芯片为例
  • SHT10温湿度传感器——STM32驱动

    实验效果 硬件外观 接线 3 3V供电 IIC通讯 代码获取 查看下方 END
  • [MM32硬件]搭建灵动微MM32G0001A6T的简易开发环境

    作为学习单片机的经典 自然是通过GPIO点亮LED 或者是响应按钮的外部中断例程 这我们看看SOP8封装的芯片MM32G0001A6T得引脚 除了VDD和GND固定外 我们可以使用PA14 PA1 PA13 PA15 PA2 PA3这六个G
  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • STM32H5 Nucleo-144 board开箱

    文章目录 开发板资料下载 目标 点亮LD1 绿 LD2 黄 和LD3 红 三个LED灯 开箱过程 博主使用的是STM32CubeMX配置生成代码 具体操作如下 打开STM32CubeMX File gt New project 选择开发板型
  • 通过JTAG恢复STM32 MCU磨掉的标记

    我有一块可能带有 STM32 MCU 的板 我想为该板制作定制固件 因为库存板有很多问题 不幸的是 电路板制造商很友善地磨掉了所有标记 有没有办法通过 jtag 获取设备 系列 ID 并将其交叉引用到型号 我能找到的一切都是关于获取芯片的唯
  • STM32 上的 ADC 单次转换

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

    我对 STM32F7 设备 意法半导体的 Cortex M7 微控制器 上的时钟系统感到困惑 参考手册没有充分阐明这些时钟之间的差异 SYSCLK HCLK FCLK 参考手册中阅读章节 gt RCC 为 Cortex 系统定时器 SysT
  • STM32F0、ST-link v2、OpenOCD 0.9.0:打开失败

    我在用着发射台 http www ti com ww en launchpad about htmlgcc arm none eabi 4 9 2015q2 为 STM32F0 进行编译 现在我想使用该集合中的 arm none eabi

随机推荐

  • 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