第三章、USART
常见问题通讯定义 ?通讯分类 (有无时钟源、通讯方式、传输方向)?
波特率的本质:隐形的时钟
电平转换 ?TTL、COMS、RS232、RS485、USB电平标准 ?
STM32串口与RS-232通讯 ?
STM32串口与电脑USB通讯 ?
USART 含义 ?为什么使用异步方式 ?USART 通讯框图 ?
## 1、USART USART是一种通用的串行通信接口,支持同步和异步数据传输。它用于微控制器和其他设备之间的串行通信。为什么使用异步方式:
简单性:异步通信不需要时钟信号,简化了硬件设计。
灵活性:可以在不同的波特率下进行通信,适应多种设备。
成本:减少了对额外时钟线的需求,降低了成本和复杂性。
USART的主要组成部分:
数据寄存器:用于存储要发送或接收的数据。
控制寄存器:配置USART的工作模式、波特率等。
状态寄存器:提供USART的状态信息,如发送完成、接收完成等。
2、USART 通讯协议
记忆关键:1 8 n 1 、9600/115200
也就是一个停止位,8个数据位,无奇偶校验位;常用波特率表示每秒传输的比特数
STM32串口编程方式? 轮询、中断、DMA ?
3、什么是DMA ?作用 ?通道、仲裁、方向、字节长度、循环/普通?
通道:DMA控制器通常有多个通道,每个通道可以独立地处理一个外设与内存之间的数据传输。
仲裁:在多个外设请求DMA服务时,DMA控制器需要进行仲裁,以决定哪个外设可以使用DMA通道。
方向:
内存到外设:数据从内存传输到外设。
外设到内存:数据从外设传输到内存。
字节长度:DMA可以配置为传输不同长度的数据(如字节、半字、字等),以适应不同外设的需求。
循环/普通:
普通模式:DMA传输完成后,控制器会停止,CPU需要重新启动传输。
循环模式:DMA可以在传输完成后自动重新启动,适合于需要持续数据流的应用,如音频播放。
4、UART
(Universal Asynchronous Receiver/Transmitter) 代表通用异步收发器(异步串行通信协议中的一种)。它是微控制器内部的硬件外围设备。能够将传入和传出的数据转换为串行二进制流。使用串行到并行转换的方式,能将从外围设备接收的8位串行数据(8位)转换为并行形式(一个字节)。
**UART(通用异步收发传输器)和USART(通用同步异步收发传输器)**是两种串行通信协议,主要区别:
同步与异步:
UART:仅支持异步通信。数据在没有时钟信号的情况下传输,发送和接收设备必须在相同的波特率下工作。
USART:支持同步和异步通信。可以使用外部时钟信号进行同步通信,也可以像UART一样进行异步通信。
数据传输方式:
UART:数据以字节为单位传输,通常使用起始位、数据位、校验位和停止位。
USART:除了支持UART的传输方式外,还可以在同步模式下使用时钟信号进行数据传输,允许更高的传输速率和更可靠的数据传输。
应用场景:
UART:广泛用于简单的串行通信,如微控制器与计算机之间的通信。
USART:适用于需要更高数据传输速率或更复杂通信协议的场合,如在某些工业应用中。
同步/异步收发器
通讯:对话的实现,将一方的信息,以一个合适的方式合理准确地传送给另一方
通信的分类:全双工、半双工、单工 串行/并行 同步/异步
单工:通道是唯一的,接收方Rx 和 发送方Tx身份是唯一的
全双工:通道同时发生
半双工:通道唯一,同一时间只有一个方向的信号传递
5、几个不同的电平标准
1.TTL(晶体管-晶体管逻辑)
逻辑0:0V到0.8V
逻辑1:2V到5V
2.CMOS(互补金属氧化物半导体)
逻辑0:0V到0.3V(相对于电源电压)
逻辑1:0.7V到VDD(电源电压,通常为3V或5V)
3.RS-232
逻辑0(标记状态):+3V到+15V
逻辑1(空闲状态):-3V到-15V
4.LVTTL(低电压TTL)
逻辑0:0V到0.8V
逻辑1:1.5V到3.6V
5.LVCMOS(低电压CMOS)
逻辑0:0V到0.3V(相对于电源电压)
逻辑1:0.7V到VDD(电源电压,通常为1.8V、2.5V或3.3V)
6.USB 2.0
逻辑0(低电平):
电压范围:0V到0.3V
逻辑1(高电平):
电压范围:3.0V到5.0V
接线是需要交叉相连的
6.Stm32串口与RS-232通讯
通讯协议:串口通讯协议
数据线:空闲时,为高电平
起始位:由高电平变成低电平
数据位:7/8/9/10
校验位:奇校验/偶校验
停止位:1/1.5/2 低电平变高电平
1.详细解释
起始位(Start Bit:UART通信的起始位始终为逻辑低电平(0),用于标识数据传输的开始。
数据位(Data Bits):UART通信可以使用5、6、7或8个数据位来传输数据。数据位按照位顺序从最低位到最高位传输。
奇偶校验位(Parity Bit):可选的奇偶校验位用于检测和纠正数据传输中的错误。校验位可以是奇校验(使得数据位的总数包含奇数个1)或偶校验(使得数据位的总数包含偶数个1)。
停止位(Stop Bit):停止位是UART通信的结束位,始终为逻辑高电平(1)。它标识数据传输的结束,并允许接收器进行下一次数据接收的准备。
波特率(Bps): 每秒钟传送的码元数(一个数字脉冲)
USART的框图,主要需要了解数据的传输,与外部的连接以及波特率控制器
UART的实验部分:首先是串口交互的实验
其次是串口控灯实验
最后是串口打印实验
打印:transit或者重定向的方法:用printf进行格式化输出,同时也具有方便的特点
重定向这儿的本质:将要发送的数据,存放到uart的Tx_Data_reg这个寄存器当中
2.Uart 接收和发送思路
PC串口助手发送一个字符串-----G030接收到字符串,并存放到rx数组中,将字符串发送出去—PC中的串口助手显示字符串(将rx中的字符串打印到串口助手的显示界面)
这儿代码存在的问题:发送一次,就不停地打印(因为rx中一直有数据),为了解决这个,引入memset函数,但是还是在空打印,所有再引入if(rx[0]==0)
6、实验
1、串口轮询实验
HAL_UART_Receive()
HAL_UART_Transmit()
2、printf/scanf() 重定向
3、串口控灯
Strstr()
串口控灯实验:
需求:由串口发送指令去控制单片机上的led的亮/灭
“led1_0n” -> led1亮 “led2_on” ->led2亮
流程:串口发送指令,然后是G030接收到指令,并存放在rx数组当中,接着是,用字符串比较函数:strstr,strcmp。。。。。最后是在符合判断的条件下,执行相关应用
” -> led1亮 “led2_on” ->led2亮
流程:串口发送指令,然后是G030接收到指令,并存放在rx数组当中,接着是,用字符串比较函数:strstr,strcmp。。。。。最后是在符合判断的条件下,执行相关应用
[外链图片转存中…(img-7i7tOBdO-1726622404136)]
[外链图片转存中…(img-dAtFrdqR-1726622404136)]