03 HAL库下UART的使用

news2025/4/21 14:52:19

引言: 需要使用到的uart调试工具在文章最后的资料里面

题外话:uart和usart的区别

UART(Universal Asynchronous Receiver/Transmitter)和USART(Universal Synchronous/Asynchronous Receiver/Transmitter)都是串行通信接口,用于将数据以串行方式发送和接收。

它们之间的区别如下:

1. 同步通信支持:USART支持同步通信,可以通过在时钟信号的同步下进行数据传输。而UART只支持异步通信,数据的传输不需要时钟信号的同步。

2. 传输速率:由于支持同步通信,USART通常可以实现比UART更高的传输速率。它可以通过调整时钟信号的频率来支持不同的传输速率。而UART的传输速率通常较低。

3. 数据格式:UART和USART的数据格式在异步通信时一致,都可以支持不同的数据位、校验位和停止位等设置。但在同步通信时,USART还需要设置数据位的同步配置。

4. 错误检测:USART通常支持多种错误检测机制,如奇偶校验、校验和等。而UART通常只支持奇偶校验。

5. 数据帧缓冲区:USART通常具有数据帧缓冲区,可以在数据接收过程中暂存多个数据帧。而UART通常只有一个单一的数据接收缓冲区。

总之,UART和USART都是常见的串行通信接口,根据具体的应用需求选择合适的接口。如果需要更高的速率、同步通信和更多的错误检测机制,可以选择USART。如果只需要简单的异步通信,UART就可以满足需求。

一、UART的相关知识


1. 通信相关知识的基本介绍

  • 通信的基本概念

        在单片机的应用中,数据的通信是必不可少的一部分。比如:单片机和上位机、单片机和外围器件之间,它们都有数据通信的需求。由于设备之间的电气特性、传输速率、可靠性要求各不相同,于是就有了各种通信类型、通信协议。我们最常见的有:UART、IIC、SPI、CAN、USB 等。常见的数据通信都具有这四种概念,分别是:数据通信方式、数据传输方向、数据同步方式、通信速率。

        这么来说吧, 大家思考一下这个问题, 编程的两个大核心是什么?是不是就是算法和数据, 而在单片机或者说是物联网的开发场景中获取到数据常常需要使用到这些通信协议, 拿到单片机外围设备中的各种数据信息, 在转交给CPU按照程序员需要的业务逻辑进行处理。

  • 数据通信方式

按数据通信方式分类,可分为串行通信和并行通信两种

所谓的串行通信就是数据按照二进制位一位一位的处理, 而并行通信是指, 这里举个例子,假设由一个字节的数据等待发送出去, 一个字节也就是八位,看到上图就是将一个数据的八位通过八根导线一次性将八位数据一次性发送出去。

  • 数据传输方向

根据数据传输方向,通信又可分为全双工、半双工和单工通信。

  • 数据同步方式

这里所谓的数据的同步方式本质就是收发双方有没有使用同一个时钟, 比如uart收发双方都是使用各自的时钟这种就是异步的, 为了不让数据产生太大的误差, uart都是一个字节一个字节的发送的, 后面会在讲uart的具体通信的时序图。

  • 通信速率

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

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

传码率(RB):每秒钟传输的码元个数,通常用 RB 表示,单位为 Bd 或 Baud(即波特每秒),因而又称为波特率。

2. UART的时序图

Universal Asynchronous Receiver Transmitter 即通用异步收发器,是一种通用的串行、异步通信总线 , 该总线有两条数据线,可以实现全双工的发送和接收 在嵌入式系统中常用于主机与辅助设备之间的通信

 

串口的实物图

大家别惊讶, 标准的uart协议采取的是TTL电平进行数据传输, 传输距离短, 干扰大,所有在此基础上在标准的uart的协议上在其硬件特性上增加了很多硬件特性, 采用差分信号进行传输, 大大提高高传输距离。这些我们做一下了解就行, 因为软件对uart的操作没变化。

二、实验开始


1. 分析原理图

大家找到自己实验平台的uart的引脚, 接着老套路, 配置引脚为uart模式。

2. 引脚配置

配置为uart收发模式

接着设置uart的模式修改为异步模式, 其它的就不用修改了, 波特率那里也可以改, 打死但是记得使用串口调试软件的时候软甲的波特率记得修改成和这里的一样, 不然会出现乱码。

