usart和uart的通信原理「建议收藏」

usart和uart的通信原理「建议收藏」usart和uart的通信原理一、通信接口介绍1、处理器与外部设备通信的两种方式:并行通信:数据各个位同时传输。(速度快,占用引脚资源多)串行通信:数据按位顺序传输(一位一位传输)。(占用引脚资源少,速度相对较慢)2、串行通信三种传送方式单工:数据传输只支持数据在一个方向上传输半双工:允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工…

大家好,又见面了,我是你们的朋友全栈君。

usart和uart的通信原理

一、通信接口介绍
1、处理器与外部设备通信的两种方式:
并行通信:数据各个位同时传输。(速度快,占用引脚资源多)
串行通信:数据按位顺序传输(一位一位传输)。(占用引脚资源少,速度相对较慢)
2、串行通信三种传送方式
单工:数据传输只支持数据在一个方向上传输
半双工:允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;
全双工:允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。
3、串行通信的通信方式
同步通信:带时钟同步信号传输。(-SPI,IIC通信接口)
异步通信:不带时钟同步信号。(-UART(通用异步收发器),单总线)

通信接口 引脚接口 通信方式 传送方式
uart(usart) TXD:发送端
RXT:接收端
GND:共地
异步通信 全双工
usart TXD:发送端
RXT:接收端
GND:共地
同步通信和异步通信 双全工
1-wire(单总线) DQ:发送/接收端 异步通信 半双工
SPI SCK:同步时钟
MISO:主机输入,从机输出
MOSI:主机输出,从机输入
同步通信 全双工
I2C SCK:同步时钟
SDA:数据输入/输出端
同步通信 半双工

二、串口的概念:
1、串口是我们的大多数微控制单元(MCU)都具有的基本的外部接口,一般串口最基本的功能就是调试,又能做数据通信的接口(数据量要小一些)。
数据从A到B只能通过1根线,有
uart:通用异步收发器
usart:通用同步异步收发器
2、uart和usart的异同
USART在异步通信的时候,它与UART没有什么区别,但是用在同步通信的时候,区别就很明显了:同步通信需要时钟来触发数据传输,也就是说USART相对UART的区别之一就是能提供主动时钟。如stm32的USART可以提供时钟支持ISO7816的智能卡接口。一般而言,单片机中,名称为UART的接口一般只能用于异步串行通讯,而名称为USART的接口既可以用于同步串行通讯,也能用于异步串行通讯。USART1的时钟:PCLK2(高速);USART2、USART3、UART4的时钟:PCLK1(低速)。

三、串口电平标准及引脚连接方法:
1、电平标准
TTL是常见的模块的通讯电平标准:串口wifi、串口蓝牙(4针接口:VCC、GND、TXD、RXD)
232一般是数据通讯接口:台式电脑的主机背后的九针接口
2、连接方法
RXD:数据输入引脚。数据接受。
TXD:数据发送引脚。数据发送。

四、STM32串口通信过程
数据接收和发送过程:
图片来自网络,下同
usart(uart)工作原理图
在这里插入图片描述

五、STM32串口异步通信需要定义的参数
起始位
数据位(8位或者9位) 9位是带奇偶校验位
奇偶校验位(第9位) :
奇检验就是保证8位数据位中1的个数为奇数个,如果1是基数个则检验位就为0,反之为1;
偶检验就是保证8位数据位中1的个数为偶数个,如果1是偶数个则检验位就为0,反之为1;
停止位(1,15,2位)
波特率设置
在这里插入图片描述

