嵌入式养成计划-53----ARM--串口通信

一百三十四、串口通信

134.1 串口的概念

  • 串口(UART):Universal asynchronous receiver transmitter (USART/UART),通用异步接收发送器
  • 通过串口可以实现两个不同机器之间的信息交互
  • 串口通信属于总线通信的一种

134.2 总线的概念

  • 总线就是不同机器之间或者机器内部进行信息交互的媒介

  • 总线可以分为内部总线和外部总线

    • 内部总线:在芯片内部链接核心和不同外设的总线被称为内部总线。根据内部总线上传输的数据的不同可以将内部总线分为三类:地址总线,数据总线,控制总线
    • 外部总线:连接芯片和芯片外部其他设备的总线
  • 外部总线根据各自特性的不同,有三种不同的划分标准:

    1. 同步、异步
    2. 单工、半双工、全双工
    3. 串行、并行
  • 常用的外部总线有uart、IIC\SPI\can\RS485

    • 串口:异步全双工串行通信
    • IIC:同步半双工串行
    • SPI:同步全双工串行
    • RS485:异步半双工串行通信

134.3 总线的划分标准

134.3.1 串行、并行划分

  • 串行总线通信 :不同机器之间进行信息交互是同时只能一位一位的进行数据传输
  • 并行总线通信 :不同机器之间进行信息交互是同时可以多位数据进行传输
    在这里插入图片描述

134.3.2 同步、异步通信

  • 同步通信 :通信的双方在同一个时钟信号作用下进行数据收发,约定好数据收发的时机
  • 异步同步 :通信双方在各自的时钟信号下进行通信

134.3.3 全双工、半双工、单工通信

  • 单工通信 :只能一方发送一方接收
  • 半双工通信:通信双方可以互相发送接收消息,但是同一时间段只能由一方发送给另一方
  • 全双工通信:通信双方可以同时互相发送接收消息
    在这里插入图片描述
    在这里插入图片描述

134.4 串口通信常见的硬件连接方式

134.4.1 TTL格式硬件连接

  • 一般TTL格式的电平只适用于同一块开发板不同的芯片之间使用,抗干扰能力差
    在这里插入图片描述

134.4.2 USB转RS232串口

在这里插入图片描述

134.4.3 USB转USBmini

在这里插入图片描述

134.4.4 STM32MP1A开发板使用的接线方式

在这里插入图片描述

134.5 串口通信的通信协议

134.5.1 串口通信的数据帧格式

  • 一帧数据的组成:

    • 起始位 :1bit,数据开始传输的标识,低电平
    • 数据位 :5-8bit,双方传输的数据
    • 校验位 :1bit(可有可无),用于校验数据是否正常传输
      一般校验位设置为奇偶校验奇校验:设置了奇校验之后一帧数据传输完成,数据位中的1的个数+校验位1的个数应该为奇数0XFE->1111 1110   此时这个数据传输完毕校验位应该为00XFF->1111 1111   此时这个数据传输完毕校验位应该为1偶校验:设置了偶校验之后一帧数据传输完成,数据位中的1的个数+校验位1的个数应该为偶数0XFE->1111 1110   此时这个数据传输完毕校验位应该为10XFF->1111 1111   此时这个数据传输完毕校验位应该为0
      
    • 停止位 :0.5/1/1.5/2bit,高电平,一帧数据传输结束的标志,停止位后会重新校准双方时钟,误差重新累计
  • 8N1概念 :8位数据位,没有校验位,1位停止位

在这里插入图片描述

134.5.2 波特率

波特率代表进行数据传输时双方的数据传输速率
波特率 单位 是		bps(bit/s)
常用的波特率 有	4800、9600、115200

在这里插入图片描述

134.6 查看串口的电路原理图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 通过查询串口电路原理图,当前开发板串口发送线连接在SOC的PG11管脚
  • 接收线连接在SOC的PB2管脚
  • 由SOC内部的UART4外设负责控制这两个管脚进行串口的数据接收和发送

134.7 软件编程实现串口工作框图分析

在这里插入图片描述

134.8 设置GPIOB\GPIOG\UART4时钟使能

134.8.1 GPIO时钟使能

在这里插入图片描述
在这里插入图片描述

  • 将RCC_MP_AHB4ENSETR寄存器的第[1]位和第[6]位设置为1即可使能GPIOB和GPIOG

134.8.2 使能UART4时钟

在这里插入图片描述
在这里插入图片描述

  • 将RCC_MP_APB1ENSETR寄存器的第[16]位设置为1即可使能UART4

134.9 设置PG11和PB2管脚复用为UART4功能

134.9.1 将PG11和PB2设置为复用功能

在这里插入图片描述

134.9.2 将PG11和PB2设置为UART4复用功能

  • 管脚复用功能寄存器1
    在这里插入图片描述

  • 管脚复用功能寄存器2
    在这里插入图片描述
    在这里插入图片描述

  • 通过查询寄存器发现一个管脚的复用功能需要寄存器的四位来设置,一个寄存器是32位,只能设置8个管脚的复用功能,而一个GPIO控制器管理了16个管脚,所以需要两个管脚复用功能选择寄存器来进行管脚复用设置

  • 每一个管脚的复用功能可以设置为AF0-AF15总共16个复用功能,想要直到PG11和PB2管脚到底哪一个功能是UART4功能,需要查询stm32mp157a.pdf文件的第4章节的table8和table9

在这里插入图片描述
在这里插入图片描述