3. 代码编写

这里我就将使用到uart中的函数主要的部分拿过来, 很简单的, 大家自己的实验的时候可以自己编写规范一些, 将代码写成工程代码的那种样式。

/*printf函数的输出重定向*/
int __io_putchar(int ch)
{
	HAL_UART_Transmit(&huart4,(uint8_t*)&ch,1,HAL_MAX_DELAY);
	return ch;
}

HAL_UART_Receive(&huart4, (uint8_t *)buffer, strlen((const char *)buffer)-1, 100);
HAL_UART_Transmit(&huart4, (uint8_t *)buffer, strlen((const char *)buffer), 100);
memset(buffer, 0, strlen((const char *)buffer));
printf("Hello World\n");
HAL_Delay(500);

__io_putchar函数在工程中写上之后,当我们再使用printf函数的时候单片机就会把数据通过巉口发送给我们的电脑。为什么发送给电脑, 因为咱们的单片机没有屏幕呀。

这样之后我们在做各种项目和实验的时候就可以使用printf函数来对代码进行分析调试了。

三、资料提供


链接:https://pan.baidu.com/s/1WfDXoHmvgLQEpHfbQx0zBg 
提取码:1234 

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

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

相关文章

Halcon腐蚀erosion_circle/erosion_rectanglel

Halcon腐蚀 文章目录 Halcon腐蚀 腐蚀操作是对所选区域进行“收缩”的一种操作,可以用于消除边缘和杂点。腐蚀区域的大小与结构元素的大小和形状相关。其原理是使用,个自定义的结构元素,如矩形、圆形等,在二值图像上进行类似于“滤…

最简单的基于 SDL2 的音频播放器

最简单的基于 SDL2 的音频播放器 最简单的基于 SDL2 的音频播放器正文工程文件下载 参考雷霄骅博士的文章,链接:最简单的基于FFMPEGSDL的音频播放器:拆分-解码器和播放器 最简单的基于 SDL2 的音频播放器 正文 SDL2 音频播放器实现了播放 …

【零基础入门VUE】在 Vue 中构建复杂表单

✍面向读者:所有人 ✍所属专栏:零基础入门VUE专栏https://blog.csdn.net/arthas777/category_12537076.html 目录 v-modelVue 中的 指令 Vue 中的组件 没有构建步骤 随着构建步骤 注册 VUE 组件 Vue 道具 VUE 中的道具声明 在 VUE 中传递 PROP…

unknown variable ‘authentication_policy=mysql_native_password‘

unknown variable authentication_policymysql_native_password 背景解决尝试一尝试二(解决) 总结 背景 mac上安装多个版本数据库。我是通过dmg安装的,先装的5.7,再装的5.8,然后5.8的能正常用,5.7的启动不起来。报错信息为如下 …

docker安装mysql看这一篇就够了

docker安装mysql 一、 安装docker二、docker安装mysql三、设置MySQL远程访问 一、 安装docker 1、安装依赖环境,yum-utils yum -y install yum-utils device-mapper-persistent-data lvm2 备注:使用yum工具下载 yum是软件包管理工具 通过 执行 man yum…

nodejs+vue网上书城图书销售商城系统io69w

功能介绍 该系统将采用B/S结构模式,使用Vue和ElementUI框架搭建前端页面,后端使用Nodejs来搭建服务器,并使用MySQL,通过axios完成前后端的交互 系统的主要功能包括首页、个人中心、用户管理、图书类型管理、图书分类管理、图书信…

【Redis技术专区】「原理分析」探讨Redis 6.0为何需要启用多线程?

探讨Redis 6.0为何需要启用多线程 背景介绍开启多线程多线程的CPU核心配置IO多线程模式单线程处理方式多线程处理方式 为什么要开启多线程?充分利用多核CPU提高网络I/O效率响应现代应用需求 多线程实现启用多线程 最后总结 背景介绍 在Redis 6.0版本中,…

【ONE·MySQL || 数据类型 表的约束】

总言 主要内容:介绍MySQL中的常见数据类型(数值类型、文本二进制类型、时间日期、字符串类型),以及对表的约束(非空约束、默认约束、列描述、零填充约束、自增长约束、主键约束、唯一键约束、外键约束)。  …

