03 HAL库下UART的使用

引言: 需要使用到的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.mzph.cn/news/588361.shtml

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

相关文章

获取Windows10系统原始安装日期

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 目标 获取Windows10系统最原始的安装日期;例如:刚买电脑时安装系统的时间。 步骤 第一步,请打开PowerShell,单击Windows P…

评价类问题:层次分析法

引言:打分法 一、解决评价类问题的三个方面 二、如何寻找评价准则 三、如何确定权重 (1)分而治之的思想 (2) 层次分析法思想: 指标重要性(满意程度) 判断矩阵(正反矩…

面试题-JVM 初级面试题(40道含答案)

author: 小郑说编程 JVM 初级面试题 1、对象在哪块内存分配? 数组和对象在堆内存分配;某些对象没有逃逸出方法,可能被优化为在栈上分配 2、谈谈 JVM 中的常量池 JDK 1.8 开始 字符串常量池:存放在堆中,包括 Strin…

分布式【4. 什么是 CAP?】

什么是 CAP? C 代表 Consistency,一致性,是指所有节点在同一时刻的数据是相同的,即更新操作执行结束并响应用户完成后,所有节点存储的数据会保持相同。 A 代表 Availability,可用性,是指系统提…

[原创][R语言]股票分析实战[6]:正则表达式提取子字符串

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、D…

LeetCode75| 滑动窗口

目录 643 子数组最大平均数 | 1456 定长子串中元音的最大数目 1004 最大连续1的个数 ||| 1493 删掉一个元素以后全为1的最长子数组 643 子数组最大平均数 | class Solution { public:double findMaxAverage(vector<int>& nums, int k) {double sum 0;double re…

数据结构与算法笔记

数据结构&#xff1a; 就是指一组数据的存储结构 算法&#xff1a; 就是操作数据的一组方法 数据结构和算法 两者关系 数据结构和算法是相辅相成的。数据结构是为算法服务的&#xff0c;算法要作用在特定的数据结构之上。 数据结构是静态的&#xff0c;它只是组织数据的一…

Quartz调度引擎基于MySQL的高可用架构调度延迟分析与解决方案

1、Quartz默认使用的高可用架构 在Quartz的官方文档中&#xff0c;介绍了一种默认的高可用架构&#xff0c;基于数据库实现。该方案中&#xff0c;多台Quartz服务器连接同一个数据库&#xff0c;单台服务器每次调度检索并锁定一批Trigger用于触发&#xff0c;锁定过程中将先从…

Kubernetes网络-VXLAN

一. 网络基础 1. 计算机网络的分层 如今连接方式也越来也丰富&#xff0c;网线、WiFi、蓝牙、光纤&#xff0c;甚至我们普通的电线、照明所用的灯光&#xff0c;都可以作为接入网络的介质。如此庞大的网络&#xff0c;丰富多样的设备&#xff0c;计算机网络技术能把它们统一起…

认识计算机网络——计算机网络的组成

计算机网络是由多个计算机和网络设备组成的系统&#xff0c;通过通信协议实现数据传输和信息交换。它是现代社会信息技术的重要支撑&#xff0c;广泛应用于各个领域。本文将介绍计算机网络的主要组成部分&#xff0c;包括硬件设备、软件协议和网络服务。 一、硬件设备 计算机网…

46、激活函数 - Relu 激活

本节介绍一个在神经网络中非常常见的激活函数 - Relu 激活函数。 什么是ReLU激活函数 ReLU 英文名为 Rectified Linear Unit,又称修正线性单元,是一种简单但很有效的激活函数,它的定义如下: 即当输入 x 大于零时,输出等于他自己;当输入小于等于零时,输出为零,下面是re…

【Android进阶篇】Android中PreferenceScreen的作用和详细用法介绍

1&#xff0c;PreferenceScreen的作用 在Android开发中&#xff0c;PreferenceScreen是一个非常重要的布局控件&#xff0c;主要用于创建设置界面&#xff08;settings page&#xff09;。它可以包含多个Preference子项&#xff0c;如CheckBoxPreference, ListPreference等&am…

C++继承与派生——(8)多继承

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 苦难和幸福一样&#xff0c;都是生命盛…

【多传感器融合导航论文阅读】

多传感器融合导航论文积累 知识点总结因子图一致因子图 文献阅读笔记[IF 18.6] 知识点总结 因子图 Factor Graph 是概率图的一种&#xff0c;是对函数因子分解的表示图&#xff0c;一般内含两种节点&#xff0c;变量节点和函数节点。 因子图存在着&#xff1a;两类节点&#…

主浏览器优化之路1——你现在在用的是什么浏览器?Edge?谷歌?火狐?360!?

上一世&#xff0c;我的浏览器之路 引言为什么要用两个浏览器为什么一定要放弃火狐结尾给大家一个猜数字小游戏&#xff08;测运气&#xff09; 引言 小时候&#xff0c;我一开始上网的浏览器是2345王牌浏览器吧&#xff0c; 因为上面集成了很多网站&#xff0c;我记得上面有7…

使用axios发送get和post请求

使用axios发送get和post请求的方法如下&#xff1a; 1.发送GET请求&#xff1a; axios.get(url).then(response > {// 请求成功的处理逻辑console.log(response.data);}).catch(error > {// 请求失败的处理逻辑console.error(error);});2.发送POST请求&#xff1a; ax…

Loading 加载 Taro + vue3 自定义组件的封装和 分页 优化

1.需求 当需要实现一个组件 上拉加载的组件 我们可以选择某些组件库的组件。 但是有的组件没有这个组件&#xff0c;比如跟Taro 框架配套的京东nut-ui组件库 没有提供这个功能, 2.Loading组件 ①封装 <template><div class"container"><div class&…

原型继承在 JavaScript 中是如何工作

原型继承是 JavaScript 中实现面向对象编程的一种机制。在 JavaScript 中&#xff0c;每个对象都有一个原型&#xff0c;原型是一个对象&#xff0c;它包含了对象的属性和方法。当我们试图访问一个对象的属性或方法时&#xff0c;JavaScript 先在对象本身中查找&#xff0c;如果…

<Icon-ResizER>support

If you get any questions in using app, email me caohechunhotmail.com.

vscode调试 反汇编c/c++ 查看汇编代码gdb/lldb

先看下流程&#xff01; 先看下流程&#xff01; 有问题请留言&#xff01; 文章目录 必备F5开启调试左侧侧边栏->确保打开回调栈右键函数栈->查看反汇编 方法二&#xff1a;手动输入命令查看 必备 使用c/c 插件&#xff0c;这应该是必备的。 F5开启调试 左侧侧边栏-&…