UART/USRAT协议

USRAT串口通信深入理解 所谓电平标准,是数据 1 和 数据 0 的一种表达方式,是传输线缆中人为规定的电压与数据的对应关系,常见三种电平标准:波特率:串口通信的速率,指的是串口通信时每秒钟可以传输多少个二进制位。一般常见的波特率为:9600/115200(每秒钟传输9600/115200个二进制位)起始位:标志一个数据帧的开始,固定为低电平;数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行;校验位:用于数据验证,根据数据位计算而来(无检验、奇、偶校验,仅在一定程度上保证数据传输正确,出现两位出错,则失效);停止位:用于数 阅读详情

UART

UART全称“通用异步收发器(Universal Asynchronous Receiver/Transmitter)”,是一种串行异步全双工的通信协议,工作原理就是将传输数据的每一个字符一位接一位的传输。

UART的数据帧格式

在这里插入图片描述

起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。
数据位:紧接着起始位之后。数据位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。
奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。
停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。
空闲位:处于逻辑“1”状态,表示当前线路上没有数据传送。
波特率:是衡量数据传送速率的指标。表示每秒钟传送的符号数(symbol)。常用的波特率有9600和115200.
波特率与比特率的区别:一个符号代表的信息量(比特数)与符号的阶数有关。例如传输使用256阶符号,每8bit代表一个符号,资料传送速率为120字符/秒,则波特率就是120baud,比特率是120*8=960bit/s。这两者的概念很容易搞错

USART的硬件结构

在这里插入图片描述输出缓冲寄存器:它接收CPU从数据总线上送来的并行数据,并加以保存。
输出移位寄存器:它接收从输出缓冲器送来的并行数据,以发送时钟的速率把数据逐位移出,即将并行数据转换为串行数据输出。
输入移位寄存器:它以接收时钟的速率把出现在串行数据输入线上的数据逐位移入,当数据装满后,并行送往输入缓冲寄存器,即将串行数据转换成并行数据。
输入缓冲寄存器,它从输入移位寄存器中接收并行数据,然后由CPU取走。
控制寄存器:它接收CPU送来的控制字,由控制字的内容,决定通信时的传输方式以及数据格式等。例如采用异步方式还是同步方式,数据字符的位数,有无奇偶校验,是奇校验还是偶校验,停止位的位数等参数。
状态寄存器:状态寄存器中存放着接口的各种状态信息,例如输出缓冲区是否空,输入字符是否准备好等。在通信过程中,当符合某种状态时,接口中的状态检测逻辑将状态寄存器的相应位置“1”,以便让CPU查询。

stm32串口配置步骤

1、初始化USART时钟
2、配置USRAT的引脚(TX:复用推挽输出;RX:浮空输入)
3、初始化USART结构体(设置波特率、模式、无硬件流控制、奇偶校验、停止位、字长)
4、使能USART
5、使能USART中断(设置中断优先级)
6、编写中断服务函数(判断中断类型,清中断标志位)
下面以stm32f103的USART1为例:
usart初始化函数:

void Usart1_Init(u32 baud)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	//开启io时钟和usart1时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
	//配置PA9
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;		//usart1_TX	PA9
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	//配置PA10
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;				//usart1_RX	PA10
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;	//浮空输入
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	//配置USART1
	USART_InitTypeDef USART1_InitStruct;
	USART1_InitStruct.USART_BaudRate = baud;
	USART1_InitStruct.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;
	USART1_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	USART1_InitStruct.USART_Parity = USART_Parity_No;
	USART1_InitStruct.USART_StopBits = USART_StopBits_1;
	USART1_InitStruct.USART_WordLength = USART_WordLength_8b;
	USART_Init(USART1,&USART1_InitStruct);
	//使能USART1
	USART_Cmd(USART1,ENABLE);
	//配置USART1中断,接收非空中断 和 空闲中断
	USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
	USART_ITConfig(USART1,USART_IT_IDLE,ENABLE);
	//设置中断分组,这个只用配置一次,以在主函数的while前执行,这里就注释了
//	NVIC_SetPriorityGrouping(NVIC_PriorityGroup_2);
	//设置中断优先级(抢占01,响应01)
	NVIC_SetPriority(USART1_IRQn,4);
	//开启中断
	NVIC_EnableIRQ(USART1_IRQn);
}

