• 嵌入式养成计划-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   此时这个数据传输完毕校验位应该为0
        		0XFF->1111 1111   此时这个数据传输完毕校验位应该为1
        	偶校验:设置了偶校验之后一帧数据传输完成,数据位中的1的个数+校验位1的个数应该为偶数
        		0XFE->1111 1110   此时这个数据传输完毕校验位应该为1
        		0XFF->1111 1111   此时这个数据传输完毕校验位应该为0
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
      • 停止位 :0.5/1/1.5/2bit,高电平,一帧数据传输结束的标志,停止位后会重新校准双方时钟,误差重新累计
    • 8N1概念 :8位数据位,没有校验位,1位停止位

    在这里插入图片描述

    134.5.2 波特率

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

    在这里插入图片描述

    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
    
    • 1
    • 2
    • 3

    134.10 UART芯片手册分析

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

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

    在这里插入图片描述

  • 相关阅读:
    vue中用ref实现父子组件、孙组件、兄弟组件、非亲子孙组件互相调用的方法
    Wireshark过滤器的使用
    青少年编程学习 等级考试 信奥赛NOI/蓝桥杯/NOC/GESP等比赛资料合集
    gammatone 滤波器详解及其MATLAB代码实现
    Hermes - 指尖上的智慧:自定义问答系统的崭新世界
    左支座零件的机械加工工艺规程及工艺装备设计【计算机辅助设计与制造CAD】
    Linux用户管理常用命令及对应配置文件
    实用篇-ES-RestClient操作文档
    ElasticSearch 报错 FORBIDDEN/12/index read-only / allow delete (api)
    dolphinscheduler 2.0.5和2.0.6 体验记录及优化扩展(任务出现kill状态、未设置延时执行出现延时执行、系统变量扩展)
  • 原文地址:https://blog.csdn.net/qq_52625576/article/details/134407020