【Vue】使用Axios请求下载后端返回的文件流,并能够提示后端报错信息

【需求】使用Axios请求下载后端返回的文件流,下载失败时提示信息不写死,按照后端返回的信息进行提示。 一、需求分析 看到这个需求的时候,有人可能会很疑惑,这不是直接就能获取到吗,直接message.error()弹框就完事了&…

【webpack】高级篇

webpack高级应用 安装流程提高开发效率与完善团队开发规范devtool属性 devServer属性下compress属性port属性headers请求头proxy开启代理https配置http2配置historyApiFallback配置开发服务器主机 host模块热替换与热加载 eslint代码规范取消黑色背景弹窗提示 git-hooks与husky…

Vue中methods,watch与computed之间的差异

Methods methods 选项定义了组件中可以调用的方法。这些方法可以在模板中通过事件绑定或者在其他方法中调用。methods 中的函数可以接受参数,并且可以执行任意的 JavaScript 代码。因此,methods 主要用于处理组件中的用户交互、事件响应和自定义的操作。…

【FileZilla的安装与使用以及主动与被动模式详解

目录 一. FileZilla是什么? 二. FileZilla的安装与使用 2.1 FileZilla服务端安装与配置 2.1.2 新建组 2.1.3 新建用户 2.1.4 新建目录 2.1.5 权限分配 (1)用户fu权限分配 2.2 FileZilla客户端安装与使用 2.2.1 权限分配测试 权限演…

【ARMv8M Cortex-M33 系列 2.1 -- Cortex-M33 使用 .hex /.srec 文件介绍】

请阅读【嵌入式开发学习必备专栏 之Cortex-M33 专栏】 文章目录 HEX 文件介绍英特尔十六进制文件格式记录类型hex 示例Cortex-M 系列hex 文件的使用 hex 文件和srec 文件生成Motorola S-Record (srec) 格式 HEX 文件介绍 .hex 文件通常用于微控制器编程,包括 ARM C…

JUC Lock 锁入门

文章目录 死锁(Deadlock)通过 Visualvm 等工具排查死锁 活锁park & unpark与 wait & notify 的区别park & unpark 实现:点外卖 Lock 对象ReentrantLock 可重入锁可重入lockInterruptibly 方法上锁(可打断)…

C#,入门教程(04)——Visual Studio 2022 数据编程实例:随机数与组合

上一篇: C#,入门教程(03)——Visual Studio 2022编写彩色Hello World与动画效果https://blog.csdn.net/beijinghorn/article/details/123478581 C#,入门教程(01)—— Visual Studio 2022 免费安装的详细图文与动画教程https://blog.csdn.net…

Field II 仿真软件——安装

1. 去官网下载文件压缩包 Field II Ultrasound Simulation Program (field-ii.dk) 在Download页面下载符合自己系统的压缩包。 2. 解压压缩文件,然后将这个文件夹添加到matlab的路径中,如下图所示: 3. 在matlab命令行输入:field…

05 HAL库驱动蜂鸣器唱出一首小歌

目录 一、蜂鸣器的基本知识 1、有源蜂鸣器 2、无源蜂鸣器 二、PWM的相关知识 1. PWM概念 2. PWM常见参数 3.PWM基本结构 三、蜂鸣器发出音调的原理 四、频率计算 五、实验开始 一、蜂鸣器的基本知识 蜂鸣器是一种能够发出持续而连续的声音的电子设备,它被…

【十一】【C++\动态规划】1218. 最长定差子序列、873. 最长的斐波那契子序列的长度、1027. 最长等差数列,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利…

.NET进阶篇06-async异步、thread多线程2

知识须要不断积累、总结和沉淀,思考和写做是成长的催化剂web 内容目录 1、线程Thread 一、生命周期 二、后台线程 三、静态方法 1.线程本地存储 2.内存栅栏 四、返回值 2、线程池ThreadPool 一、工做队列 二、工做线程和IO线程 三、和Thread区别 四、定时器 1、线…

3D视觉-激光三角测量法的分类

按照入射激光光束和被测物体表面法线的角度关系,一般分为直射式和斜射式两种方式。 1)直射式测量 如图所示,激光器发出的光线,经会聚透镜聚焦后垂直入射到被测物体表面上,物体移动或者其表面变化,导致入射…