当前位置: 首页 > news >正文

单片机(STM32-串口通信)

一、串口通信基础概念

串口通信(Serial Communication)是一种在计算机和外部设备之间进行数据传输的通信方式。它通过串行方式逐位传输数据,是最基本和常用的通信接口之一。

主要特点

1. 串行传输

(1)数据按位顺序传输,一次只能传输一位

(2)相比并行通信,串口通信使用更少的线路

(3)传输距离可以更远,抗干扰能力更强

2. 异步通信

(1)发送方和接收方使用独立的时钟

(2)通过起始位和停止位来同步数据

(3)不需要共享时钟信号

二、通信基础 

1.时钟信号划分

1.1通信方式

异步通信

无需时钟信号,数据通过起始位和停止位同步。

同步通信

需要时钟信号同步数据传输。

1.2传输方式

同步传输

(1)发送方和接收方使用相同的时钟

(2)数据传输效率高需要时钟同步机制

异步传输

(1)发送方和接收方使用独立的时钟

(2)通过起始位和停止位同步

(3)实现简单,但效率较低

(4)但是并不是说通信的过程不同步(UART)

2.数据传输方式

2.1通信方式

串行通信

使用串行传输的方式传输数据

并行通信

使用并行传输的方式传输数据

2.2传输方式

串行传输

(1)数据按位顺序传输

(2)只需要一条传输线

(3)传输距离远,成本低

(4)速度相对较慢

并行传输

(1)多位数据同时传输

(2)需要多条传输线

(3)传输距离短,成本高

(4)速度相对较快

3.通信方向划分

单工:要么收,要么发,只能做接收设备或者发送设备。比如收音机

一根信号线只能单向发送或单向接收

半双工:可以收,可以发,但是不能同时收发, 比如对讲机

一根信号线可以接收数据也可以发送数据,但是两者不能同时进行

全双工:可以在同一时刻既接收,又发送。 手机

两根信号线,一根发送数据,另一根接收数据,真正实现同时收发数据,速度快

4.常见通信总结

通信标准引脚说明通信方式通信方向
UART(通用异步收发器)TXD: 发送端<br>RXD: 接受端<br>GND: 公共地异步通信全双工
单总线(1-wire)DQ: 发送/接受端异步通信半双工
SPISCK: 同步时钟<br>MISO: 主机输入,从机输出<br>MOSI: 主机输出,从机输入<br>SS: 片选同步通信全双工
I2CSCL: 同步时钟<br>SDA: 数据输入/输出端同步通信半双工

 三、UART

1.通用同步/异步收发器

USART:通用同步/异步收发器是一种集成在微控制器或通信芯片中的硬件模块,它几支持同步通信,也支持异步 通信,但是在STM32中一般是同步

2.串口通信协议

2.1.概念

串口通信协议是一种数据逐位(bit)依次传输的通信方式,常用于点对点的短距离数据交换。

最常见的串口通信协议是RS-232、RS-485等。

2.2.基本特性

异步通信:无需专用时钟线,数据帧通过起始位和停止位同步。

全双工:可以同时进行收发(如UART)。

点对点:一般只连接两个设备。

2.3.基本属性

波特率:衡通信速度,表示美妙传送点bit的个数

数据位:表示通信中实际数据位的个数,一般是5、7、8位

起始、停止位:数据包从起始位开始,到停止位结束。停止位置在的典型的值为1,1.5和2位。

2.4.奇偶校验位:在串口通信中一种简单的检错方式(在每个数据字节后面增加1位校验位,用于检测数据在传输过程中是否发生了单比特错误。)

3.USART结构图

3.1.发送流程:

(1)CPU将数据写入USART_TDR
(2)硬件自动将TDR数据复制到移位寄存器
(3)移位寄存器逐位将数据发送到TX引脚

3.2.接收流程:

(1)数据到达RX引脚
(2)移位寄存器逐位收集数据
(3)数据完整后硬件自动转义至RDR

4.相关寄存器

4.1. 数据接收寄存器(Receive Data Register)

(1)作用:用于存放USART接收到的数据。

(2)工作原理:当USART模块收到一个字节的数据后,会自动将其存入数据接收寄存器。CPU可以从该寄存器读取数据。

(3)数据接收寄存器32位代表的含义:

4.2. 数据发送寄存器(Transmit Data Register)

(1)作用:用于存放即将通过USART发送的数据。

(2)工作原理:CPU将要发送的数据写入该寄存器,USART模块会自动将其发送出去。如图:

(3)数据发送寄存器32位代表的含义:

4.3. 中断和状态寄存器(Interrupt and Status Register)

