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

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

相关文章

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

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. 证书获