STM32:USART串口外设(内含:1.USART简介+2.USART基本结构+3.数据帧+4.起始位侦测+5.数据采样+6.波特率发生器)

简介: STM32:USART串口外设(内含:1.USART简介+2.USART基本结构+3.数据帧+4.起始位侦测+5.数据采样+6.波特率发生器)

1.USART简介


2d11b24932e74a2fa23e497a015fd761.png


USART是同步收发器,UART是异步收发器(主要)。


停止位长度:可参考串口时序的终止端与起始端的长度。


同步模式:就是有CLK模式。


智能卡(刷卡),IrDA(红外发光管+红外接收管),LIN(局域网通信协议)等同步模式一般不使用.。


2.USART框图(下一个图是该图的简略版):


585625e8e6b14a65b94ddc8e84ea2f17.png


注:左上角实际需要学习的只有TX和RX引脚。阴影框框为发送数据寄存器和接收数据寄存器。是一个寄存器DR,硬件设计时为发送TDR(只写),接收RDR(只读)。


发送数据寄存器TDR通过观察发送移位寄存器里面没有数据时(TXE置1),将发送数据寄存器TDR给发送移位寄存器。此时TXE=1,但是还没发送,在发送器控制下,一位一位进行移位(低位先行)。同理,接收移位寄存器将数据传递给接受数据寄存器时,也会有一个RXNE,RXNE=1时,即读取数据。


硬件数据流控:防止数据发送太快,导致数据丢失。nRTS是请求发送,是输出脚。nCTS是清除发送,是输入脚,是接收其他的nRTS引脚。


USART中断控制:两个位必不可少,为TXE,RXNE


波特率发生率:可等价于分频器。APB进行分频,得到发送和接收移位的时钟。


2.USART基本结构(该图是上个图的减缩版本):


507d95e7d3bf4cdab092c565c64ce70e.png


波特率发生器:用于产生约定的通信速率。始终来源是PCLK2/1。


>>发送移位寄存器>>的>>是右移标志,低位先行。


写入DR时,数据为写入数据寄存器。读取DR时,数据为接收移位寄存器。


3.数据帧:


9b77e3b9f4c346c194298b7eb478ff58.png


字长:数字长度。包含校验位。


空闲帧:从头到尾都为1。 断开帧:从头到尾都为0。 空闲帧,断开帧是局域网协议里使用。


优先选择9位字节有校验;8位字节无校验。此时每个数据帧正好传输一个字节。


4.起始位侦测:


9973958262464f77b443053a5d5571ab.png


起始位侦测是对噪声的处理。


16位的侦测位。且如图侦测位中,如果3,5,7,有至少有2个0 或8,9,10至少有两个0,则可以使用该信号(有两个0时,可以使用,但是NE位置1,提示有噪声)。


5.数据采样:

9c480a176ca0489f82fef77e68dcddb9.png


没有噪声时,数据采样的8,9,10都为1.如果有噪声干扰,则8,9,10采样的数据按2:1。(2次1,1次0则为1)此时噪声标志位NE置1.


6.波特率发生器:


2d1381cf6a824e35a4cf97f0f16c970a.png


波特率发生器就是分频器。


DIV分为整数部分和小数部分。此处的/16是在数据采样时16位只采样1位(1或0)对应,即16位对1位。


波特率计算。例:USART=9600,


9600=72M/(16*DIV)=72 000 000/(16*DIV)


解得DIV=468.75,转换为2进制为111010100.11(整数部分,小数部分补零不再赘述)


注:波特率计算STM32的库函数会自动计算。


9b877ae8b83d48da9986feb13faa4420.png


J2为USB端口,USB四根线分别为GND,D+,D-,VCC(5V),所以需要CH340转换。转换后输出为TXD,RXD(串口协议)。通过J1排针引出。


如左上图,VCC+5V的电,通过稳压管稳压后进行降压,变为3.3V。此时排针J1有3.3V和+5V。此时,跳线帽在4~5脚或者在5~6V。选择供电和通信协议。


PWR是电源指示灯,


数据传输时,TXD,RXD会闪烁。


参考手册可看25章.同步异步收发器


e532948426e74d77ac147399f9f0e1c2.png


相关文章
|
6月前
|
传感器
【STM32】I2C练习,SHT3X温度传感器的数据读取
【STM32】I2C练习,SHT3X温度传感器的数据读取
104 0
|
4月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
683 0
|
4月前
STM32CubeMX 串口收发一帧数据
STM32CubeMX 串口收发一帧数据
54 9
|
4月前
|
芯片
STM32CubeMX 串口数据收发
STM32CubeMX 串口数据收发
137 2
|
4月前
|
监控
stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)
stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)
257 0
|
5月前
|
开发者
【经典案例】使用HAL库配置STM32F407的SPI外设
在嵌入式系统开发中,STM32F407是一款广泛应用的微控制器,而SPI(Serial Peripheral Interface)是一种常用的通信接口。本文将详细介绍如何使用STM32的硬件抽象层(HAL)库配置STM32F407的SPI外设,并提供完整的代码示例。
543 1
|
5月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
422 2
|
6月前
|
传感器
STM32标准库ADC和DMA知识点总结-1
STM32标准库ADC和DMA知识点总结
|
5月前
|
IDE 开发工具
使用STM32F103标准库实现自定义键盘
通过本文,我们学习了如何使用STM32F103标准库实现一个简单的自定义键盘。我们首先初始化了GPIO引脚,然后实现了一个扫描函数来检测按键状态。这个项目不仅能够帮助我们理解STM32的GPIO配置和按键扫描原理,还可以作为进一步学习中断处理和低功耗设计的基础。希望本文对你有所帮助,祝你在嵌入式开发的道路上不断进步!
502 4