(1)作用:用于指示USART的各种状态(如发送完成、接收完成、溢出、错误等),并控制中断的使能与响应。

(2)中断和状态寄存器32位代表的含义:

(3)常见标志位:

TXE(Transmit Data Register Empty):发送寄存器空,可以写新数据

RXNE(Read Data Register Not Empty):接收寄存器非空,有新数据可读

TC(Transmission Complete):发送完成

ORE(Overrun Error):溢出错误

(4)例如第七位是寄存是发送寄存器是否为空的状态:

4.4. 波特率寄存器(Baud Rate Register)

(1)作用:用于设置USART通信的波特率(即每秒传输的比特数)。

(2)波特率寄存器32位代表的含义:

4.5.总结

寄存器名称作用常见寄存器名典型操作
数据接收寄存器存放接收到的数据RDR读取数据
数据发送寄存器存放待发送的数据TDR写入数据
中断和状态寄存器状态指示和中断控制ISR判断状态/响应中断
波特率寄存器设置通信速率BRR设置波特率

五、实现串口通信

关键在于:通过寄存器实现输出数据,每一个代码

还有代码必须写在特定位置才行

1.一秒发送一字节数据

2.封装进函数可以直接调用输出

3.修改自写函数实现通信功能

打开连接串口,烧录程序后,复位后,串口就可以接收到数据。

六、ptintf重定向

int  printf(const char * format,...)

printf函数底层调用的是fputc函数,fputs是将要发送的数据写入到标准输出流stdout

int fputc(int /*c*/, FILE * /*stream*/) 

因此如果想让printf将数据输出到串口,需要重写fputc

1.添加串口通信

2.设置代码输出名字和格式

3.勾选选项

4.为你的STM32工程启用 MicroLIB 微型C库

5.导入库函数

6.重写函数

七、scanf重定向

1.添加头文件

2.重写fgetc函数

八、HAL函数

1.串口发送函数

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout)
功能:以阻塞模式通过串口发送数据
参数:UART_HandleTypeDef * huart 设备的句柄(用的是哪个串口)uint8_t * pData  要输出的缓存区首地址 (要发的数据)uint16_t Size  发送的数据量	(发送多少个字节的数据)uint32_t Timeout  超时时间	(给他发送的最长时间)
返回值:发送状态

2.串口接收函数

和重定向的scanf最大区别在于:这个函数不会阻塞进程,缺点就是有时候可能会取不到值。

HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)功能:以阻塞模式通过串口接收数据参数:UART_HandleTypeDef * huart 设备的句柄uint8_t * pData 输入缓存区首地址 uint16_t Size  接收的数据量uint32_t Timeout  超时时间(会等待这些时间来接收数据)返回值:接收状态
http://www.dtcms.com/a/278929.html

相关文章:

  • IP相关
  • CSS `:root` 伪类深入讲解
  • Java final 关键字
  • iOS APP 上架流程:跨平台上架方案的协作实践记录
  • STM32F1_Hal库学习UART
  • 【脚本系列】如何使用 Python 脚本对同一文件夹中表头相同的 Excel 文件进行合并
  • 设计模式--工厂模式
  • SSE(Server-Sent Events)和 MQTT(Message Queuing Telemetry Transport)
  • 多线程--单例模式and工厂模式
  • 研究人员利用提示注入漏洞绕过Meta的Llama防火墙防护
  • 隐藏源IP的核心方案与高防实践
  • 缺乏项目进度验收标准,如何建立明确标准
  • 基于STM32的智能抽水灌溉系统设计(蓝牙版)
  • 几种上传ipa到app store的工具
  • C#/.NET/.NET Core技术前沿周刊 | 第 46 期(2025年7.7-7.13)
  • 当前(2024-07-14)视频插帧(VFI)方向的 SOTA 基本被三篇顶会工作占据,按“精度-速度-感知质量”三条线总结如下,供你快速定位最新范式
  • 文本生成视频的主要开源模型
  • Redis客户端编程
  • python之Scikit-learn章节
  • 【日常技能】excel的vlookup 匹配#N/A
  • 《大数据技术原理与应用》实验报告二 熟悉常用的HDFS操作
  • 【王树森推荐系统】聚类召回
  • git 访问 github
  • 多用户图书管理系统
  • 张艺兴探班RED女团一周年舞台,见证21岁的梦想落地生根
  • sqli-labs靶场通关笔记:第11-16关 POST请求注入
  • 文献查找任务及其方法
  • 车载诊断框架 --- 车载诊断GuideLine
  • 【t检验】用奶茶店排队案例解释
  • urlencode、html实体编码、unicode