中断服务函数:

void USART1_IRQHandler(void)
{
	if(USART_GetITStatus(USART1,USART_IT_RXNE) == 1)
	{
		//清中断标志位
		USART_ClearITPendingBit(USART1,USART_IT_RXNE);
		//将接收到的数据放到u1_buff数组中
		u1_buff[u1_bufcnt++]= USART_ReceiveData(USART1);
	}
	if(USART_GetITStatus(USART1,USART_IT_IDLE) == 1)
	{
		USART1->DR;//清空闲中断标志比较特殊,需要读状态寄存器和数据寄存器来清
		u1_r_flag = 1;//一次数据接收完成标志
		u1_buff[u1_bufcnt] = '\0';
	}
}
串口,UART,TTL,RS232,RS422,RS485详解     串口通信(Serial Communication), 是电子工程师面对的最基本的一个通讯方式,它是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。    串口通信包括:同步串口通信(USRT)和异步串口通信(UART),然而,很多初学者往往搞不清楚UART和TTL、R... 阅读详情

相关推荐

STM32的USRT通讯实现

STM32的USRT通讯实现 1.实现平台 两块STM开发板,杜邦线; 初始化板子上的串口; 为串口开启中断; 根据需要制定两个板子的通讯协议。 2.实现过程 2.1协议制定 在工程实践的过程中,常常需要两个板子进行通讯来实现功能。现在常常使用的通讯方法常常是CAN通信,TTL通讯,RS485通讯,RS232通讯,I2C,I2S,SPI等。UART也是一种常用的通讯方式,这种通讯方式...

weixin_42295502的博客 2694

I2C、SPI、USRT、USRAT通信方式对比

