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.pswp.cn/news/920999.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/920999.shtml

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

相关文章

橙武低代码:不仅仅是云SaaS,更是云端开发+本地部署的新范式

版权归作者所有,转载请注明出处。 一、低代码的时代背景 在过去十年里,软件研发模式经历了巨大的演变。从传统的瀑布开发,到敏捷、DevOps,再到如今的低代码/无代码平台,研发效率和交付模式发生了根本性变化。低代码的…

神经语言学视角:脑科学与NLP深层分析技术的交叉融合

引言:从“统计拟合”到“类人理解”——NLP的下一个范式近年来,以Transformer架构为核心的大型语言模型(LLM)在自然语言处理(NLP)领域取得了前所未有的成功 。它们能够生成流畅的文本、回答复杂的问题&…

Coze源码分析-工作空间-项目查询-前端源码

前言 本文将深入分析Coze Studio项目中用户登录后进入工作空间查看和管理项目的前端实现,通过源码解读来理解工作空间项目开发功能的架构设计和技术实现。Coze Studio采用了现代化的React TypeScript技术栈,结合微前端架构和模块化设计,为用…

【系统架构师设计(9)】系统设计:结构化设计与面向对象设计

文章目录一、核心思想:模块化与对象化的设计哲学1、结构化设计的核心思想2、面向对象设计的核心思想3、两种设计方法的本质区别二、结构化设计知识点1、设计阶段2、设计原则3、 内聚类型(从低到高)耦合类型(从低到高)模…

还在从零开发AI应用?这个项目直接给你500个现成方案!!!

大家好,我是顾北,一名AI应用探索者,也是GitHub开源项目收集者。昨晚又在GitHub上瞎逛...咦,碰到了一个特别有意思的项目。说实话吧,作为一个天天折腾AI工具的人,见过的项目没有一千也有八百了,但…

react+taro的使用整理

前言: 本文主要整理下我们跨段工具taro的具体使用方法与相关资料。 taro官网: 安装及使用 | Taro 文档 安装: 全局脚手架安装: npm install -g tarojs/cli 使用脚手架安装我们的taro项目 taro init myApp 运行到不同小程序教…

从 “容器保姆” 到 “云原生王者”:K8s 全方位指南

目录 开头专业总结 一、先搞懂:K8s 到底是什么?能解决什么痛点? 1. K8s 的本质 2. 核心用处(解决的痛点) 二、K8s 核心知识点:组件与概念(标重点!) (一…

03.《交换的底层逻辑:从基础到应用》

交换基础 文章目录交换基础MAC 地址:设备的 “全球唯一身份证”MAC 地址的基本属性MAC 地址的三类类型(按通信范围划分)以太帧以太帧的两个标准格式1. Ethernet_II 格式(常用)2. IEEE 802.3 格式(少用&…

火语言 RPA 界面应用生成:轻量化开发核心优势

火语言 RPA 界面应用生成功能,主打 “低门槛、快落地”,无需复杂开发环境与专业技术,就能快速实现需求验证与工具搭建,尤其适配中小团队与个人,核心优势如下:​一、1 小时搞定需求验证:3 步落地…

第三方软件测试机构【多语言开发(PHP/Java/Python)WEB 应用的安全专业测试流程】

PHP应用测试安全 文件包含漏洞:检测include/require函数参数未过滤场景(如?page../../../etc/passwd) 命令注入:检查system()/exec()函数输入验证(如| cat /etc/passwd) 会话安全:验证session …

C++条件变量学习

1、概述你知道条件变量"虚假唤醒"问题么&#xff0c;下面代码有问题么void CFileTaskThread::Run() {while (!m_bStop){CFileItemRequest* pFileItem;{std::unique_lock<std::mutex> guard(m_mtItems);if (m_Filelist.empty()){if (m_bStop)return;// 等待条件…

React Native系统组件(一)

1&#xff0c;View&#xff0c;UI的构建基石 四个方向&#xff0c;水平&#xff0c;水平倒序&#xff0c;垂直&#xff0c;垂直倒序 flexGrow与flex的区别&#xff0c;flexgrow是分父布局剩余的空间&#xff0c;flex是分父布局全部的空间上面的是flexgrow 123 下面的是flex 123…

Git 代码提交管理指南

目录 1. 初始设置&#xff08;首次使用 Git 时&#xff09; 2. 日常提交工作流程 场景一&#xff1a;已有本地项目&#xff0c;首次连接到远程仓库 场景二&#xff1a;已有远程仓库&#xff0c;克隆到本地 3. 更精细的文件管理 4. 提交信息规范 5. 分支管理策略 6. 高级…

go-mapus最简单的离线瓦片地图协作

基于leaflet.jsleaflet-geoman.jsgolangbeegogormsqlitewebsocket等实现一个最简单的地图协作。绘制图元&#xff0c;其他用户浏览器上实施显示绘制和修改结果&#xff0c;大家可同步进行绘制和修改。设置线型和颜色&#xff0c;粗细和透明度。保存到sqlite数据库。动画演示地图…

调式记录之八位机软件串口

现在在上班&#xff0c;做的项目几乎都是关于八位机的&#xff0c;八位机有个挺CD的点硬件资源少&#xff0c;打印之类的需要软件串口&#xff0c;有时候调的刚到很玄学&#xff0c;也有可能是我知识没有学得恨透。首先我得需要发送这句话并在代码里面设置我的延时时间&#xf…

嵌入式学习day40-硬件(1)

嵌入式&#xff1a;以应用为中心&#xff1a;消费电子(手机、蓝牙耳机、智能音响&#xff09;、医疗电子(心率脉搏、呼吸机&#xff09;、无人机&#xff08;大疆DJ&#xff09;、机器人&#xff08;人形四足机器人)计算机技术&#xff1a;计算机五大组成&#xff1a;运算器(数…

管理中心理学问:面试中教你识别他人需求动机

“我工作是为了钱&#xff0c;为了吃,住&#xff0c;和用钱买东西。”“我工作是为了地位和认可。”“我工作是为了有所归属&#xff0c;为了成为一个团体的成员。”“我工作是想高升。”“我工作是因为人应该工作&#xff0c;这是唯一的权利。”“我工作为了获取知识和认识世界…

【JavaScript】读取商品页面中的结构化数据(JSON-LD),在不改动服务端情况下,实现一对一跳转

前端实践&#xff1a;从商品页面读取 mpn 并实现一对一跳转 在实际开发中&#xff0c;我们经常会遇到这样一种需求&#xff1a; 用户浏览 A 网站的商品页面后&#xff0c;点击按钮能够直接跳转到 B 网站的对应商品。 表面看似只是一个按钮跳转&#xff0c;但如果不同商品需要精…

HTML5实现好看的邀请函网页源码

HTML5实现好看的邀请函网页源码 前言一、设计来源1.1 邀请函主页1.2 邀请函活动信息1.3 邀请函内容1.4 邀请函活动地址1.5 邀请函活动流程1.6 邀请函活动奖励1.7 邀请函联系我们 二、效果和源码2.1 动态效果2.2 源代码 结束语 HTML5实现好看的邀请函网页源码&#xff0c;酷炫的…

传输层TCP 与 安全层SSL/TLS

本章节主要探讨三个问题&#xff1a;1. SSL/TSL 的区别和联系是什么&#xff1f;2. 我们常说的 “三次握手” 发生在哪个阶段&#xff0c;SSL/TSL层有参与吗?3. HTTPS混合加密发生在哪个层?一、SSL 和 TLS 联系继承关系&#xff1a;TLS 直接基于 SSL 3.0 设计&#xff0c;可以…