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

ARM - GPIO 标准库开发

一、STM32MP157AAA开发板套件介绍

1.1 核心板 - 主板

如图所示:

主板各部分介绍

1.2 IO 拓展板

如图所示:

IO拓展板各部分介绍

开发板名称(硬件平台):FS-MP1A

主控制器:STM32MP157AAA3 = Cortex-A7 * 2 + Cortex-M4 ------ 异构核

  • 异构核:指在同一处理器(或芯片)内,集成了两种或多种架构、功能、性能不同的计算核心

CPU主频:Cortex-A7最高650MHz Cortex-M4最高209MHz

硬盘:eMMC(4G) TF卡(32G) DDR3:512MB

网卡:千兆网卡

屏幕:5寸、7寸、HDMI屏幕

摄像头:OV5640


二、硬件术语

2.1 原理图 / 电路图

        原理图 / 电路图用于绘制并呈现各个电器元器件的硬件连接,是用于描述电子元器件连接关系、工作原理的核心技术图纸。

2.2 芯片手册

        芯片手册中记录了当前芯片的内部结构并说明了当前芯片能够工作的流程

        官方、权威技术文档,核心作用是全面解析芯片的功能、性能、电气特性、使用规则及设计要求,是芯片选型、电路设计、编程开发和故障排查的 “说明书”。

2.3 PCB 板

        PCB(Printed Circuit Board)中文名称为:印制电路板,用于集成各种硬件外设并综合连接。

        它是电子设备中用于承载、固定电子元器件,并实现元器件之间电气连接的基础部件,广泛应用于手机、电脑、家电、汽车电子、工业控制设备等几乎所有电子类产品中。其核心作用是替代传统的手工焊接导线连接方式,大幅提高了电子设备的集成度、可靠性和生产效率。

PCB 板

2.3 丝印

        丝印就是存在于 PCB 板上的白色字体,用于标志存在于 PCB 板上的各个电子元器件的唯一标识,每个电气元件的丝印都是唯一的。

        电路图中的丝印是蓝色字体,与 PCB 板的白色字体是一致的。

常用电器元件丝印标识

电阻R
电容C
二极管D
发光二极管LD
三极管Q
接插件J
集成 IC 芯片U

2.4 网络编号

        在上面电路图中,红色字体就是网络编号,用于标志某个引脚或者某个引脚的功能

        其在电路图中一般是两两对应的。

2.5 二极管

二极管特点单向导电特性

二极管作用保护电路,防止电流反方向击穿电路

2.6 三极管

三极管:基极集电极发射极

三极管特性放大特性(模拟电路)开关特性(数字电路)

三极管分类

  1. NPN 三极管
  2. NPN 三极管

模拟信号    ---->    连续变化的数值

数字信号    ---->    由0和1组成的电信号,0代表低电平信号,1代表高电平信号

        当前FS-MP1A硬件平台是基于数字电路设计,也就是数据传输时,只能使用0和1组成的数字电信号进行数据传输。

2.7 MOS 管

MOS 管的分类

  1. N-MOS 管
  2. P-MOS 管

MOS 管的三极

  • 栅极、源极、漏极


三、分析电路图

(1)主要做两件事

  1. 分析当前硬件的有效电路的导通和截断情况
  2. 找到控制当前外设的引脚

(2)查找外设引脚的步骤

实际外设(IO拓展板)  --->   接插件(IO拓展板)   --->   排线   --->   接插件(核心板)

--->   主控芯片(核心板)


以查找LD1 ---- LED1引脚为例:

  1. 在PCB板上找到需要控制的实际外设的丝印:LD1
  2. 在IO资源拓展板原理图中找到LD1对应的电路,分析当前电路的导通/截断情况,得到人为可控制的引脚:LED1
  3. 在IO资源拓展板原理图中的接插件上,寻找和LED1网络编号亮亮对应的引脚:接插件上的第38号引脚LED1
  4. 在接插件原理图中,找到拓展板接插件第38号引脚LED1/PE10,被连接到,核心板接插件上的第4号引脚PE10上
  5. 在核心板原理图中的第14页接插件上,可以找到:第4号引脚PE10
  6. 在核心板原理图中的第5页STM32MP157A主控芯片上,可以找到:PE10引脚

总结:PE10 ------> LED1 --------> 控制LD1的有效电路是否导通

(3)常用外设对应引脚关系


四、分析芯片手册

4.1 框图分析

4.2 STM32MP157A芯片内部图

4.3 物理地址映射表

4.4 RCC 章节

4.5 GPIO 章节

1)GPIO 介绍

        GPIO 是通用可编程的输入 / 输出端口,作用是输入 / 输出数字电信号

        每个 GPIO 端口都有 4 个 32 位可编程的寄存器2 个 32 位的数据寄存器1 个 32 位的置位 / 复位寄存器

        除此之外,每个 GPIO 端口还有 1 个 32 位的锁存寄存器,2 个 32 位的复用功能寄存器