六、UART配置过程
1、串口时钟和GPIO时钟使能
串口时钟使能: RCC_APBxPeriphClockCmd();
GPIO时钟使能:RCC_AHB1PeriphClockCmd();
2、设置引脚复用器映射:
GPIO_PinAFConfig();
3、串口参数初始化(GPIO配置)(五大参数)
GPIO_Init();//初始化
4、串口参数初始化(六大参数)
USART_Init(); //初始化串口
5.使能串口
USART_Cmd();
6.开启中断(如果需要开启中断才需要这个步骤)
设置中断进入的条件:接收数据缓冲区有数据的时候就会进入中断
USART_ITConfig(USART1, USART_IT_RXNE,ENABLE);
7.配置NVIC中断,中断优先级(四大参数)
NVIC_Init(&NVIC_InitStructure);
8、编写中断处理函数:USARTx_IRQHandler();

串口数据收发:
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
串口传输状态获取:
FlagStatusUSART_GetFlagStatus();
void USART_ClearITPendingBit();

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144500.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • mysql8分区表_MySQL 分区表[通俗易懂]

    mysql8分区表_MySQL 分区表[通俗易懂]MySQL分区就是将一个表分解为多个更小的表。从逻辑上讲,只有一个表或一个索引,但在物理上这个表或者索引可能由多个物理分区组成。每个分区在物理上都是独立的。MySQL数据库分区类型:Range分区:行数据基于属于一个给定连续区间的列值放入分区。List分区:和Range分区类似,只是List分区面向的是离散的值。Hash分区:根据用户自定义的表达式的返回值来进行分区,返回值不能为负数。Key分区:…

    2022年6月11日
  • cglib动态代理实现原理_jdk cglib 动态代理 区别

    cglib动态代理实现原理_jdk cglib 动态代理 区别cglib动态代理详解我们都知道jdk的动态代理内部调用切面无效的问题,而cglib则不会出现这种情况,这是为什么?cglib就一定不会出现内部调用切面无效的问题吗?cglib针对每一个类只创建了一个代理类吗?为什么cglib的效率要比jdk的动态代理低呢?首先我们看一下通常我们是如何使用cglib增强一个类的publicclassMain{staticclassTest{publicvoidtest(){System.out.pr

    2022年10月21日
  • 在线H5页面生成器(持续更新中)

    在线H5页面生成器(持续更新中)1、关键词搜索wysiwyg,staticsitegenerator,h5creator,h5edtitor,h5maker2、原理讲解(重点)https://github.com/CntChen/cntchen.github.io/issues/15https://github.com/CntChen/cntchen.github.io/issues/17https…

    2022年5月11日
  • excel 导出json_导出的数据格式不对

    excel 导出json_导出的数据格式不对json格式数据转Excel导出的两种方法第一种table格式数据直接转Excel:但是用这种方式会出现一种问题,就是当你的table有分页的情况下,只能抓取当前分页的数据。拿到表格的id就可以

    2022年8月4日
  • 项目管理复习题

    项目管理复习题蓝字位注释,红字为错误原因,紫字为重点本复习题链接:https://pan.baidu.com/s/1ZJ4l6mKxAt9dqhw0Qa58xA提取码:j4jz第一章一、填空题1.敏捷模型包括(4)个核心价值,对应(12)个敏捷原则。2.项目管理包括(启动过程组)、(计划过程组)、(执行过程组)、(控制过程组)、(收尾过程组)5个过程组。二、判断题1、搬家属于项目。(√)2、项目是为了创造一个唯一的产品或提供一个唯一的服务而进行的永久性的努力。(×)3、过程管理就是.

    2022年6月11日
  • txs0108 替代芯片_什么是芯片,怎么造出来的

    txs0108 替代芯片_什么是芯片,怎么造出来的TXS0108双向电压转换芯片用于IIC时的问题TXS0108是双向电平转换芯片,在我的案例中用于1.8V电平与3.3V电平的转换。最先,我在3.3V和1.8V的SCL和SDA总线上均使用了4.7kΩ的上拉电阻,上拉到对应的高电平。调试发现SDA出现如下波形:可以看到图上出现了次高电平。非常不正常。分析后发现,中间四个次高电平都是IIC芯片发出的ACK信号,应该被拉低,但是并没有拉低到0V。导…

    2022年8月10日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号