1.处理器与外部设备通信的两种方式:

并行通信

  • 传输原理:数据各个位同时传输。
  • 优点:速度快
  • 缺点:占用引脚资源多

串行通信

  • 传输原理:数据按位顺序传输。
  • 优点:占用引脚资源少
  • 缺点:速度相对较慢

2.串行通信:

2.1按照数据传送方向,分为:

  • 单工:数据传输只支持数据在一个方向上传输
  • 半双工:允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;
  • 全双工:允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。

2.2串行通信的通信方式:

  • 同步通信:带时钟同步信号传输。SPI,IIC通信接口

有时钟同步信号,A传到B的过程中,每一个位都是根据时钟来传的,比如时钟到达上升沿,传1bit。

  • 异步通信:不带时钟同步信号。UART(通用异步收发器),单总线

A和B之间没有时钟同步信号,双方先约定一些波特率、起始位等,计算出发送每一bit占用的时间。

常见的串行通信接口:

如果是全双工,那么发送和接收都要有独立的引脚。半双工一般只占用一个独立的发送\接收引脚。

如果是同步通信,那么一定有同步时钟。

通信标准 引脚说明 通信方式 通信方向
UART (通用异步收发器) TXD:发送端 RXD:接受端 GND:公共地 异步通信 全双工
单总线 (1-wire) DQ:发送/接受端 异步通信 半双工
SPI SCK:同步时钟 MISO:主机输入,从机输出 MOSI:主机输出,从机输入 同步通信 全双工
I2C SCL:同步时钟 SDA:数据输入/输出端 同步通信 半双工

3.异步串口通信UART

包含:

物理层(电气层:接口决定):通信接口(RS232,RS485,RS422,TTL)
数据格式(数据层:芯片决定)起始位校验位等约定好
通信协议(协议层:程序决定)数据出错能检测出来等

UART异步通信方式引脚连接方法:

RXD:数据输入引脚。数据接收。TXD:数据发送引脚。数据发送。

TTL串口 & RS232 & RS485 & RS422

两个电路板相连,往往用到一些接口,而不是直接相连TXRX。

接口类型 逻辑1 典型值 逻辑0 典型值 说明 优缺点
TTL +5/3.3 0 一般MCU串口引脚都支持TTL
RS232 -15V~-3V 3V~15V 3线全双工,点对点 接口电平高,传输速度相对较低,传输距离近
RS485 两根线的压差+(2~6)V 压差-(2~6)V 2线半双工,点对多,主从通信。使用压差传递信号。 传输速度高可达10M,抗干扰能力强,距离远。
RS422 相对比较少用。

USB串口

MCU发送串口信号,经电平转换芯片变为USB信号,通过USB连到电脑,电脑可以直接识别USB信号。

STM32 UART异步通信方式引脚:

串口号 RXD TXD
1 PA10(PB7) PA9(PB6)
2 PA3(PD6) PA2(PD5)
3 PB11(PC11/PD9) PB10(PC10/PD8)
4 PC11(PA1) PC10(PA0)
5 PD2 PC12
6 PC7(PG9) PC6(PG14)

4.STM32串口数据格式和通信过程

STM32串口通信过程:信号一位一位传过来,速度根据波特率来传。串行移位寄存器一个一个读过来,然后一次性写入到输入数据缓冲器里,MCU从中读取数据。

MCU写输出数据缓冲器,然后一次性给串行移位寄存器,然后在波特率控制下,把数据一位位送到外部设备。

STM32串口异步通信需要定义的参数:

起始位:1个逻辑0数据位开始
数据位(8位或者9位)
奇偶校验位(第9位)
停止位(1,1.5,2位)
波特率设置

5.STM32F4xx串口框图

TX:芯片数据发送出去,RX:数据接收。接收后放到接收移位寄存器,然后全部给接收数据寄存器,然后CPU可以通过总线读取数据。发送的话,CPU把数据写到发送数据寄存器,之后数据送到发送移位寄存器,数据一位一位的从IO口出去。

对于这个发送和接收移位寄存器,必须提前设定好波特率,这两个寄存器受发送控制和接收器控制。可以由下图看到:发送和接收端共用一个波特率,用于确定串行通信的速度。最下面有一个BRR寄存器,首先时钟来自于pCLKx ,pclk经过/usartdiv和/(8*(2-OVER8)),OVER8由控制寄存器的一个位决定可能为0或1,把这个时钟作为发送器和接收器的时钟,控制发送和接收移位寄存器,实现控制传输数据的速度。

对于接收器控制和发送控制,图中还有几个寄存器,右边SR寄存器,记录一些状态标志位,左边CR1,有一些使能位,高位连接中断控制,可以触发一些中断。

6.波特率计算方法

波特率决定了串口的通信速度,如何计算。

上图OVER8:在控制寄存器 1 (USART_CR1)中可找到,其中采样频率越高,容错性越好,但是限制了速度。如果8倍过采样可以提高速度。

小数波特率生成:

对 USARTDIV 的尾数值和小数值进行编程时,接收器和发送器(Rx 和 Tx)的波特率均设置为相同值。

当fck确定,又要达到某一种波特率,此时可以计算出USARTDIV的值是多少。它的值是由USART_BRR 寄存器决定的。

USARTDIV 是一个存放在 USART_BRR 寄存器中的无符号定点数。
当 OVER8=0 时,小数部分编码为 4 位并通过 USART_BRR 寄存器中的 DIV_fraction[3:0] 位编程。
当 OVER8=1 时,小数部分编码为 3 位并通过 USART_BRR 寄存器中的 DIV_fraction[2:0] 位编程,此时 DIV_fraction[3] 位必须保持清零状态。
注意: 对 USART_BRR 执行写操作后,波特率计数器更新为波特率寄存器中的新值。因此,波特率 寄存器的值不应在通信时发生更改。