GPIO 的主要特征

  1. 输出状态(输出模式):推挽输出、开漏输出,是否外接上拉/下拉电阻
  2. 输出的数据可以来自输出数据寄存器或者芯片上的外设控制器
  3. 每个 GPIO 端口都有可选择的输入/输出速率
  4. 输入状态(输入模式):浮空输入模式、外接上拉、下拉电阻的输入模式、模拟输入模式
  5. 输入的数据会被存放到输入数据寄存器中或者芯片上的外设控制器中
GPIO 的八种工作模式

输入模式

  1. 浮空输入模式
  2. 外接上拉电阻的输入模式
  3. 外接下拉电阻的输入模式
  4. 模拟信号输入模式

输出模式

  1. 开漏输出模式
  2. 推挽输出模式
  3. 复用推挽输出模式
  4. 复用开漏输出模式

2)上拉电阻

电路的悬空状态(高阻态):当前电路的阻值无限大,并不清楚当前电路处于高电平状态还是低电平状态。

上拉电阻:一端连接到电源正极(如 VCC ),另一端连接到芯片的输入引脚或者输出引脚。

作用:悬空状态的电路,存在不清楚是高电平还是低电平状态的影响,当外接一个上拉电阻后,可以稳定当前电路处于高电平状态,用于保护电路。

接上拉电阻后引脚的电压

3)下拉电阻

下拉电阻一端连接到芯片引脚,另一端接地(GND)。

作用:当一个电路处于悬空状态时,外接一个下拉电阻,可以使当前电路处于稳定的低电平状态,用于保护电路。

4)推挽输出

        推挽输出时,GPIO外设控制器中的 N-MOS 管和 P-MOS 管都能正常工作,可以正常输出高电平信号/低电平信号

5)开漏输出

        开漏输出时,GPIO 外设控制器中的 N-MOS 管正常工作,P-MOS 管不工作只能输出低电平信号,无法输出高电平信号

问题:

使用开漏输出时,也想要输出高电平信号,需要怎么做(如何通过开漏输出输出高电平信号?)?

外接一个上拉电阻,让开漏输出也能输出高电平信号

开漏输出和推挽输出的区别?

  • 电路结构:开漏输出仅含单类型晶体管(如 N 沟道 MOS 管 ),需外接上拉电阻;推挽输出由互补晶体管(如 NPN 和 PNP 型晶体管)构成。
  • 电平输出:开漏输出不能直接输出高电平,靠上拉电阻拉高;推挽输出能直接输出高、低电平。
  • 驱动能力:推挽输出驱动能力强,能快速驱动负载;开漏输出驱动能力弱,需依上拉电阻调整。
  • 功能特性:开漏输出可实现电平转换,具备线与功能;推挽输出不便电平转换,无线与功能。

6)GPIO 内部框图分析

输出走线
输出走线图
输入走线
输入走线图

7)功能分析

GPIO 端口控制寄存器

每个 GPIO 端口都有 4 个地址映射控制寄存器用于配置 16 个 GPIO 引脚

以 PE10 为例

        P:pin
E:属于 GPIOE 端口(GPIOE 组)
10: 属于 GPIOE 下的第 10 号引脚

用于硬件初始化的寄存器

  1. GPIOx_MODER寄存器 用于GPIO工作模式的选择
  2. GPIOx_OTYPER寄存器 用于GPIO输出模式的类型选择
  3. GPIOx_OSPEEDR寄存器 用于GPIO输出模式的速率选择
  4. GPIOx_PUPDR寄存器 用于配置GPIO引脚是否外接上拉/下拉电阻
GPIO 端口数据存储器

GPIOx_ODR 寄存器用于存储需要被输出的数据(高低电平信号)

输入的数据先被存储到 GPIOx_IDR 寄存器中

GPIOx_ODR寄存器用于存储待输出数据,若要输出数据,将其写入该寄存器即可;

GPIOx_IDR寄存器用于存储输入数据,若要获取输入数据,从该寄存器读取即可。

控制LED1灯

目的:想要通过PE10引脚控制LED1灯工作/不工作   --->   向PE10引脚输出高电平/低电平信号

解决

/********************硬件初始化工作 - 只需要做1次即可*********************/

通过GPIOx_MODER寄存器配置PE10引脚为输出模式

通过GPIOx_OTYPER寄存器配置PE10引脚为推挽输出模式

通过GPIOx_OSPEEDR寄存器配置PE10引脚为低速输出模式

通过GPIOx_PUPDR寄存器配置PE10引脚为不需要外接上下拉电阻模式

