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

嵌入式 串口通信

目录

 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)和被调用函数&#xf…...

【高阶数据结构】红黑树

文章目录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:自我介绍我是一名来自…...

嵌入式学习笔记——STM32的USART收发字符串及串口中断

USART收发字符串及串口中断前言字符串的收发发送一个字符串接收字符串需求利用串口实现printf中断中断是什么前言 上一篇中,介绍了串口收发相关的寄存器,通过代码实现了一个字节的收发,本文接着上面的内容,通过功能函数实现字符串…...

数据分析之Pandas(1)

3.Pandas 文章目录3.Pandas3.1 Pandas基本介绍3.1.1 Pandas的基本数据结构3.1.1.1 Pandas库的Series类型3.1.1.2 Pandas库的DataFrame类型DataFrame初始化DataFrame查看数据3.1.2 Pandas读取数据及数据操作行操作添加一行删除一行列操作增加一列删除一列通过标签选择数据条件选…...

17、江科大stm32视频学习笔记——USART串口协议和USART串口外设

目录 1、通信接口 2、 硬件电路 3、电平标准 4、串口参数及时序 5、USART简介 6、USART工作 (1)写操作 (2)读操作 (3)帧头和帧尾的添加和除由电路自动执行 (4)硬件数据控制…...

leetcode:有效地括号

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都…...

四等分list

Testpublic void s (){ int targ 4; List mList new ArrayList(); List<List> mEndList new ArrayList<>(); for (int i 0; i <34; i) { mList.add(“item” i); } // System.out.println(mList.toString()); if (mList.size() % targ ! 0) { for (int j …...

php连接sqlserver数据库

docker 安装sqlserver数据库sudo docker pull mcr.microsoft.com/mssql/server:2017-latestsudo docker run -e "ACCEPT_EULAY" -e "MSSQL_SA_PASSWORD<YourStrongPassw0rd>" -p 1433:1433 --name sqlserver --hostname sqlserver -d mcr.microsoft.…...

The 2019 China Collegiate Programming Contest Harbin Site F. Fixing Banners

Problem - F - Codeforces 翻译&#xff1a; 哈尔滨&#xff0c;这个名字最初是一个满语单词&#xff0c;意思是“晒渔网的地方”&#xff0c;从松花江边的一个小农村居民点发展成为中国东北最大的城市之一。1898年&#xff0c;随着中国东部铁路的到来&#xff0c;这座城市首先…...

Maven的下载和配置

一、前言 一般按要求下载jar ,但是jar 包版本不好控制。有时候就会jar版本不同导致项目运行的结果也有差异&#xff0c;这样在团队开发中&#xff0c;在多个项目开发的是&#xff0c;jar包还要进行拷贝&#xff0c;可能也会出现版本还jar损坏的情况&#xff0c;所以一个能统一…...

服务高并发、高性能、高可用实现方案

服务高并发、高性能、高可用实现方案 软件开发的三高指标&#xff1a;高并发、高性能、高可用。 高并发方面要求QPS 大于 10万&#xff1b;高性能方面要求请求延迟小于 100 ms&#xff1b;高可用方面要高于 99.99%(4个9) 一、高并发&#xff1a; 高并发是现在互联网分布式框架设…...

uniCloud在线升级APP配置教程

app在线升级背景实现思路流程流程背景 因用户需要添加手机h5页面来进数据操作实现思路流程 实现流程图流程 相关文档&#xff1a;帮助文档 https://uniapp.dcloud.net.cn/uniCloud/cf-functions.html 注册服务空间 https://unicloud.dcloud.net.cn/pages/login/login uni升级…...