【嵌入式学习笔记】---- 串口通信

2024-09-04 15:44

本文主要是介绍【嵌入式学习笔记】---- 串口通信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 串口

1.1 什么是串口

即串行通信接口,如:RS-232和RS-485

1.2 物理层

1.2.1 RS-232信号线

在旧式计算机中一般会有RS-232标准的COM口(也被称为DB9接口),如图:
image

信号线功能说明见下表:

引脚号名称符号功能说明
1载波检测DCD检测是否收到载波信号
2接收数据RXD接受数据信号,即输入
3发送数据TXD发送数据信号,即输出
4数据终端就绪DTR向对方告知本机是否准备好
5信号地GND共地
6数据设备就绪DSR向对方告知本机是否处于待命状态
7请求发送RTS请求发送
8允许发送CTS回应RTS请求
9响铃指示RI表示线路已接通

实际使用过程中,一般只使用RXD,TXD,GND三条信号线,就可实现数据传输

1.2.2 电平标准

通信标准电平标准
CMOS电平(3.3V)逻辑0:0V;逻辑1:3.3V
TTL电平(5.0V)逻辑0:0-0.5V;逻辑1:2.4-5.0V
RS-232电平逻辑0:+3至+15V;逻辑1:-15至-3V

CMOS/TTL电平不能直接与RS-232电平直接交换信息

1.2.3 通信结构图

RS-232通信:
image
STM32串口与电脑USB口通信:
image

1.3 协议层

串口数据包的组成:
image

1.3.1 起始位

必须占一个位长,且为逻辑0电平

1.3.2 有效数据位

起始位之后,可选5、6、7、8、9个位长,最低有效位在前,最高有效位在后

1.3.3 校验位

可选占一个位长,也可以没有该位

奇偶校验
奇校验:数据位中“1”的个数与校验位中“1”的个数之和应该为奇数
偶校验:数据位中“1”的个数与校验位中“1”的个数之和应该为偶数

②代码和校验:
发送方将所有要发送的数据块求和(或各字节异或),产生一个字节的校验字符(校验和)附加到数据块末尾。接收方接收数据的同时,对数据块求和(或各字节异或),将结果与发送方的校验和进行比较,相符表示传输正常

③0、1校验:
0校验是不管有效数据中的内容是什么,校验位总为“0”,1校验是校验位总为“1”

④无校验:数据包中没有校验位

1.3.4 停止位

可有0.5、1、1.5、2个位长。保持逻辑1电平

2 STM32的USART介绍

2.1 USART简介

Universal synchronous asynchronous receiver transmitter:通用同步异步收发器

Universal asynchronous receiver transmitter:通用异步收发器

2.2 通信流程图

image

2.3 波特率计算

波特率是指数据信号对载波的调制速率
波特率 = f P L C K 16 ∗ U S A R T D I V 波特率=\frac{f_{PLCK}}{16*USARTDIV} 波特率=16USARTDIVfPLCK

  • 其中 f P L C K f_{PLCK} fPLCK是USART的时钟
  • USARTDIV是存放在波特率寄存器(USART_BRR)的一个无符号定点数;DIV_Mantissa[11:0] 位定义 USARTDIV 的整数部分,DIV_Fraction[3:0] 位定义USARTDIV 的小数部分

使用寄存器操作设置波特率

波特率为115200;时钟为72MHz,得USARTDIV=39.0625

点击查看代码
uint16_t mantissa;
uint16_t fraction;
mantissa=39;
fraction=0.0625*16+0.5=0x01;  /*根据波特率公式计算,加0.5是进行四舍五入,减小误差*/
USART->BRR=(mantissa << 4)+fraction;

由于左移4位和乘以16倍是等价的,故可直接对USARTDIV进行操作即可,无需分整数小数,即
USART->BRR=USARTDIV * 16 + 0.5

这篇关于【嵌入式学习笔记】---- 串口通信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136369

相关文章

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

基于C#实现MQTT通信实战

《基于C#实现MQTT通信实战》MQTT消息队列遥测传输,在物联网领域应用的很广泛,它是基于Publish/Subscribe模式,具有简单易用,支持QoS,传输效率高的特点,下面我们就来看看C#实现... 目录1、连接主机2、订阅消息3、发布消息MQTT(Message Queueing Telemetr

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen