STM32H562----------串口通信(UART)

news2025/6/9 14:43:17

1、串口介绍

1.1、 数据通信概念

在单片机中我们常用的通信方式有 USART、IIC、SPI、CAN、USB 等;

1、数据通信方式

根据数据通信方式可分为串行通信和并行通信两种,如下图:

串行通信基本特征是数据逐位顺序依次传输,优点:传输线少成本低,抗干扰能力强可用于远距离传输,缺点传输速率低

并行通信特征是数据各位可通过多条线同时传输,优点传输速率高,缺点是成本高,抗干扰能力差;

2、数据传输方向

按照数据传输方向可分为全双工、半双工和单工通信,如下图所示:

3、数据同步方式

根据数据同步方式可分为同步通信和异步通信,如下图所示:

同步通信要求通信双方共用同一时钟信号,在总线上保持统一的时序和周期完成信息传输。

异步通信不需要时钟信号,而是在数据信号中加入开始位和停止位等一些同步信号,一般通信双方还会约定传输速率。

4、通信速率

在数字通信系统中,通信速率(传输速率)指数据在信道中传输的速度,分为两种:传信率和传码率

传信率:每秒钟传输的信息量,即每秒钟传输的二进制位数,单位为 bit/s(即比特每秒),因而又称为比特率

传码率:每秒钟传输的码元个数,单位为 Baud(即波特每秒),因而又称为波特率;

码元是信号被调制后的概念,每个码元可以表示一定 bit 的数据信息量。例如子啊 TTL 电平标准的通信中,0V 表示逻辑 0

5V 表示逻辑 1,这时码元就只可以表示两种状态。若在其它通信标准电平中电平信号 0V、2V、4V 和 6V 分别表示二进制

00、01、10、11,这时候码元就可以表示四种状态。

比特率和波特率的关系可以用以下关系式表示:

比特率 = 波特率 * log2 M

M 表示码元承载的信息量,可以理解 M 为码元的进制数

1.2、串口通信协议简介

串口按位(bit)发送和接收字节。串口通信协议是指规定了数据包的内容,内容包含了起始位、数据区、校验位及停止位,

在串口通信中,常用的协议包括 RS-232、RS-422 和 RS-482 等;如下图所示:

1、波特率

UART 是串口异步通信,不需要时钟信号,只需约定好两个设备之间的波特率,常见的波特率是 4800、9600、115200 等;

2、数据帧格式

串口通信的数据帧包括起始位、停止位、有效数据位以及校验位;

起始位:一般由一个逻辑 0 的数据位表示

有效数据位:起始位之后就是数据位,有效数据位一般会被约定为 5、6、7 或者 8 个位长,一般是低位(LSB)在前高位(MSB) 在后

校验位:一般用来判断接受的数据有无错误,校验方法有:奇校验、偶校验、0 校验、1 校验及无校验;

奇校验:指有效数据的和与校验位中"1"的个数为奇数,如一个 8 位长有效数据为 11001100,共 4 个"1",为达到奇校验效果

校验位则为"1";

偶校验:与上述奇校验要求相反,要求帧数据与校验位中"1"的个数为偶数;如数据帧为 11001100,则此时偶校验位为"0"

0 校验:指不管数据帧的内容,校验位总为"0"

1 校验:即校验位总为"1"

无校验:指数据帧中不包含校验位,一般不使用

停止位:一般通信双方需约定 0.5、1、1.5 或 2 个逻辑 1 的数据位表示;

1.3、STM32H5 串口外设介绍

STM32H562 的最多可提供 6 路串口(5 路普通串口和 1 路低功耗串口),支持 8/16 倍过采样、支持自动波特率检测、支持 Modbus

通信、支持同步单线通信和半双工单线通讯、支持 LIN、支持调制解调操作、智能卡协议和 IrDA SIR ENDEC 规范、具有 DMA 功能;

USART 框图如下所示:

1、时钟与波特率

该部分主要功能是为 USART 提供时钟以及配置波特率;

如上图,我们可以看到两个时钟域,usart_pclk 时钟域及 usart_ker_ck 内核时钟域。

usart_pclk 是外设总线时钟;

usart_ker_ck 是 USART 时钟源,独立于 usart_pclk,由 RCC 提供;

波特率,即每秒钟传输的码元个数,波特率计算公式分为 16 倍过采样和 8 倍过采样;

16 倍过采样下,波特率计算公式如下:

baud = usart_ker_ckpres/USARTDIV

8 倍过采样下,波特率计算公式如下:

baud = (2*usart_ker_ckpres)/USARTDIV

2、收发数据

USART 双向通信有两个引脚 TX/RX;

USART_TDR 是 USART 发送数据寄存器,USART_RDTR 是 USART 接收数据寄存器,这两个寄存器都是低 9 位有效;

可通过 USART_CR1 寄存器的 M 位设置字长:

7 位字符长度:M[1:0] = “10”

