单片机(STM32-串口通信)

一、串口通信基础概念

串口通信(Serial Communication)是一种在计算机和外部设备之间进行数据传输的通信方式。它通过串行方式逐位传输数据,是最基本和常用的通信接口之一。

主要特点

1. 串行传输

(1)数据按位顺序传输,一次只能传输一位

(2)相比并行通信,串口通信使用更少的线路

(3)传输距离可以更远,抗干扰能力更强

2. 异步通信

(1)发送方和接收方使用独立的时钟

(2)通过起始位和停止位来同步数据

(3)不需要共享时钟信号

二、通信基础 

1.时钟信号划分

1.1通信方式

异步通信

无需时钟信号,数据通过起始位和停止位同步。

同步通信

需要时钟信号同步数据传输。

1.2传输方式

同步传输

(1)发送方和接收方使用相同的时钟

(2)数据传输效率高需要时钟同步机制

异步传输

(1)发送方和接收方使用独立的时钟

(2)通过起始位和停止位同步

(3)实现简单,但效率较低

(4)但是并不是说通信的过程不同步(UART)

2.数据传输方式

2.1通信方式

串行通信

使用串行传输的方式传输数据

并行通信

使用并行传输的方式传输数据

2.2传输方式

串行传输

(1)数据按位顺序传输

(2)只需要一条传输线

(3)传输距离远,成本低

(4)速度相对较慢

并行传输

(1)多位数据同时传输

(2)需要多条传输线

(3)传输距离短,成本高

(4)速度相对较快

3.通信方向划分

单工:要么收,要么发,只能做接收设备或者发送设备。比如收音机

一根信号线只能单向发送或单向接收

半双工:可以收,可以发,但是不能同时收发, 比如对讲机

一根信号线可以接收数据也可以发送数据,但是两者不能同时进行

全双工:可以在同一时刻既接收,又发送。 手机

两根信号线,一根发送数据,另一根接收数据,真正实现同时收发数据,速度快

4.常见通信总结

通信标准引脚说明通信方式通信方向
UART(通用异步收发器)TXD: 发送端<br>RXD: 接受端<br>GND: 公共地异步通信全双工
单总线(1-wire)DQ: 发送/接受端异步通信半双工
SPISCK: 同步时钟<br>MISO: 主机输入,从机输出<br>MOSI: 主机输出,从机输入<br>SS: 片选同步通信全双工
I2CSCL: 同步时钟<br>SDA: 数据输入/输出端同步通信半双工

 三、UART

1.通用同步/异步收发器

USART:通用同步/异步收发器是一种集成在微控制器或通信芯片中的硬件模块,它几支持同步通信,也支持异步 通信,但是在STM32中一般是同步

2.串口通信协议

2.1.概念

串口通信协议是一种数据逐位(bit)依次传输的通信方式,常用于点对点的短距离数据交换。

最常见的串口通信协议是RS-232、RS-485等。

2.2.基本特性

异步通信:无需专用时钟线,数据帧通过起始位和停止位同步。

全双工:可以同时进行收发(如UART)。

点对点:一般只连接两个设备。

2.3.基本属性

波特率:衡通信速度,表示美妙传送点bit的个数

数据位:表示通信中实际数据位的个数,一般是5、7、8位

起始、停止位:数据包从起始位开始,到停止位结束。停止位置在的典型的值为1,1.5和2位。

2.4.奇偶校验位:在串口通信中一种简单的检错方式(在每个数据字节后面增加1位校验位,用于检测数据在传输过程中是否发生了单比特错误。)

3.USART结构图

3.1.发送流程:

(1)CPU将数据写入USART_TDR
(2)硬件自动将TDR数据复制到移位寄存器
(3)移位寄存器逐位将数据发送到TX引脚

3.2.接收流程:

(1)数据到达RX引脚
(2)移位寄存器逐位收集数据
(3)数据完整后硬件自动转义至RDR