在产品开发中经常会遇到一些通信问题,平常经常会用到的串口、I2C、SPI。一般通信的速录,距离、接线的问题,会对通信方式的选择有所影响。了解不同通信模式的特点,便于开发中选择合适的通信方式。 一.串口通信 串口是计算机上一种非常通用的设备通信协议(不要与通用串行总线Universal SerialBus或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器

远行的蜗牛 2万+

保姆级教程:在RK3568 Debian系统上搞定AIC8800 WiFi与蓝牙驱动(含固件路径与开机自启脚本)

本文提供在RK3568 Debian系统上配置AIC8800 WiFi与蓝牙驱动的保姆级教程,涵盖驱动移植、固件部署、开机自启脚本等关键步骤。通过详细的硬件连接指南、内核配置示例和常见问题解决方案,帮助开发者快速实现无线模块的全功能配置,特别适合嵌入式Linux开发者参考。

weixin_28684825的博客 379

STM32学习-4,通用同步异步收发器USRAT

4 USART UART:universal asynchronous receiver and transmitter通用异步收发器; USART:universal synchronous asynchronous receiver and transmitter通用同步异步收发器。 注意是不一样的 USART_Init x是需要配置的变量,一般使用异步模式 USART_BaudRate 该成员设置了 USART 传输的波特率,波特率可以由以下公式计算: IntegerDivider = ((A

qq_45638430的博客 1930

太速科技-基于DSP TMS320C6678+FPGA XC7V690T的6U VPX信号处理卡

当多块盘并行工作时,存储阵列读写带宽成指数增长,2块盘则≥4GB/s,4块盘则≥8GB/s,以此类推。存储阵列的存储容量由单盘配置决定,目前单块NVME存储盘存储容量可选择512GB、1TB、2TB、4TB、8TB、16TB。硬盘管理通过文件系统,FPGA的PCIeX4与 6U VPX主板互联,操作系统直接映射管理硬盘,也可以通过前面板QSFP+ 光纤导出给其他服务器设备。本方案优势就是集中的进行采集,存储,计算一体化,降低硬件成本、功耗,减小设备体积、重量。信号处理,无线电通信领域。

Orihard_的博客 678

手把手教你解决COLMAP编译中的Ceres CUDA支持问题(附详细配置步骤)

本文详细解析了COLMAP编译中Ceres CUDA支持问题的完整解决方案,包括环境准备、Ceres Solver的CUDA编译配置、COLMAP的CUDA集成配置等关键步骤。通过优化CMake参数和解决常见错误,帮助技术人员充分利用GPU加速优势,提升三维重建效率。

vodka的博客 861

嵌入式学习之新手村练级——UART操作

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种串行通信协议,广泛应用于嵌入式系统和各种外设连接中。它以其简单性、可靠性和低成本而闻名,只需三条线(TXD、RXD和GND)即可实现全双工通信。

2501_91180859的博客 2576

一文帮你彻底搞懂ARM Debug Interface之SWD(转)

ARM的文档写的已经很好了,但是关于上电以后的第一时间应该怎么操作,依然写的不够清晰,导致我第一次用的时候还是费了一些周折。今天做一个详细的梳理,希望能够帮助到更多的朋友。BTW, ARM_Cortex-M0/3 DesignStart系列会持续更新,只是中间可能会穿插其他知识点。SWD是Serial Wire Debug的简称,翻译成中文是”串行线调试”。

2302_79847220的博客 6861

STM32L4串口4,只要打开串口接收中断,串口就一直进入中断(原因及解决办法)

一、问题描述 只要一打开UART4接受中断,串口就一直高速进入中断!!!!!无语 这是我的中断服务函数,USRAT3为调试串口,执行程序,可以看见串口助手显示如下图: 可以看到串口一直进入中断4,执行打印1,下放是1秒钟接收的数据量。。。。。。。呵呵呵呵呵呵呵 二、发现问题 通过查寻标志位,发现问题出现在中断溢出上,如下图: 可以看见串口助手上的打印显示如下: 终...

QQ_1595386336的博客 1万+

基于RYU+Mininet的SDN校园网络实战:从零搭建虚拟化实验环境

本文详细介绍了如何利用RYU控制器和Mininet搭建SDN校园网络实验环境,从Ubuntu虚拟机准备到网络拓扑设计,再到关键网络功能实现。通过实战案例展示SDN在校园网络中的应用优势,包括简化配置、提升效率等,为网络工程师和学生提供了一套完整的虚拟化实验方案。

weixin_30872499的博客 457

(2024,DDPM,DDIM,流匹配,SDE,ODE)扩散:基础教程

本文的目标是尽可能简单地教授扩散。第一节介绍扩散的基本原理。第二节和第三节展示如何构建随机和确定性扩散采样器。第四部分介绍了密切相关的流匹配,可看作是扩散的推广。​第五节,强调实践中最重要的一些设计选择,包括采样器、噪声时间表和参数化方法。

qq_44681809的博客 1万+

7_STM32的串口和调试串口_韦老师物联网课

STM32 的串口 ● USART和UART的区别: ○ USART支持同步通信,该模式有一根时钟线提供时钟 。 ○ STM32F103系列最多有3个通用同步异步收发器( Universal synchronous asynchronous receiver transmitter, USART), 2个通用异步收发器( Universal asynchronous receiver transmitter, UART) ● 串口在嵌入式中经常使用,一般使用UART就足够 作为调试口,打印程序运行的状态信

qq_40600203的博客 6824

华为OD机试双机位C卷-分披萨 (Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【分披萨】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为od机试 - 分披萨。

qq_45776114的博客 1397

初学stm32 ——— 串口通信

起始位数据位(8位或者9位)奇偶校验位(第9位)停止位(1,15,2位)波特率设置图3 传输数据格式。

gdragen_的博客 2029

使用cmd命令查看电脑是不是翻新机 如何查看自己电脑是不是翻新机

最近pdd啥的百亿补贴啊,什么品牌店啊,很多“假一赔十”,绝对“正品”都蹦出来了,很多人拿到以后,也上网查了各种鉴别方式,包括区分是不是翻新机之类的。本人亲自踩坑“pdd品牌店”,“假一赔十”,“绝对正品”等店铺,跟大家分享一下我得鉴别经验(说道分享鉴别经验了,大家也就不用好奇了,我肯定是买到翻新机了,mmp)。 第一步:准备好手机,开始录屏,没有完整的拆箱视频,可能不容易退货退款 第二步:拆箱,查看屏幕划痕(用手机闪光灯看,要不然看不清),然后查看屏幕有没有被擦过的痕迹 第三步:查看USB孔等插口有没有划

weixin_39417324的博客 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

stm32标准库usart1,usrat2,usart3三个串口的配置以及printf重定向(串口输出)

我刚开始学串口时,因为要用到多个串口,自己又懒得改,总是在网上要找半天。下面将stm32的三个串口配置罗列下来,方便大家直接copy。

汘荨的博客 6451

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

STM32学习——串口

STM32学习——串口 USART通用同步异步收发器(Universal Synchronous Asynchronous Receiver Transmitter)是一串行通信设备,可以灵活地与外部设备进行进行**全双工信息交换** UART(Universal Asynchronous Receiver Transmitter),它是在 USART 的基础上裁剪了同步通信功能,只保留异步通信功能我们平时使用的串口通信都是 UART 1.通信接口背景知识介绍 1.1通信双方的两种通信方式 串行通信

乐天的博客 1194

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

STM32笔记之 USART(串口)

写在前面: 本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。 目录 一、串口通讯方式 二、USART收发功能框图 三、USART模式配置 四、代码实现过程 五、printf()函数重定向 六、总工程代码 一、串口通讯方式 这里就不再累赘阐释了,看以前的篇章UART/ US...

夏沫的杂物间 5610

STM32F103串口1,2,3通信收发子程序

USRAT1,USART2,USART3 收发子程序如下。STM32F103C8T6有三个串口,

qq_36272499的博客 577

STM32笔记之 SPI(硬件 or 模拟实现)

写在前面: 本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。 目录 一、SPI协议 二、W25Qxx芯片 三、硬件的 SPI 四、模拟的 SPI 五、对 W25Q64的实际应用 一、SPI协议 在实现 SPI功能之前,我们必选先了解好 SPI协议是怎么实现的,当我们知道它是怎...

夏沫的杂物间 2万+

STM32笔记之 I2C(硬件 or 模拟实现)

写在前面: 本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。 一、I2C协议 还是一样,在实现 I2C之前必须要了解 I2C协议的实现,请看之前的文章:UART/ USRAT、I2C、SPI通信方式扫盲,这里就不费劲再说一遍了 二、AT24Cxx芯片 为了加深对 I2C协议的理解以及...

夏沫的杂物间 1万+

【嵌入式学习笔记】嵌入式入门3——串口USART

串口:即串行通信接口,指按位发送和接收的接口,如:RS-232/422/485等。RS-232接口(DB9)USART:通用同步异步收发器,Universal synchronous asynchronous receiver transmitterUART: 通用异步收发器,Universal asynchronous receiver transmitter,USART/UART都可以与外部设备进行全双工异步通信。

Sunny_Coder的博客 1862

第四天训练

串口(MobaXterm)通用同步异步收发器(USART)2个通用异步收发器(UART)。RTS在硬件流控制时,用于指示本设备准备好可接收数据,低电平说明本设备可以接收数据;CTS在硬件流控制时,用于指示本设备准备好可发送数据,低电平说明本设备可以发送数据;中断系统把CPU内部产生的紧急事件,来自CPU外部的片上外设产生的紧急事件,统称为中断。SW_RX在单线和智能卡模式下接收数据,属于内部引脚,没有具体外部引脚;CK在同步模式时,用于输出时钟;RX数据接收;...

m0_57152022的博客 327

i.MX - RT1052 SPI和 I2C接口

写在前面: 本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。 目录一、SPI1.1 信号线1.2 架构框图1.3 传输1.4 时钟环回1.5 Transactional APIs代码二、I2C2.1 信号线2.2 架构框图2.3 数据收发2.4 Transactional APIs代码 SPI和 I2C协议的分析可以看之前的篇章:UART/USRAT、I2C、SPI通信方式扫盲 一、SPI 1.1 信号

夏沫的杂物间 2513

硬件调试经验总结

这是我个人的第一篇博客,在此记录一下做北斗杯比赛的一些小经验总结,一方面留作自己的备份,另一方面希望可以帮到和我遇到类似问题的人。 MS5611传感器 第一天做的是将MS5611,一个温度和大气压的传感器,在从源代码进行移植过程比较顺利,不过其中u2_print语句不能使用,会产生卡死,注释掉就可以了。数据传输使用的是IIC格式,这个对GPIO口没有要求,只要驱动文件写对就可以。 ESP8...

weixin_43149679的博客 832
下一篇: IIC协议
ShallowGreen
博客等级 码龄7年 53粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值