嵌入式 串口通信

目录

 1、通信的基本概念

1.1 串行通信

1.2  并行通信 

2、串行通信的特点

2.1 单工

2.2 半双工

2.3 全双工 

3、串口在STM32的引脚 

4、STM32的串口的接线 

4.1  STM32的串口1和电脑通信的接线方式

4.2  单片机和具备串口的设备连接图

5、串口通信协议

6、串口通信速率

7、串口代码编写

7.1  开启GPIOA/USART1的时钟电源

7.2  将PA9和PA10设置为复用模式

 7.3 设置USART1相关参数

7.3.1 波特率

7.3.2 使能发送接收功能 

7.3.3 使能USART1进行工作 

7.3.4 编写发送接收数据函数 


前面学习了I/O引脚的三种模式的输入模式和输出模式,还有复用功能模式没有学习到,那么我这个章节的串口就是使用I/O引脚的复用功能模式。

输入功能模式:---按键

输入浮空空闲状态(默认状态)的电平不确定,由外部电路决定

输入上拉默认状态为高电平

输入下拉默认状态为低电平

模拟输入捕捉外部输入的高/低电平模拟信号

输出功能模式:-----LED&beep

开漏输出只能输出低电平

推挽式输出可以输出高低电平

复用功能模式:----串口

推挽式输出复用功能:片上外设可以输出高低电平,数据不会丢失

开漏输出复用功能片上外设只能输出低电平,数据会丢失

 1、通信的基本概念

通信???

计算机与外部的设备进行数据信息交换(发送和接收)称为通信

按数据的交换传播介质方式,可将通信分为并行和串行通信

1.1 串行通信

所传送数据的各位按顺序一位一位地发送或接收。

优缺点:接线简单,灵活,缺点速度慢

 

 

1.2  并行通信 

所传送数据的各位同时发送或接收。一般数据线为8或16/24

 

 优缺点:速度快,缺点占用引脚资源多

2、串行通信的特点

串口是属于什么通信方式呢???串行通信

串行通信的方式:

有两根数据线,按数据线的工作模式可分为:单工、半双工、全双工

2.1 单工

数据在甲机和乙机之间只允许单方向传送。两机之间只需 1 条数据线

 典型例子:遥控器

2.2 半双工

数据在甲机和乙机之间允许双方向传送,但只能分时复用,因而两机之间只需 1 条数据线

典型例子:对讲机

2.3 全双工 

甲、 乙两机之间数据的发送和接收可以同时进行, 全双工形式的串行通信必须使用 2 条数据线

典型例子:数据线、手机通信

3、串口在STM32的引脚 

串口的引脚在stm32中的引脚:STM32的串口有很多个,如下图

 

4、STM32的串口的接线 

目标:我们现在只学习使用stm32f103r8t6的串口1(USART1)和电脑进行简单的数据通信

4.1  STM32的串口1和电脑通信的接线方式

 

4.2  单片机和具备串口的设备连接图

串口1的代码编写:USART1-TX:PA9      USART1-RX:PA10

每一个引脚都支持三种模式:输出模式、输入模式、复用模式

PA9:输出模式、输入模式、复用模式

PA10:输出模式、输入模式、复用模式

5、串口通信协议

 

串口通信协议:

起始位: 1bit

数据位: 8bit

停止位: 1bit

1+8+1=10bit

每传输一个字节数据,必须由10个位构成

6、串口通信速率

概念:发送数据的速度:

传送速率是指数据传送的速度。用 b/s 或 bps( 比特/秒)表示, 称为比特率。 在二进制的情况下, 比特率与波特率数值相等, 因而在单片机的串行通信中, 常称为波特率。

40GB高速流量,超了40GB高速流量之后下降为1Mbps---》1M/8=128KB

常用的串口波特率:9600/S     115200/S

比如9600表示串口1秒钟传输9600个比特位等价于串口传输多少字节???

9600/10 = 960 byte/s

7、串口代码编写

7.1  开启GPIOA/USART1的时钟电源

 

7.2  将PA9和PA10设置为复用模式

 

 

 7.3 设置USART1相关参数

7.3.1 波特率

 

假设你要设置波特率为9600,那么你要写入BRR的值计算如下:

72Mhz=72000000hz  

72000000/9600/16=468.75你要写入BRR的值

468.75

 

7.3.2 使能发送接收功能 

 

 

 1位起始位,8位数据位/1位停止位都已经默认了,所有不用写代码控制

 

7.3.3 使能USART1进行工作 

 

7.3.4 编写发送接收数据函数 

串口1发送和接收数据的原理:

 

原理总结:

发送数据之前,必须等待发送数据寄存器为空,才可以发送数据

读数据之前,必须等待接收数据寄存器不为空,才可以读取数据

怎么知道发送数据什么时候为空,接收数据寄存器什么时候不为空呢???

通过SR状态寄存器,里面记录着串口1的状态

发送数据之前,要判断并等待SR寄存器的位7/6的值为1,才可以发送数据

 

 

 

 

读数据之前,要判断并等待SR寄存器的位5的值为1,才可以读取数据

 

 下载代码。进行数据的发送和接收验证

 CH340驱动安装:

 串口助手软件使用:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/74.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux进程管理

进程管理 进程是启动的可执行程序的一个指令 1、进程简介 (1)进程的组成部分 已分配内存的地址空间安全属性,包括所有权凭据和特权程序代码的一个或多个执行线程进程状态 (2)程序和进程的区别 程序是一个静态的二进制…

第十四届蓝桥杯第三期模拟赛 C/C++ B组 原题与详解

文章目录 一、填空题 1、1 找最小全字母十六进制数 1、1、1 题目描述 1、1、2 题解关键思路与解答 1、2 给列命名 1、2、1 题目描述 1、2、2 题解关键思路与解答 1、3 日期相等 1、3、1 题目描述 1、3、2 题解关键思路与解答 1、4 乘积方案数 1、4、1 题目描述 1、4、2 题解关…

