news 2026/8/21 10:01:05

stm32usart通信接口

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
stm32usart通信接口

1.目的:将一个设备的数据传输到另一个设备,扩展硬件系统

2.通信协议:指定通信的规则,通信双方按照协议规则进行数据收发

1.全双工:双方能够同时进行双向通信(一班有两根通信线,一根发送,一根接收)

2.单工:只能从一个设备到另一个设备

3.时钟特性:接收方可以在时钟信号的指引下进行采样,无时钟线需要约定一个频率(异步通信,还需要加帧头和帧尾,进行采样位置对齐)

4.电平特性:

1.单端:引脚高低电平都是对GND的电压差,所以通信双方必须共地(把GND接在一起)

3.串口通信:单片机的串口可以使单片机与单片机,单片机与电脑与各种模块互相通信

4.串口模块

1.USB转串口:

1.搭载了可以把串口协议转换为USB协议的CH340芯片,实现单片机与电脑的通信

2.陀螺仪

1.可以测量角速度,加速度这些姿态参数

2.左右各有4个引脚,一边是串口,另一边是I2C

3.蓝牙串口模块

1.模块中的芯片可以和手机互联

5.硬件电路

1.TX发送RX接收

2.TX,RX需交叉连接

3.当只需单向数据传输时,可以只接一根通信线

4.当电平标准不一致时,需要加电平转换芯片

6.电平标准

1.电平标准是数据1和0的表达式,是传输线缆中认为规定的电压与数据的关系

2.常用电平标准

1.TTL:+3.3或+5为1,0伏表示0

2.RS232:-3--15为1,+3-+15为0

3.RS485:两线压差+2-+6为1,-2--6为0(差分信号)

7.串口参数及时序

1.波特率:串口通信的速率

2.起始位:标志一个数据帧的开始,固定为低电平

3.数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行

4.校验位:用于数据验证,根据数据位计算而来(奇校验在传输数据为末尾补1,保证1为奇数,接收方验证1的个数还是奇数,就认为数据没出错,偶校验同理)

5.停止位:用于数据帧间隔,固定为高电平

6.串口时序波形

8.usart简介

1.usart是stm32内部集成硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,可从tx发射,也可自动接收rx的数据帧拼接为一个字节数据,存放在数据寄存器里

2.自带波特率发生器,最高达4.5MBits

3.可配置数据位长度(8/9),停止位长度(0.5/1.5/2)

4.可选校验位(无校验/奇校验/偶校验)

5.支持同步模式,硬件流控制,DMA,智能卡,IrDA,LIN

9.电路示意图

1.TDR和RDR共用一个地址

2.nRTS是输出脚,nCTS是输入脚(n意思是低电平有效)

接线方法:

1.找另一个支持流控的串口,TX接到这个串口RX,RTS要输出一个能不能接收的反馈信号,接到对方的CTS,能接收时,RTS就置低电平,请求对方发送,对方CTS接收到之后,就可以一直发,处理不过来时,RTS就会置高电平,对方CTS接收到之后,就会暂停发送,知道接收数据寄存器被读走,RTS置低电平,新的数据才会继续发送

2.CTS和RTS要交叉连接

3.SCLK是用于产生同步的时钟信号,配合发送移位寄存器输出,发送寄存器没移位一次,同步时钟电平就跳变一个周期(只支持输出,不支持输入)

用途

1.兼容别的通信协议

2.做自适应波特率

4.唤醒单元

1.作用:实现串口挂载多设备,发送指定地址时,此设备唤醒开始工作

5.中断输出控制:配置中断是否能通向NVIC

1.中断申请位:状态寄存器的各种标志位(TXE发射寄存器空,RNXE接收寄存器非空,用于判断发送状态和接收状态)

6.波特率发生器(分频器):APB时钟进行分频,得到发送和接收移位的时钟

1.时钟输入:fPCLKx(x=1或2,USART挂载在APB2(72M)其他的USART挂载在APB1(36M))

2.进行分频:除一个USARTDIV的分频系数,分频完成后,再除以16,得到发送器和接收器时钟,通向控制部分

3.TE为1,发送器失能,发送的波特率就有效,RE为1,接收器使能,接收部分的波特率就有效