通过查询两个表,知道:
PB2的UART4复用功能是AF8,所以想要将PB2管脚复用为UART4功能,只需要将GPIOB_AFRL第[11:8]->1000
PG11的UART4复用功能是AF6,所以想要将PG11管脚复用为UART4功能,只需要将GPIOG_AFRH第[15:12]->0110

134.10 UART芯片手册分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 波特率设置:
    16倍采样,时钟频率64M,115200波特率
    USARTDIV=64000000/115200 =0X22B
    BRR=0X22B8倍采样
    USARTDIV=2*64000000/115200=0X456   0100 0101 0110
    BRR[2:0]=011
    BRR[3]=0
    BRR[15:4]= 0000 0100 0101
    
  • 设置数据长度为8位
    USART_CR1[28]->0
    USART_CR1[12]->0
    
  • 设置16倍采样
    USART_CR1[15]->0
    
  • 设置奇偶检验
    不设置奇偶校验,USART_CR1[10]->0
    
  • 使能发送器
    USART_CR1[3]->1
    
  • 使能接收器
    USART_CR1[2]->1
    
  • 使能串口
    USART_CR1[0]->1
    
  • 设置停止位
    USART_CR2[13:12]->00表示设置1位停止位
    
  • 设置波特率为115200
    16倍采样下
    USART_BRR=0X22B
    

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务名无效。 请键入 NET HELPMSG 2185以获得更多的帮助

遇到的问题是MySQL服务没有。 因为net start 服务名,启动的是win下注册的服务。此时,我系统中并没有注册mysql到服务中。即下面没有mysql服务。 mysqld --install net start mysql

OpenCV入门2——图像视频的加载与展示一些API

文章目录 题目OpenCV创建显示窗口OpenCV加载显示图片题目 OpenCV保存文件利用OpenCV从摄像头采集视频从多媒体文件中读取视频帧将视频数据录制成多媒体文件OpenCV控制鼠标关于[np.uint8](https://stackoverflow.com/questions/68387192/what-is-np-uint8) OpenCV中的TrackBar控…

Python---数据序列中的公共方法

公共方法就是 支持大部分 数据 序列。 常见公共方法---简单 运算符描述支持的容器类型合并字符串、列表、元组*复制字符串、列表、元组in元素是否存在字符串、列表、元组、字典not in元素是否不存在字符串、列表、元组、字典 案例: 合并 代码: # …

微机原理_9

一、单项选择题(本大题共15小题,每小题3分,共45分。在每小题给出的四个备选项中,选出一个正确的答案。 1.当运算结果的最高位为1时,标志位() A. CF1 B. OF1 C. SF1 D. ZF1 2、汇编语言源程序中,每个语句由四项组成,如语句要完成一定功能,那么该语句中不可…

windows安装maven,配置环境变量

官网下载: 其他版本找 Other Releases 配置环境变量 1、解压缩之后开始配置环境变量 2、右键此电脑,选中属性->高级系统设置->高级->环境变量。 3、①和②任选一个都可 ①在系统变量那边增加MAVEN_HOME,路径是解压缩后的文件路径。…

如何使用 Github Action 管理 Issue

本文作者为 360 奇舞团前端开发工程师 Daryl 前言 很多小伙伴打开 github 上的仓库都只使用Code查看代码,或者只是把 github 当成一个代码仓库,但是 github 还提供了很多好用的功能。 其中,GitHub Action就是一个很好用的功能,本文…

双点重发布路由策略实验

任务&IP分配如下: 双点重发布实验 第一步:配置IP地址&环回地址 以R1为例,R2、R3、R4同理 interface GigabitEthernet 0/0/0 ip address 12.0.0.1 24 interface GigabitEthernet 0/0/1 ip address 13.0.0.1 24 interface LookBack …

[Unity3D] C# 十进制、二进制、十六进制 之间进制的转换

//十进制 --> 二进制 int data 100; string bin Convert.ToString(data, 2); // “1100100”//十进制 --> 十六进制 int data 100; string hex “”;hex Convert.ToString(data, 16); // “64” hex “0X” Convert.ToString(data, 16); // “0X64” hex string.…

ubuntu下C++调用matplotlibcpp进行画图(超详细)

目录 一、换源 二、安装必要的软件 三、下载matplotlibcpp 四、下载anaconda 1.anaconda下载 2.使用anaconda配置环境 五、下载CLion 1.下载解压CLion 2.替换jbr文件夹 3.安装CLion 4.激活CLion 5.CLion汉化 6.Clion配置 六、使用CLion运行 七、总结 我的环…

demo(二)eurekaribbon----服务注册、提供与消费

前一篇实现了服务注册中心的搭建,并提供服务注册到注册中心上。在之前的基础上,实现服务消费。 一、相关介绍 1、RestTemplate工具 2、LoadBalanced注解 二、ribbon示例: 先启动eureka-service注册中心,再将eureka-client修改…

零小时零信任:数据标记如何加速实施

现在是零信任的零小时。 虽然这个概念已经存在多年,但现在联邦政府实施它的时间已经紧迫。 拜登政府备忘录被誉为以战斗速度安全交付关键任务数据的解决方案,要求联邦机构在 2024 财年年底前实现具体的零信任安全目标。 此外,国防部正在努…

JavaScript的函数的形参与实参是怎么回事

0 写在前面 此文给小白看的,如果不是可以直接关闭 1 讲解 例如JavaScript中定义函数 //定义函数 function 方法名(形参){方法体-->使用形参}//使用函数 方法名字(实参)具体干了什么呢?此处以伪代码举例 //定义函数 function eat(A,B){A 去 B 家吃…