【嵌入式开发】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程序中设置匹配。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/731508.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录第30天|贪心算法

122.买卖股票的最佳时机II 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。 在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。 返回 你能获得…

Java项目:基于SSM框架实现的绿色农产品推广应用网站果蔬商城水果商城蔬菜商城【ssm+B/S架构+源码+数据库+答辩PPT+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的绿色农产品推广应用网站果蔬商城水果商城蔬菜商城 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能…

kettle无法启动问题_PENTAHO_JAVA_HOME

1,遇到spoon.bat启动报错:先增加pause看清错误信息 1.1,错误信息 1.2,因为本地安装jdk1.6无法支持现有版本kettle。只能手动执行kettle调用的java路径;如下 系统--高级系统设置--高级--环境变量 启动成功

【CMake】CMake从入门到实战系列(十七)—— CMake添加环境检查

🔥博客简介:开了几个专栏,针对 Linux 和 rtos 系统,嵌入式开发和音视频开发,结合多年工作经验,跟大家分享交流嵌入式软硬件技术、音视频技术的干货。   ✍️系列专栏:C/C、Linux、rtos、嵌入式…

【无线传感网】LEACH路由算法

1、LEACH路由算法简介 LEACH协议,全称是“低功耗自适应集簇分层型协议” (Low Energy Adaptive Clustering Hierarchy),是一种无线传感器网络路由协议。基于LEACH协议的算法,称为LEACH算法。 2、LEACH路由算法的基本思想 LEACH路由协议与以往的路由协议的不同之处在于其改变…

C#.net6.0语言+前端Vue,Ant-Design开发的智慧医院手术室麻醉管理平台源码 什么是手术麻醉临床信息管理系统?

C#.net6.0语言前端Vue,Ant-Design开发的智慧医院手术室麻醉管理平台源码 什么是手术麻醉临床信息管理系统? 手术麻醉临床信息管理系统涵盖了手术进程管理、自动排班、手术记录、术前评估与麻醉记录等功能,强调了系统如何通过技术架构和数据集成提高工作…

python代码生成可执行文件

以下面转换图片尺寸的代码resize_images.py为例: 代码功能:原始图片放在img文件夹中,然后运行代码可以转换成指定分辨率,保存在同一目录下的新生成的文件夹中 import os import sys import cv2 from datetime import datetime f…

第4集《大乘起信论》

请大家打开《讲义》第七页。 解释标题有别释跟合释,在合释当中又分两科。第一个明心,先明白我们内在的种性,这个种性就会产生不同的业力、不同的果报。在明白这个道理以后,我们应该怎么去扭转这个种性呢?就讲到修学的…

贝锐蒲公英异地组网方案:实现制药设备远程监控、远程运维

公司业务涉及放射性药品的生产与销售,在全国各地拥有20多个分公司。由于药品的特殊性,在日常生产过程中,需要符合药品监管规范要求,对各个分部的气相、液相设备及打印机等进行监管,了解其运行数据及工作情况。 为满足这…

MobileNet系列论文阅读笔记(MobileNetV1、MobileNetV2和MobileNetV3)

目录 引言MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications摘要Prior Work -- 先前工作MobileNet Architecture— MobileNet结构Depthwise Separable Convolution—深度可分离卷积Network Structure -- 网络结构 总结 MobileNetV2: Invert…

19 Shell编程之条件语句

目录 19.1 条件测试操作 19.1.1 文件测试 19.1.1 整数值比较 19.1.3 字符串比较 19.1.4 逻辑测试 19.2 if条件语句 19.2.1 if语句的结构 19.2.2 if语句应用示例 19.3 case分支语句 19.3.1 case语句的结构 19.3.2 case语句应用示例 19.1 条件测试操作 Shell环境根据命令执行后…

Javase.认识异常

认识异常 【本章目标】1. 异常的概念与体系结构1.1 异常的概念1.2 异常的体系结构1.3 异常的分类 2. 异常的处理2.1 防御式编程2.2 异常的抛出2.3 异常的捕获2.3.2 try-catch捕获并处理2.3.3 finally2.4 异常的处理流程 3. 自定义异常类 【本章目标】 异常概念与体系结构异常的…

日常工作中常用的管理工具

日常工作中常用的管理工具 SWOT分析法: 帮你清晰地把我全局,分析自己在资源方面的优势域劣势,把握环境提供的机会,防范可能存在的风险与威胁,对我们的成功有非常重要的意义 PDCA循环规则: 每一项工作&#…

安卓设备优雅的命令 adb 以及 优秀的控制 scrcpy

一、背景 如果有多台安卓设备,并为这些设备安装软件,一个个使用u盘再加上鼠标操作虽然可以做到,但是大概率比较麻烦。试想下,如果坐在电脑旁边,就能鼠标在电脑上点点就能解决问题,是多么优雅的一件事情。 …

Leetcode Hot100之双指针

1. 移动零 题目描述 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。解题思路 双指针遍历一遍即可解决: 我们定义了两个指针 i 和 j&#xf…

win10手动安装stable-diffusion-webui

目录 1.python下载安装 2.git下载安装 3.stable-diffusion-webui下载 4.安装s-d-webui的依赖包(用国内镜像提速) 5.git下载的stable-diffusion-webui,依赖包提示已安装,但运行webui-user.bat后,又开始下载 6.修…

LabVIEW项目管理中如何平衡成本、时间和质量

在LabVIEW项目管理中,平衡成本、时间和质量是实现项目成功的关键。通过制定详细的项目计划、合理分配资源、严格控制进度、进行质量保证和灵活应对变化,项目管理者可以有效地协调这三者的关系,确保项目按时、按质、按预算完成。 1. 制定详细…

向“黑公关”开战,比亚迪悬赏500万征集恶意诋毁线索

近日,比亚迪品牌及公关处总经理李云飞在微博发文,面向社会公开征集黑公关证据。 微博中,李云飞写道:“近期,我们收到多方提醒:某车企在使用黑公关手段,对我司品牌及产品进行贬低、拉踩和恶意诋…

[IMX6ULL驱动开发]-Linux对中断的处理(三)

前两篇文章主要是理论上的知识,此文章主要内容为代码上的编写以及思路等 [IMX6ULL驱动开发]-Linux对中断的处理(一) [IMX6ULL驱动开发]-Linux对中断的处理(二) 目录 设备树中的操作 中断控制器 设备树中使用中断 编程思路 设备树相关 驱动程序相关 设备树中的…

网页基础三剑客

目录 一、网页开发技术 1.HTML 2.CSS 3.JavaScript 二、网页的结构 三、 网页的分类 1.静态网页 2.动态网页 1.jQuery 2.AJAX 3.DHTML 2.3.4 网页数据的格式 1&#xf…