10.基本结构图

1.寄存器往右移,低位先行

2.数据由数据寄存器转到移位寄存器时,会置一个TXE标志位,判断标志位就可以知道是不是可以写下一个数据

3.写入DR寄存器时数据走上面这条路,进行发送,读取时走下面这条路,进行接收

11.数据帧

再程序中配置8位字长和9位字长(数据位长度)进行波形对比

1.stm32的串口可以配置停止位长度为0.5,1,1.5,2四种,四种参数的区别是停止位市场不一样

2.起始位侦测

1.当输入电路侦测到一个数据起始位后,就会以波特率的频率,连续采样一帧数据,同时,从起始位开始,采样位置就要对齐到位的正中间(第一位对齐,后面肯定对齐)

2.采样时钟会以波特率16倍频率进行采样(1位的时间进行16次采样)

3.开始置1,采到0之后证明出现下降沿

4.数据采样

1.从1-16,是一个数据位时间的长度(在1个数据位,有16个采样时钟)

2.数据采样过程判定标准为2:1(两次以上为1返回1,两次以上为0返回0)

3.波特率发生器(分频器)

1.发送器和接收器的波特率有波特率寄存器BRR里的DIV决定

2.计算公式:波特率=fPCLK2/1/(16*DIV)

12.库函数

1.void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct);
void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct);:用于配置同步时钟输出,包括时钟是否要输出,时钟的极性相位等参数

2.void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState);:可开启USART到DMA的触发通道

3.void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);:发送和接收数据

13.串口接收有查询和中断两种方法

1.查询

1.流程:在主函数里不断判断RXNE标志位,置1则说明收到数据,在读取DR寄存器即可

2.中断

1.流程:开启RXNE标志位到NVIC输出

2.在if函数内若读取DR则自动清除,若没读取则手动清除

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/21 10:00:42

Qt文件浏览器进阶:QFileSystemModel与QTreeView深度定制与性能优化

在 Qt C 开发中,你是否遇到过这样的困境:项目需要一个文件浏览器,你不想从零开始造轮子,但网上找到的示例要么过于简陋,要么耦合太深难以复用?或者,你尝试使用 QFileSystemModel 和 QTreeVie…

作者头像 李华
网站建设 2026/8/21 10:00:37

DeepSeek Harness智能体框架实战:从零部署大肥鱼宠物插件

如果你正在寻找一个能让 DeepSeek 模型像“大肥鱼”一样,在你桌面上游来游去、随时待命、帮你处理各种编程和文本任务的智能助手,那么你来对地方了。 最近,一个名为 DeepSeek Harness 的开源项目及其配套的 “大肥鱼宠物插件” 在开发者…

作者头像 李华
网站建设 2026/8/21 9:57:29

GEO行业服务商怎么选?六家代表企业多维度实测!差距明显

一、为什么要做本次横向对比2026 年 GEO 行业快速扩张,市面上宣称可提供 GEO 服务的机构超百家,但绝大多数仅为传统 SEO 更换业务名称,直接采购第三方 SaaS 工具贴牌运营,真正实现全栈自主研发的服务商数量稀少。企业仅凭宣传话术…

作者头像 李华
网站建设 2026/8/21 9:49:53

CachyOS:极致性能的Arch Linux发行版安装与优化指南

这次我们来看一个有点“凡尔赛”的 Linux 发行版问题:CachyOS。它不是一个新模型或AI工具,而是一个基于 Arch Linux 的、以极致性能优化为卖点的操作系统。用户反馈的核心矛盾点很有趣——“它太快了,以至于我遇到了问题”。这背后反映的是Ca…

作者头像 李华
网站建设 2026/8/21 9:49:40

TensorRT nvinfer配置参数模板:从核心原理到实战调优指南

1. 项目缘起:为什么需要一个 nvinfer 配置参数模板? 在基于 NVIDIA TensorRT 进行深度学习模型推理加速的工程实践中, nvinfer 配置参数是连接模型与硬件、决定推理性能与精度的核心枢纽。无论是使用 DeepStream SDK、TensorRT 的 Python/C…

作者头像 李华