嵌入式 串口通信
目录
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驱动安装:

串口助手软件使用:

相关文章:
嵌入式 串口通信
目录 1、通信的基本概念 1.1 串行通信 1.2 并行通信 2、串行通信的特点 2.1 单工 2.2 半双工 2.3 全双工 3、串口在STM32的引脚 4、STM32的串口的接线 4.1 STM32的串口1和电脑通信的接线方式 4.2 单片机和具备串口的设备连接图 5、串口通信协议 6、串口通信…...
C语言函数调用栈
栈溢出(stack overflow)是最常见的二进制漏洞,在介绍栈溢出之前,我们首先需要了解函数调用栈。 函数调用栈是一块连续的用来保存函数运行状态的内存区域,调用函数(caller)和被调用函数…...
【高阶数据结构】红黑树
文章目录1. 使用场景2. 性质3. 结点定义4. 结点旋转5. 结点插入1. 使用场景 Linux进程调度CFSNginx Timer事件管理Epoll事件块的管理 2. 性质 每一个节点是红色或者黑色根节点一定是黑色每个叶子节点是黑色如果一个节点是红色,那么它的两个儿子节点都是黑色从任意…...
网络协议分析期末复习(二)
目录 12. 端口的定义及常见应用对应的端口号 13. UDP协议概述 14.UDP数据报格式及各字段意义 15. UDP-Lite协议概述 16. TCP数据报格式及各字段意义 17. TCP连接建立及协商参数的过程 18. TCP连接释放过程 19. 路由协议分类及各类的具体协议 20. 路由算法常用的度量 2…...
【C++】STL简介 及 string的使用
文章目录1. STL简介1.1 什么是STL1.2 STL的版本1.3 STL的六大组件2. string类的使用2.1 C语言中的字符串2.2 标准库中的string类2.3 string类的常用接口说明1. string类对象的常见构造2. string类对象的容量操作3. string类对象的修改操作4. resize和reserve5. 认识迭代器&…...
MySQL事务详解
🏆今日学习目标: 🍀Spring事务和MySQL事务详解 ✅创作者:林在闪闪发光 ⏰预计时间:30分钟 🎉个人主页:林在闪闪发光的个人主页 🍁林在闪闪发光的个人社区,欢迎你的加入: …...
ChatGPT背后的技术和多模态异构数据处理的未来展望——我与一位资深工程师的走心探讨
上周,我和一位从业三十余年的工程师聊到ChatGPT。 作为一名人工智能领域研究者,我也一直对对话式大型语言模型非常感兴趣,在讨论中,我向他解释这个技术时,他瞬间被其中惊人之处所吸引🙌,我们深…...
iOS-砸壳篇(两种砸壳方式)
CrackerXI砸壳呢,当时你要是使用 frida-ios-dump 也是可以的; https://github.com/AloneMonkey/frida-ios-dump frida-ios-dump: 代码中需要更改的:手机中的内网ip 密码 等 最后放到我的砸壳路径里: python dump.py -l查看应用…...
linux 基础
1.Shell 命令的格式如下:command -options [argument]command: Shell 命令名称。options: 选项,同一种命令可能有不同的选项,不同的选项其实现的功能不同。argument: Shell 命令是可以带参数的,也可以不带参…...
Java:SpringBoot给Controller添加统一路由前缀
网上的文章五花八门,不写SpringBoot的版本号,导致代码拿来主义不好使了。 本文采用的版本 SpringBoot 2.7.7 Java 1.8目录1、默认访问路径2、整个项目增加路由前缀3、通过注解方式增加路由前缀4、按照目录结构添加前缀参考文章1、默认访问路径 packag…...
Java 基于 JAVE 库 实现 视频转音频的批量转换
文章目录 Java 基于 JAVE 库 实现 视频转音频的批量转换Maven:方案一:代码优化:方案二:示例代码:代码优化:结语Java 基于 JAVE 库 实现 视频转音频的批量转换 实现视频转音频的功能需要使用到一个第三方的 Java 库,叫做 JAVE。JAVE 是一个开源的 Java 库,提供了视频和音频转换…...
Spring容器——基于XML注入
1. 容器:IOC IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序 Spring 通过 IoC 容器来…...
设计模式(二十一)----行为型模式之状态模式
1 概述 【例】通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如,如果电梯门现在处于运行时状态,就不能…...
一分钟理解 AP(Affinity Propagation) 亲和⼒传播算法
从来没有一个算法让我研究好几天都搞不明白,AP算法算是第一个。弄了好几天,打草纸用了几十页,反复琢磨,最后都怀疑人生了。我觉得网上那么多介绍 AP 的文章,基本上没有一篇能讲明白的。最后我都觉得 AP 的作者可能都没…...
使用mybatis的映射文件操作存储过程
先随便创建一个存储过程 DELIMITER $$ CREATE PROCEDURE getUserNameById (IN i_id BIGINT, OUT o_name VARCHAR(10)) BEGINSELECT u.name INTO o_name FROM tb_user u WHERE id i_id; END $$delimiter $$ : 是将sql语句的结束符号先替换成$$的意思,因为sql是遇到…...
世界上最完美的两个软件,太厉害了!
今天给大家介绍两个软件,一个体现了人类在软件开发流程上的极致,另外一个则体现了程序员个体能力的巅峰。01航天飞机飞控软件先来说第一个,航天飞机飞行控制软件,就是下图这个大家伙。航天飞机重达120吨,还携带着2000吨…...
教你成为比卡卡西还牛逼的全能忍者,全拷贝与分割函数
如何成为一个集雷切,写轮眼侦查和拷贝与一身的卡卡西,下面教你! 目录 第一式——雷切! strtok 第二式——写轮眼侦查! strerror函数 第三式——写轮眼拷贝! memcpy 模拟实现memcpy函数 😎…...
【LeetCode】剑指 Offer(24)
目录 题目:剑指 Offer 47. 礼物的最大价值 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer 47. 礼物的…...
javaEE 初阶 — CSS 元素的显示模式与盒模型
文章目录1. 元素的显示模式1.1 块级元素1.2 行内元素1.3 行内元素和块级元素的区别1.4 改变显示模式2. 盒模型2.1 边框2.1.1 边框的粗细2.1.2 边框的颜色2.1.3 边框的风格2.2 内边距2.3 外边距2.3.1 margin 的特殊情况1. 元素的显示模式 1.1 块级元素 常见的元素: h1 - h6 、…...
新星计划-我为什么要写博客?写博客的意义是什么
CSDN的各位友友们你们好,今天千泽要和大家交流一下写博客的意义,并且鼓励大家参加CSDN官方举办的新星计划,这个可以让我们更快的成长,十分有价值.接下来让我们一起开始吧!如果对您有帮助的话希望能够得到您的支持和帮助,我会持续更新的!🚩part1:自我介绍我是一名来自…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...
小智AI+MCP
什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析:AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github:https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...