8 位字符长度:M[1:0] = “00”

9 位字符长度:M[1:0] = “01”

基本都是使用 8 位数据字长;

3、控制寄存器

可以通过控制寄存器控制 USART 数据的发送、数据接收、各种通信模式的设置、中断、DMA 模式及唤醒单元等;

4、DMA 和中断功能

USART 支持 DMA 传输,可实现高速数据传输;

5、USART 信号引脚

在 RS232 硬件流控制模式下需要以下两个引脚:

CTS(清除以发送):发送器在发送下一帧数据之前会检测 CTS 引脚,若为低电平,表示可发送数据;若为高电平则在发送完当前数据之后停止发送

RTS(请求以发送):若为低电平,则该信号用于指示 USART 已准备好接收数据。

在 RS485 硬件控制模式下需要下面该引脚:

DE(驱动器使能):该信号用于激活外部收发器的发送模式。

在同步主/从模式和智能卡模式下需要以下引脚:

CK:该引脚在同步主模式和智能卡模式下用作时钟输出,在同步从模式下用作时钟输入。

NSS:该引脚在同步从模式下用作从器件选择输入。

2、代码详解

代码如下:

UART_HandleTypeDef  UART1_Handler;
DMA_HandleTypeDef   UART1TxDMA_Handler;
DMA_HandleTypeDef   UART1RxDMA_Handler;

//发送接收缓冲区
uint8_t rx_buffer[512];
uint8_t tx_buffer[256];

volatile uint8_t rxComplete = 0;
volatile uint16_t rxlen = 0;
volatile uint8_t dma_tx_busy = 0;