如图所示,USART中DIV_Mantissa是设置USARTDIV 的整数部分,DIV_Fraction是设置USARTDIV的小数部分。如果经过公式算出USARTDIV=37.5该如何设置 USART_BRR寄存器?

可以看到波特率寄存器 (USART_BRR):位15:4一共12位,如果设置USARTDIV=37.5,只需要把高十二位设置成37 。小数则是由低4位决定的,由于低四位一共有2^4=16个数,占满了0-1,所以可以0.5*16=8,赋给低四位即可。

可以总结出:OVER8=0时波特率计算公式:

①根据波特率和串口时钟频率,计算出USARTDIV的值。

②DIV_Fraction=USART的小数部分 X16所得的整数

DIV_Mantissa=USART的整数部分

假如OVER8=0,串口时钟为90M,需要得到115200的波特率,根据公式计算得到USARTDIV=90000000/(115200*16)=48.828

DIV_Fraction=16*0.828的整数部分=13=0X0D;

DIV_Mantissa=48=0x30;

得到USART1->BRR值为0x30d,只要设置串口1的BRR寄存器值位0x30d就可得到115200的波特率。

STM32-UART-串口通信框图-波特率计算相关推荐

  1. STM32学习——UART串口通信学习

    1.UART简介 UART(Universal Asyvhronous Receiver Transmitter)统称为通用异步收发器,是一种通用的串行.异步通信总线,有两条数据线,可以实现全双工的发 ...

  2. STM32 —— STM32 的串口通信

    STM32 -- STM32 的串口通信 STM32的串口通信接口有两种,分别是:UART(通用异步收发器).USART(通用同步异步收发器).而对于大容量 STM32F10x 系列芯片,分别有 3 ...

  3. javarxtx串口接收时数据会分成好几段_【STM32】串口通信基本原理(超基础、详细版)...

    STM32F1xx官方资料: <STM32中文参考手册V10>-第25章通用同步异步收发器(USART) 通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通 ...

  4. NXP(I.MX6uLL) UART串口通信原理————这个未复习

    参考:Linux NXP (I.MX6uLL) UART串口通信原理 作者:一只青木呀 发布时间: 2020-09-20 16:48:33 网址:https://blog.csdn.net/weixi ...

  5. 【正点原子MP157连载】 第十六章 UART串口通信实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  6. 【STM32】串口通信基本原理(超基础、详细版)

    STM32F1xx官方资料: <STM32中文参考手册V10>-第25章通用同步异步收发器(USART) 通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通 ...

  7. UART 串口通信实验

            串口是"串行接口"的简称,即采用串行通信方式的接口.串行通信将数据字节分成一位一位的形式在一条数据线上逐个传送,其特点是通信线路简单,但传输速度较慢.因此串口广泛应 ...

  8. 51单片机C语言波特率十六进制,理解51单片机串口通信的波特率与USB转串口通信...

    RS232 在我们电脑上,一般都会有一个9针的串行接口,这个串行接口叫做RS232接口,它和UART通信有关联,但是由于现在笔记本电脑不带9针串口,所以和单片机通信越来越趋于使用USB虚拟串口. 九针 ...

  9. UART串口通信浅谈之(一)--基础概述

    通信按照传统的理解就是信息的传输与交换.UART(Universal Asynchronous Receiver/Transmitter,即通用异步收发器)串行通信是单片机最常用的一种通信技术,通常用 ...

最新文章

  1. apache 安装与配置详细教程
  2. python_L2_operator
  3. 基于matlab的音乐合成论文,基于matlab软件的音乐合成毕业论文.doc
  4. python excel处理模块_Python(00):openpyxl模块处理Excel文件
  5. Centos6.9如何安装vsftp
  6. session与cookie之间的关系
  7. 服务器专用影子系统,试试最牛X的影子系统!瞬间创建N个账号
  8. JAVA SSO单点登录原理以及实现方案
  9. IE11 zh_HANS_CN国际化问题
  10. c语言第五次上机作业,大连理工c语言第五次上机作业参考答案(5页)-原创力文档...
  11. 毕业一周年--IT在路上
  12. 3.9 编写程序,模拟石头剪刀布游戏。程序随机产生一个数,这个数为2、1或0,分别表示石头剪刀和布。
  13. 电脑拆机(华硕FL5900)+光驱改固态
  14. 曙光服务器S640-G30配置管理口图文教程(完整版)
  15. 巨控GRM530远程模块与西门子上-300PLC远程上下载程序,远程在线调试程序
  16. AUTOCAD——面域
  17. 南达科他州立大学计算机科学,南达科他州立大学最新入学要求快来看!
  18. java求两个整数百分比
  19. 数学建模从入门到放弃
  20. SVS迅控小型会议室视频跟踪会议

热门文章

  1. wordpress自定义主题
  2. C++ 结构体定义和使用
  3. java入门提高篇:Day1 抽象类
  4. 三种情况别离场与四种分辨洗盘出货方法
  5. 我的 IP 地址(View IP address)
  6. RDMA编程1 建立侦听
  7. 用html和css做一个旋转的正方体
  8. ansible的setup模块和Facts变量及magic变量
  9. 【杂记】HDMI转VGA接头遇到的显示 “信号显示输出超出范围”的问题
  10. Android App 线上热修复方案Xposed