/********************逻辑处理工作 - 可以写在while(1)*********************/

通过GPIOx_ODR寄存器可以输出高电平(1)/低电平信号(0)

GPIOx_ODR寄存器中写入0b1 ------- 可以实现高电平信号的输出

GPIOx_ODR寄存器中写入0b0 ------- 可以实现低电平信号的输出

GPIO 端口模式寄存器

如图所示,以 LED1 ---- PE10 引脚为例
使用哪个 GPIOx_MODER 寄存器 -----> GPIOE_MODER 寄存器
将 PE10 引脚配置为输出模式 -------> 需要控制 GPIOE_MODER 寄存器 [21:20]

当前寄存器的 32 位都是可读可写
GPIOx_MODER 寄存器
每 2 位可以管理 1 个 GPIO 引脚

将PE10配置为输出模式

目的:将PE10配置为输出模式


解决

  1. PE10的E得到当前引脚属于 GPIOE 组,需要使用 GPIOE_MODER 寄存器
  2. PE10的10得到当前引脚为第 10 号引脚,需要使用 GPIOE_MODER 寄存器中的[21:20]
  3. 配置为输出模式 -------> 需要写入 0b01
任务

/********************硬件初始化工作 - 只需要做1次即可*********************/

通过GPIOx_MODER寄存器配置PE10引脚为输出模式

通过GPIOx_OTYPER寄存器配置PE10引脚为推挽输出模式

通过GPIOx_OSPEEDR寄存器配置PE10引脚为低速输出模式

通过GPIOx_PUPDR寄存器配置PE10引脚为不需要外接上下拉电阻模式

/********************逻辑处理工作 - 可以写在while(1)*********************/

通过GPIOx_ODR寄存器可以输出高电平(1)/低电平信号(0)

向GPIOx_ODR寄存器中写入0b1 ------- 可以实现高电平信号的输出

向GPIOx_ODR寄存器中写入0b0 ------- 可以实现低电平信号的输出


需要使用哪些寄存器的哪些位可以实现上述效果?

配置 PE10 引脚为输出模式 - 向 GPIOE_MODER 寄存器 [21:20] 写入 0b01


配置 PE10 引脚为推挽输出模式 - 向 GPIOE_OTYPER 寄存器 [10] 写入 0b0


配置 PE10 引脚为低速输出模式 - 向 GPIOE_SPEEDR 寄存器 [21:20] 写入 0b00


配置 PE10 引脚为不需要外接上下拉电阻模式 - 向 GPIOE_PUPDR 寄存器 [21:20] 写入 0b00

http://www.xdnf.cn/news/1429489.html

相关文章:

  • 【Python3教程】Python3高级篇之XML解析
  • 3dmax烘培插件3dmax法线贴图烘焙教程glb和gltf元宇宙灯光效果图烘焙烘焙光影贴图支持VR渲染器
  • 10 51单片机之DS1302实时时钟
  • Java集合源码解析之ArrayList
  • 网络共享协议
  • 【Vue2 ✨】 Vue2 入门之旅(五):组件化开发
  • 车载刷写架构 --- ECU软件更新怎么保证数据的正确性?
  • MATLAB矩阵及其运算(三)矩阵的创建
  • 应用层:HTTP/HTTPS协议
  • 【Python数据可视化:Matplotlib高级技巧】
  • 高效数据传输的秘密武器:Protobuf
  • 京东商品详情商品详情接口技术实现:从数据抓取到结构化解析全方案
  • LeetCode 777.在LR字符串中交换相邻字符
  • C++ 面试高频考点 力扣 852. 山脉数组的峰顶索引 二分查找 题解 每日一题
  • 【Linux笔记】命令行与vim基础
  • 单元测试总结2
  • MTK Linux DRM分析(二十六)- MTK mtk_drm_ddp_xxx.c
  • Spring Boot 3.5.3 集成 Log4j2 日志系统
  • 从spring MVC角度理解HTTP协议及Request-Response模式
  • 异常处理小妙招——1.别把“数据库黑话”抛给用户:论异常封装的重要性
  • 图像 OSD层数据 显示--OSD LOGO单色黑色显示,按区域大小申请MMZ内存的优缺点分析
  • 2022版Unity创建时没有2D灯光(2D Light),没有Global LIght2D怎么办?
  • Java集合遍历的方法有哪些
  • 使用Spark计算WordCount
  • 美团 LongCat 开源大模型60 亿参数 MoE 架构,赋能开发者加速 AI 应用落地
  • vue2中如何使用Ant Design Vue 中的 Tooltip 文字提示
  • 242. 有效的字母异位词| 349. 两个数组的交集
  • 通信中FDD和TDD的区别
  • 【JavaEE】多线程案例
  • 使用 Python 的 SymPy 进行符号计算