当前位置: 首页 > 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驱动安装:

 串口助手软件使用:

 

http://www.lryc.cn/news/39640.html

相关文章:

  • C语言函数调用栈
  • 【高阶数据结构】红黑树
  • 网络协议分析期末复习(二)
  • 【C++】STL简介 及 string的使用
  • MySQL事务详解
  • ChatGPT背后的技术和多模态异构数据处理的未来展望——我与一位资深工程师的走心探讨
  • iOS-砸壳篇(两种砸壳方式)
  • linux 基础
  • Java:SpringBoot给Controller添加统一路由前缀
  • Java 基于 JAVE 库 实现 视频转音频的批量转换
  • Spring容器——基于XML注入
  • 设计模式(二十一)----行为型模式之状态模式
  • 一分钟理解 AP(Affinity Propagation) 亲和⼒传播算法
  • 使用mybatis的映射文件操作存储过程
  • 世界上最完美的两个软件,太厉害了!
  • 教你成为比卡卡西还牛逼的全能忍者,全拷贝与分割函数
  • 【LeetCode】剑指 Offer(24)
  • javaEE 初阶 — CSS 元素的显示模式与盒模型
  • 新星计划-我为什么要写博客?写博客的意义是什么
  • 嵌入式学习笔记——STM32的USART收发字符串及串口中断
  • 数据分析之Pandas(1)
  • 17、江科大stm32视频学习笔记——USART串口协议和USART串口外设
  • leetcode:有效地括号
  • 四等分list
  • php连接sqlserver数据库
  • The 2019 China Collegiate Programming Contest Harbin Site F. Fixing Banners
  • Maven的下载和配置
  • 服务高并发、高性能、高可用实现方案
  • uniCloud在线升级APP配置教程
  • idea常用的快捷键