28岁小公司程序员,无车无房不敢结婚,要不要转行?

大家好,这里是程序员晚枫,又来分享程序员的职场故事了~ 今天分享的这位朋友叫小青,我认识他2年多了。以前从事的是土木行业,2年前找我咨询转行程序员的学习路线和职业规划后,通过自学加入了一家创业公司,成…

分享几个常用的运维 shell 脚本

今天咸鱼给大家分享几个不错的 Linux 运维脚本,这些脚本中大量使用了 Linux 的文本三剑客: awkgrepsed 建议大家这三个工具都要了解并最好能够较为熟练的使用 根据 PID 显示进程所有信息 根据用户输入的PID,过滤出该PID所有的信息 #! /b…

第十四届蓝桥杯三月真题刷题训练——第 11 天

目录 第 1 题:卡片 题目描述 运行限制 第 2 题:路径_dpgcd 运行限制 第 3 题:字符统计 问题描述 输入格式 输出格式 样例输入 样例输出 评测用例规模与约定 运行限制 第 4 题:费用报销 第 1 题:卡片 题…

我今天要彻底搞懂线程状态的变化

💗推荐阅读文章💗 🌸JavaSE系列🌸👉1️⃣《JavaSE系列教程》🌺MySQL系列🌺👉2️⃣《MySQL系列教程》🍀JavaWeb系列🍀👉3️⃣《JavaWeb系列教程》…

MATLAB | 这些花里胡哨的热图怎么画

好早之前写过一个绘制相关系数矩阵的代码,但是会自动求相关系数,而且画出来的热图只能是方形,这里写一款允许nan值出现,任意形状的热图绘制代码,绘制效果如下: 如遇到bug请后台提出,并去gitee下…

出道即封神的ChatGPT,现在怎么样了?

从互联网的普及到智能手机,都让广袤的世界触手而及,如今身在浪潮中的我们,已深知其力。前阵子爆火的ChatGPT,不少人保持观望态度。现如今,国内关于ChatGPT的各大社群讨论,似乎沉寂了不少,现在怎…

Linux IPC:匿名管道 与 命名管道

目录一、管道的理解二、匿名管道三、命名管道四、管道的通信流程五、管道的特性进程间通信方式有多种,本文介绍的是管道,管道分为匿名管道和命名管道。 一、管道的理解 生活中的管道用来传输资源,例如水、石油之类的资源。而进程间通信的管道…

学习C++这几个网站足矣

文章目录cppreferencecplusplus[C 之父的网站](https://www.stroustrup.com/bs_faq.html)C提案[Cpp Core Guidelines](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines)[C Super-FAQ](https://isocpp.org/faq)[learn c](https://www.learncpp.com/)[Awesome C](h…

【YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进NO.59】引入ASPP模块

前言作为当前先进的深度学习目标检测算法YOLOv8,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法。此后的系列文章,将重点对YOLOv8的如何改进进行详细的介绍&…

1.10-1.12 Makefile

1. Makefile简介 举个栗子,如下为redis-5.0.10的项目目录,有很多的文件 有了Makefile文件,可以简单的make一下就可以对项目文件进行编译,最终生成可执行程序。 2. Makefile栗子1 首先,创建vim Makefile按照PPT里的格…

C++STL set/multiset容器 构造和赋值 大小和交换 插入和删除 查找和统计

文章目录set/multiset容器1 set容器 基本概念2 set容器 构造和赋值3 set容器 大小和交换4 set容器 插入和删除5 set容器 查找和统计set/multiset容器 1 set容器 基本概念 简介: 所有元素都会在插入时会被自动排序,例如,在set容器放入元素1、…

成本降低90%,OpenAI正式开放ChαtGΡΤ

今天凌晨,OpenAI官方发布ChαtGΡΤ和Whisper的接囗,开发人员现在可以通过API使用最新的文本生成和语音转文本功能。OpenAI称:通过一系列系统级优化,自去年12月以来,ChαtGΡΤ的成本降低了90%;现在OpenAI用…

公网远程连接Oracle数据库【内网穿透】

文章目录1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程OracleOracle,是甲骨文公司的一款关系数据库管理系…

【前端vue2面试题】2023前端最新版vue2模块,高频24问

​ 🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:博主收集的关于vue2面试题 目录 vue2面试题 1、$route 和 $router的区别 2、一个.v…

2月更新 | Visual Studio Code Python

我们很高兴地宣布,2023年2月版 Visual Studio Code Python 和 Jupyter 扩展现已推出!此版本包括以下改进:从激活的终端启动 VS Code 时的自动选择环境 使用命令 Python: Create Environmen 时可选择需求文件或可选依赖项 预发布:改…

java八股文--java基础

java基础1.什么是面向对象,谈谈对面向对象的理解2.JDK JRE JVM的区别与联系3.和equals4.hashCode与equals5.String StringBuffer StringBuilder的区别6.重载和重写的区别7.接口和抽象类8.List和Set的区别9.ArrayList和LinkedList10.HashMap和HashTable的区别&#x…

2023.03.12学习总结

项目部分写了内外菜单栏的伸缩,更新了导航栏,新增配置,scss变量 提交记录 学习了scss的使用和配置 ,设置了scss全局变量,组件样式 给element-plus配置了主题颜色,配置到了全局 http://t.csdn.cn/FhZYa …

【PyTorch】Pytorch基础第0章

本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052 这是目录PyTorch的简介PyTorch 构建深度学习模型的步骤搭建pytorch使用环境PyTorch的简介 PyTorch 是一个开源的机器学习框架,由 Facebook 的人工智能研究院(…