void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
   
    GPIO_InitTypeDef GPIO_Initure;
    if(huart->Instance == USART1)
    {
   
        __HAL_RCC_GPIOA_CLK_ENABLE();

        GPIO_Initure.Pin = GPIO_PIN_9 | GPIO_PIN_10;
        GPIO_Initure.Mode = GPIO_MODE_AF_PP;
        GPIO_Initure.Pull = GPIO_NOPULL;
        GPIO_Initure.Speed = GPIO_SPEED_FREQ_HIGH;
        GPIO_Initure.Alternate = GPIO_AF7_USART1;
        HAL_GPIO_Init(GPIOA, 

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

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

相关文章

webpack其余配置

webpack搭建本地服务器 首先是要安装一个webpack-dev-server npm install webpack-dev-server -D 安装后在package.json中添加: {"name": "babel_core_demo","version": "1.0.0","main": "index.js"…

【CUDA 】第5章 共享内存和常量内存——5.3减少全局内存访问(2)

CUDA C编程笔记 第五章 共享内存和常量内存5.3 减少全局内存访问5.3.2 使用展开的并行规约思路reduceSmemUnroll4(共享内存)具体代码:运行结果意外发现书上全局加载事务和全局存储事务和ncu中这两个值相同 5.3.3 动态共享内存的并行规约reduc…

Python 训练营打卡 Day 46

通道注意力 一、什么是注意力 注意力机制是一种让模型学会「选择性关注重要信息」的特征提取器,就像人类视觉会自动忽略背景,聚焦于图片中的主体(如猫、汽车)。 transformer中的叫做自注意力机制,他是一种自己学习自…

Rust学习(1)

声明:学习来源于 《Rust 圣经》 变量的绑定和解构 变量绑定 let a "hello world":这个过程称之为变量绑定。绑定就是把这个对象绑定给一个变量,让这个变量成为它的主人。 变量可变性 Rust 变量默认情况下不可变,可以通过 mut …

鸿蒙仓颉语言开发实战教程:商城应用个人中心页面

又到了高考的日子,幽蓝君在这里祝各位考生朋友冷静答题,超常发挥。 今天要分享的内容是仓颉语言商城应用的个人中心页面,先看效果图: 下面介绍下这个页面的实现过程。 我们可以先分析下整个页面的布局结构。可以看出它是纵向的布…

智能生成完整 Java 后端架构,告别手动编写 ControllerServiceDao

在 Java 后端开发的漫长征途上,开发者们常常深陷繁琐的基础代码编写泥潭。尤其是 Controller、Service、Dao 这三层代码的手动编写,堪称开发效率的 “拦路虎”。从搭建项目骨架到填充业务逻辑,每一个环节都需要开发者投入大量精力&#xff0c…

Python----目标检测(yolov5-7.0安装及训练细胞)

一、下载项目代码 yolov5代码源 GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite yolov5-7.0代码源 Release v7.0 - YOLOv5 SOTA Realtime Instance Segmentation ultralytics/yolov5 GitHub 二、创建虚拟环境 创建一个3.8…

【Linux】文件赋权(指定文件所有者、所属组)、挂载光驱(图文教程)

文章目录 文件赋权创建文件 testChmod查看文件的当前权限使用 chmod 命令修改权限验证权限关键命令总结答案汇总 光驱挂载确认文件是否存在打包压缩压缩验证创建 work 目录将压缩文件复制到 work 目录新建挂载点 /MNT/CDROM 并挂载光驱答案汇总 更多相关内容可查看 此篇用以解决…

第22讲、Odoo18 QWeb 模板引擎详解

Odoo QWeb 模板引擎详解与实战 Odoo 的 QWeb 是其自研的模板引擎,广泛应用于 HTML、XML、PDF 等内容的生成,支撑了前端页面渲染、报表输出、门户页面、邮件模板等多种场景。本文将系统介绍 QWeb 的核心用法、工作原理,并通过实战案例演示如何…

【原理解析】为什么显示器Fliker dB值越大,闪烁程度越轻?

显示器Fliker 1 显示器闪烁现象说明2 Fliker量测方法2.1 FMA法2.2 JEITA法问题答疑:为什么显示器Fliker dB值越大,闪烁程度越轻? 3 参考文献 1 显示器闪烁现象说明 当一个光源闪烁超过每秒10次以上就可在人眼中产生视觉残留,此时…

Bootstrap Table开源的企业级数据表格集成

Bootstrap Table 是什么 ‌Bootstrap Table 是一个基于 Bootstrap 框架的开源插件,专为快速构建功能丰富、响应式的数据表格而设计。‌ 它支持排序、分页、搜索、导出等核心功能,并兼容多种 CSS 框架(如 Semantic UI、Material Design 等&am…

vue3表格使用Switch 开关

本示例基于vue3 element-plus 注&#xff1a;表格数据返回状态值为0、1。开关使用 v-model"scope.row.state 0" 会报错 故需要对写法做些修改&#xff0c;效果图如下 <el-table-column prop"state" label"入学状态" width"180" …

【11408学习记录】考研写作双核引擎:感谢信+建议信复合结构高分模板(附16年真题精讲)

感谢信建议信 英语写作2016年考研英语&#xff08;二&#xff09;真题小作文题目分析写作思路第一段第二段锦囊妙句9&#xff1a;锦囊妙句12&#xff1a;锦囊妙句13&#xff1a;锦囊妙句18&#xff1a; 第三段 妙句成文 每日一句词汇第一步&#xff1a;找谓语第二步&#xff1a…

一套个人知识储备库构建方案

写文章的初心是做知识沉淀。 好记性不如烂笔头&#xff0c;将阶段性的经验总结成文章&#xff0c;下次遇到相同的问题时&#xff0c;查起来比再次去搜集资料快得多。 然而&#xff0c;当文章越来越多时&#xff0c;有一个问题逐渐开始变得“严峻”起来。 比如&#xff0c;我…

行李箱检测数据集VOC+YOLO格式2083张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2083 标注数量(xml文件个数)&#xff1a;2083 标注数量(txt文件个数)&#xff1a;2083 …

实践提炼,EtherNet/IP转PROFINET网关实现乳企数字化工厂增效

乳企数字化工厂的核心技术应用 1. 智能质检&#xff1a;机器视觉协议网关的协同 液态奶包装线&#xff08;利乐罐装&#xff09;的漏码检测生产线&#xff0c;其高速产线&#xff08;20,000包/小时&#xff09;需实时识别微小缺陷&#xff0c;但视觉系统&#xff08;康耐视Ca…

从以物换物到DeFi:交易的演变与Arbitrum的DeFi生态

交易的本质&#xff1a;从以物换物到现代金融 交易是人类社会经济活动的核心&#xff0c;是通过交换资源&#xff08;如货物、服务或货币&#xff09;满足各方需求的行为。其本质是价值交换&#xff0c;旨在实现资源的优化配置。交易的历史可以追溯到人类文明的起源&#xff0…

分类场景数据集大全「包含数据标注+训练脚本」 (持续原地更新)

一、作者介绍&#xff1a;六年算法开发经验、AI 算法经理、阿里云专家博主。擅长&#xff1a;检测、分割、理解、大模型 等算法训练与推理部署任务。 二、数据集介绍&#xff1a; 质量高&#xff1a;高质量图片、高质量标注数据&#xff0c;吐血标注、整理&#xff0c;可以作为…

Web后端开发(SpringBootWeb、HTTP、Tomcat快速入门)

目录 SpringBootWeb入门 Spring 需求&#xff1a; 步骤&#xff1a; HTTP协议&#xff1a; 概述&#xff1a; 请求协议&#xff1a; 响应协议&#xff1a; 协议解析&#xff1a; Web服务器-Tomcat&#xff1a; 简介&#xff1a; 基本使用&#xff1a; SpringBootWeb…

android binder(四)binder驱动详解2

二、情景分析 1、ServiceManager 启动过程 2. 服务注册 服务注册过程(addService)核心功能&#xff1a;在服务所在进程创建binder_node&#xff0c;在servicemanager进程创建binder_ref。其中binder_ref的desc在同一个进程内是唯一的&#xff1a; 每个进程binder_proc所记录的…