4.相关寄存器

4.1. 数据接收寄存器(Receive Data Register)

(1)作用:用于存放USART接收到的数据。

(2)工作原理:当USART模块收到一个字节的数据后,会自动将其存入数据接收寄存器。CPU可以从该寄存器读取数据。

(3)数据接收寄存器32位代表的含义:

4.2. 数据发送寄存器(Transmit Data Register)

(1)作用:用于存放即将通过USART发送的数据。

(2)工作原理:CPU将要发送的数据写入该寄存器,USART模块会自动将其发送出去。如图:

(3)数据发送寄存器32位代表的含义:

4.3. 中断和状态寄存器(Interrupt and Status Register)

(1)作用:用于指示USART的各种状态(如发送完成、接收完成、溢出、错误等),并控制中断的使能与响应。

(2)中断和状态寄存器32位代表的含义:

(3)常见标志位:

TXE(Transmit Data Register Empty):发送寄存器空,可以写新数据

RXNE(Read Data Register Not Empty):接收寄存器非空,有新数据可读

TC(Transmission Complete):发送完成

ORE(Overrun Error):溢出错误

(4)例如第七位是寄存是发送寄存器是否为空的状态:

4.4. 波特率寄存器(Baud Rate Register)

(1)作用:用于设置USART通信的波特率(即每秒传输的比特数)。

(2)波特率寄存器32位代表的含义:

4.5.总结

寄存器名称作用常见寄存器名典型操作
数据接收寄存器存放接收到的数据RDR读取数据
数据发送寄存器存放待发送的数据TDR写入数据
中断和状态寄存器状态指示和中断控制ISR判断状态/响应中断
波特率寄存器设置通信速率BRR设置波特率

五、实现串口通信

关键在于:通过寄存器实现输出数据,每一个代码

还有代码必须写在特定位置才行

1.一秒发送一字节数据

2.封装进函数可以直接调用输出

3.修改自写函数实现通信功能

打开连接串口,烧录程序后,复位后,串口就可以接收到数据。

六、ptintf重定向

int  printf(const char * format,...)

printf函数底层调用的是fputc函数,fputs是将要发送的数据写入到标准输出流stdout

int fputc(int /*c*/, FILE * /*stream*/) 

因此如果想让printf将数据输出到串口,需要重写fputc

1.添加串口通信

2.设置代码输出名字和格式

3.勾选选项

4.为你的STM32工程启用 MicroLIB 微型C库

5.导入库函数

6.重写函数

七、scanf重定向

1.添加头文件

2.重写fgetc函数

八、HAL函数

1.串口发送函数

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout)
功能:以阻塞模式通过串口发送数据
参数:UART_HandleTypeDef * huart 设备的句柄(用的是哪个串口)uint8_t * pData  要输出的缓存区首地址 (要发的数据)uint16_t Size  发送的数据量	(发送多少个字节的数据)uint32_t Timeout  超时时间	(给他发送的最长时间)
返回值:发送状态

2.串口接收函数

和重定向的scanf最大区别在于:这个函数不会阻塞进程,缺点就是有时候可能会取不到值。

HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)功能:以阻塞模式通过串口接收数据参数:UART_HandleTypeDef * huart 设备的句柄uint8_t * pData 输入缓存区首地址 uint16_t Size  接收的数据量uint32_t Timeout  超时时间(会等待这些时间来接收数据)返回值:接收状态

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis学习其三(订阅发布,主从复制,哨兵模式)

文章目录9.Redis订阅与发布9.1发布订阅命令9.2示例10.Redis主从复制10.1概念10.2环境配置10.3集群搭建&#xff08;一主二从配置&#xff09;10.4使用规则&原理11.哨兵模式11.1基本概念11.2工作原理11.3使用案例12.缓存穿透,雪崩&#xff08;待拓展&#xff09;12.1缓存穿透…

跨平台 App 如何无痛迁移到鸿蒙系统?全流程实战+Demo 教程

摘要 目前&#xff0c;随着 HarmonyOS&#xff08;鸿蒙系统&#xff09;的快速发展&#xff0c;越来越多开发者和企业希望将已有的 Android、Flutter、React Native 等跨平台应用迁移到鸿蒙生态中。鸿蒙不仅具备分布式能力、原生性能和统一的开发范式&#xff0c;还提供了丰富的…

智慧后厨检测算法构建智能厨房防护网

智慧后厨检测&#xff1a;构建安全洁净厨房的智能解决方案背景&#xff1a;传统后厨管理的痛点与智慧化需求餐饮行业后厨管理长期面临操作规范难落实、安全隐患难察觉、卫生状况难追溯等痛点。传统人工巡检效率低、覆盖面有限&#xff0c;难以实现24小时无死角监管。例如&#…

LatentSync: 一键自动生成对嘴型的视频

LatentSync是什么 字节跳动与北京交通大学联合推出了全新的唇形同步框架 LatentSync&#xff0c;它基于音频驱动的潜在扩散模型&#xff0c;跳过了传统的3D建模或2D特征点提取&#xff0c;直接生成自然逼真的说话视频。 LatentSync借助Stable Diffusion强大的图像生成能力&am…

在断网情况下,网线直接连接 Windows 笔记本和 Ubuntu 服务器进行数据传输

在断网情况下&#xff0c;通过网线直接连接 Windows 笔记本 和 Ubuntu 服务器上的容器 进行数据传输&#xff0c;可以按照以下步骤操作&#xff1a;1. 物理连接 使用网线直连&#xff1a;用一根 普通网线&#xff08;直通线&#xff09; 连接 Windows 笔记本和 Ubuntu 服务器的…

机器学习17-Mamba

深度学习之 Mamba 学习笔记 一、Mamba 的背景与意义 在深度学习领域&#xff0c;序列建模是一项核心任务&#xff0c;像自然语言处理、语音识别和视频分析等领域&#xff0c;都要求模型能有效捕捉长序列里的依赖关系。之前&#xff0c;Transformer 凭借强大的注意力机制成为序列…

Java实现word、pdf转html保留格式

一、word转html 依赖&#xff1a; <properties><poi.version>5.2.3</poi.version><xhtml.version>2.0.4</xhtml.version> </properties><!--word转html--> <dependency><groupId>org.apache.poi</groupId><a…

基于51单片机和16X16点阵屏、矩阵按键的小游戏《俄罗斯方块》

目录系列文章目录前言一、效果展示二、原理分析三、各模块代码1、16X16点阵屏&#xff08;MAX7219驱动&#xff09;2、矩阵按键3、定时器0四、主函数总结系列文章目录 前言 《俄罗斯方块》&#xff0c;一款经典的、怀旧的小游戏&#xff0c;单片机入门必写程序。 有两个版本&…

Stable Diffusion Windows本地部署超详细教程(手动+自动+整合包三种方式)

Stable Diffusion Windows 本地部署超详细教程 (手动 自动 整合包三种方式) 一、引言 我们可以通过官方网站 Stability AI&#xff0c;以及 Dream Studio、Replicate、Playground AI 、Baseten 等网站在线体验 Stable Diffusion 的巨大威力。相比于集成在网络平台的 SD 或者…

sqli-labs靶场通关笔记:第29-31关 HTTP参数污染

第29关 HTTP参数污染本关设置了web应用防火墙&#xff08;WAF&#xff09;&#xff0c;利用白名单保护机制来检测和拦截恶意请求。看本关源代码。<?php //including the Mysql connect parameters. include("../sql-connections/sql-connect.php"); //disable er…

Vuex 基本概念

参照官网整理总结vuex语法。 计划日期&#xff1a; Vuex基础部分&#xff1a;2022年2月20日——2022年2月28日 Vuex源码相关实践&#xff1a;待定 Vuex拓展&#xff1a;待定 写完后&#xff0c;会发到仓库地址&#xff1a;待定 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模…

深入理解Linux文件操作:stdin/stdout/stderr与C语言文件函数全解析

目录 一、stdin、stdout 和 stderr 详解 二、文件打开方式 三、C语言文件操作函数详解 1、文件操作概述 2、文件操作函数分类表 1. 文件打开与关闭 2. 字符读写函数 3. 字符串读写函数 4. 格式化读写函数 5. 二进制读写函数 6. 文件定位函数 7. 文件状态与错误检测…

【自用】JavaSE--集合框架(一)--Collection集合体系

概述之前学的ArrayList就是集合的一种&#xff0c;是一种容器&#xff0c;可以往里面存东西&#xff0c;大小可变Collection集合体系Collection的常用方法以后Collection体系的集合都可以用下图的方法注意toArray方法的数组类型是Object&#xff0c;这样就可以接收任意类型的数…

电脑视频常用几种接口

传输信号类型 DP&#xff08;DisplayPort&#xff09;主要用于传输数字视频和音频信号&#xff0c;支持高分辨率和高刷新率。HDMI&#xff08;High-Definition Multimedia Interface&#xff09;同样传输数字音视频信号&#xff0c;但更偏向消费电子领域&#xff0c;如电视、游…

CherryStudio+playwright-mcp-server实现AI自动化

目录 1、CherryStudio安装与配置 1.1什么是CherryStudio 1.2安装 1.3配置 2、playwright-mcp-server的安装与配置 3、执行测试与结果 1、CherryStudio安装与配置 1.1什么是CherryStudio Cherry Studio 是一款集多模型对话、知识库管理、AI 绘画、翻译等功能于一体的全能 …

深入了解 find_element 方法:Web 自动化定位元素的核心​

在 Web 自动化测试领域&#xff0c;元素定位是实现各类操作的基础&#xff0c;而find_element方法正是 Selenium 等自动化工具中用于定位单个元素的核心方法。掌握它的使用技巧&#xff0c;能让我们更精准、高效地操控网页元素&#xff0c;为自动化测试脚本的编写打下坚实基础。…

从零开始的云计算生活——第三十三天,关山阻隔,ELK日志分析

目录 一.故事背景 二、Elasticsearch 全面概述 1、核心定位 2、核心特性 a. 分布式架构 b. 高性能原理 c. 数据模型创新 3、核心技术组件 4、核心应用场景 a. 企业级搜索 b. 可观测性 c. 安全分析&#xff08;SIEM&#xff09; 5、版本演进关键特性 6、核心优势…

深入理解 Spring Boot Starter 的生成机制

在使用 Spring Boot 进行开发时&#xff0c;我们常常会引入诸如 spring-boot-starter-web、spring-boot-starter-data-jpa 等依赖&#xff0c;从而快速开启相关功能模块。但你是否思考过这些 Starter 是如何构建的&#xff1f;如果我们要开发自己的 Starter&#xff0c;又该如何…

阿里云-通义灵码:隐私保护机制—为数据安全筑起铜墙铁壁

免责声明&#xff1a;此篇文章所有内容皆是本人实验&#xff0c;并非广告推广&#xff0c;并非抄袭&#xff0c;该系列继续~每日一句不要感叹自己的平凡&#xff0c;即便是最暗的星星&#xff0c;相与无边的黑暗已是耀眼。一.引言在这个数据如同空气般渗透到生活每个角落的时代…

最小生成树算法详解

最小生成树算法详解一、最小生成树基础概念1.1 生成树与最小生成树1.2 核心性质1.3 应用场景二、Prim 算法&#xff1a;从顶点出发的“生长式”构建2.1 算法原理2.2 Java 代码实现&#xff08;邻接矩阵版&#xff09;2.3 复杂度分析三、Kruskal 算法&#xff1a;按边权排序的“…