当前位置: 首页 > news >正文

【嵌入式开发】UART

目录

一、概述

1.1 常见的通信类别/特点

1.2 常见几种通信

二、UART通信协议

2.1 UART通信介绍

2.2 UART通信协议

物理连接示意图:

三、STM32的UART接口

3.1 STM32的UART特点

3.2 STM32的UART框图分析

3.3 UART初始化步骤

3.4 STM32中UART使用


一、概述

        通信时需要关注 总线构成(硬件) 和 通信协议(软件)。

1.1 常见的通信类别/特点

        同步:指的是通信双方步调一致,一般需要通过时钟线连接双方的时钟。

        一方作为主机控制时钟(控制通信速度),另一方作为从机接收时钟。

        异步:通信双方的时钟是彼此独立的(也没有时钟线连接),一般需要使通信双方达到相同的速度。  即规定双方的波特率(bits / s)一致。

        串行:数据线只有1或2根,每次只能传输1位数据。

并行:数据线一般有8或16,每次可以传输多位数据。

        半双工:通信双方均可以给对方发送数据,但同一时间只能一方发送、另一方接收。

一般是因为数据线只有一组,所以同一时间,只有一方控制数据线。

        全双工:通信双方可以同时给对方发送数据,并同时接收对方发送的数据。一般是

        因为有多组数据线,所以同一时间,双方都可以控制自己发送数据的那组线。

1.2 常见几种通信

结合总线构成,判断其特点:

UART: Tx , Rx 异步、串行、全双工

IIC:  SCL , SDA 同步、串行、半双工

SPI:  SCK , MOSI , MISO 同步、串行、全双工

二、UART通信协议

2.1 UART通信介绍

        通用异步收发器UART(Universal Asynchronous Receiver/Transmitter),是一种串行、异步、全双工的通信协议,在嵌入式领域应用的非常广泛。

        一般将UART通信描述为异步串行通信,即串口通信,包括RS232、RS485、RS422、TTL等。 以上这些都属于串口通信,其区别是电平规范、硬件实现不同。

        所以若两个设备实现串口通信,但是由于硬件原因,使用了不同的电平规范,则需要在通信中使用电平转换芯片。例如有CH340芯片(TTL和USB电平转换),用于STM32芯片和电脑进行串口通信。

2.2 UART通信协议

        UART作为异步串行通信协议的一种,工作原理是将传输数据的每个二进制位一位接一位地传输。在UART通信协议中,信号线上的状态为高电平时代表‘1’,信号线上的状态为低电平时代表‘0’。由于异步通信两个uart设备之间通信的时候时钟线,这时候就需要在两个uart设备上指定相同的传输速率,以及空闲位、起始位、校验位、结束位,也就是遵循相同的协议。

        通信速度:双方一致即可,单片机中常用波特率 1200、2400、4800、9600、19200、38400、115200

        常用波特率一般有以下特点:能够用单片机波特率生成器生成,误差率小;在能接受的误差范围内,波特率较大。

        数据帧格式:一帧数据构成, 1位起始位 + 5~8位数据位 + 0~1位校验位 + 0.5/1/1.5/2位停止位

        起始位:1位低电平,标志一帧数据开始

        数据位:5~8位,传输的有效数据

        校验位:0~1位,无校验/奇校验/偶校验(数据位和校验位中逻辑’1’个数)

        停止位:0.5/1/1.5/2位高电平,标志一帧数据结束

        通信双方对一帧数据的规定必须一致。

        传输数据方向:先传送数据低位,一对一通信。

物理连接示意图

三、STM32的UART接口

3.1 STM32的UART特点

● 全双工异步通信

● 发送器和接收器具有单独使能位

● 传输检测标志:(标志一般对应外设寄存器中的某个位,通过这个位的状态 检测外设工作状态)

— 接收缓冲区已满

— 发送缓冲区为空

— 传输结束标志

● 奇偶校验控制:

— 发送奇偶校验位

— 检查接收的数据字节的奇偶性

● 十个具有标志位的中断源:

— CTS 变化

— LIN 停止符号检测

— 发送数据寄存器为空

— 发送完成

— 接收数据寄存器已满

— 接收到线路空闲

— 溢出错误

— 帧错误

— 噪声错误

— 奇偶校验错误

3.2 STM32的UART框图分析

3.3 UART初始化步骤

        1、将使用到GPIO引脚复用为相应的UART的Tx和Rx(引脚初始化)

        2、UART外设初始化(激活UART、数据帧设置、发送/接收器使能、UART使能),在stm32f4xx_rcc.c , stm32f4xx_gpio.c , stm32f4xx_usart.c 找到实现以上功能的函数

3.4 STM32中UART使用

        通过对数据寄存器进行写操作,控制发送的内容。当接收数据后,通过对数据寄存器及逆行读操作,读出接收的内容。发送和接收控制使能是独立的,但是发送和接收的速度是一致的实现UART通信时,也会有GPIO配置【GPIO是芯片和外界数据交流的唯一通道】由于此时相应的GPIO引脚需要作为另一片上外设UART的发送/接收引脚(Tx/Rx),故将相应的引脚配置为复用模式,且将之具体复用为相应UART的Tx和Rx。

注意:串口助手的设置,如波特率、停止位、数据位、校验位等,必须要和STM32程序中设置匹配。

相关文章:

  • grpc代理服务的实现(一)
  • 硬引用、软引用、弱引用、虚引用和原子引用
  • 架构风格-系统架构师(十五
  • Pipeline知识小记
  • 复分析——第6章—— Γ 函数和 ζ 函数(E.M. Stein R. Shakarchi)
  • PCL 点云RANSAC+SVD提取平面
  • 一文了解HarmonyOSNEXT发布重点内容
  • ubuntu22.04安装onlyoffice社区版
  • React-配置json-server
  • 认识和使用 Vite 环境变量配置,优化定制化开发体验
  • 鸿蒙NEXT开发中的知识:构建自己的ArkTS应用工程(Stage模型)
  • Redis面试题自测
  • leetcode34:在排序数组中查找元素的第一个和最后一个位置
  • JMeter的基本使用与性能测试,完整入门篇保姆式教程
  • Stable Diffusion 3 大模型文生图“开源英雄”笔记本部署和使用教程,轻松实现AI绘图自由
  • 网络传输文件的问题
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Druid 在有赞的实践
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Java程序员幽默爆笑锦集
  • Laravel5.4 Queues队列学习
  • Linux快速复制或删除大量小文件
  • Node项目之评分系统(二)- 数据库设计
  • OSS Web直传 (文件图片)
  • Rancher如何对接Ceph-RBD块存储
  • Redux系列x:源码分析
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 大整数乘法-表格法
  • 复杂数据处理
  • 前端知识点整理(待续)
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 收藏好这篇,别再只说“数据劫持”了
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 为视图添加丝滑的水波纹
  •  一套莫尔斯电报听写、翻译系统
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • $GOPATH/go.mod exists but should not goland
  • (12)Linux 常见的三种进程状态
  • (Python第六天)文件处理
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (篇九)MySQL常用内置函数
  • (四)JPA - JQPL 实现增删改查
  • (转)EOS中账户、钱包和密钥的关系
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions