【硬件-笔试面试题】硬件/电子工程师,笔试面试题-51,(知识点:stm32,GPIO基础知识)

目录

1、题目

2、解答

3、相关知识点

一、GPIO 基本结构与特性

1. GPIO 硬件结构

2. 主要特性

二、GPIO 工作模式

1. 输入模式

2. 输出模式

3. 复用功能模式

4. 特殊模式

三、GPIO 配置步骤(以 STM32Cube HAL 库为例)

1. 初始化 GPIO 时钟

2. 配置 GPIO 引脚模式

3. 控制 GPIO 输出

4. 读取 GPIO 输入

四、GPIO 的复用功能(AF)

五、GPIO 的中断功能

六、GPIO 应用场景

七、注意事项


题目汇总版--链接: 

【硬件-笔试面试题】硬件/电子工程师,笔试面试题汇总版,持续更新学习,加油!!!-CSDN博客

【硬件-笔试面试题】硬件/电子工程师,笔试面试题-51,(知识点:stm32,GPIO基础知识)

小米嵌入式面试题

1、题目

讲一讲对STM32中GPIO的理解

2、解答

gpio通用输入输出,

有四种输入模式:浮空输入,上拉输入,下拉输入,模拟输入

四种输出模式:推挽输出,开漏输出,复用开漏,复用推挽;

可以用于中断控制,信号采集,信号输出,作为SPI、USART、IIC等外设接口

3、相关知识点

STM32 GPIO(General-Purpose Input/Output,通用输入输出)是微控制器与外部世界交互的基础接口,可配置为输入或输出模式,实现数字信号的读取或输出,广泛用于连接传感器、执行器、显示设备等外设。以下从结构、配置、特性到应用场景进行详细解析:

一、GPIO 基本结构与特性

1. GPIO 硬件结构
  • 引脚分组
    STM32 系列(如 F1、F4、H7 等)通常将 GPIO 分为多个端口组(如 PA、PB、PC...),每组包含 16 个引脚(Pin0~Pin15),不同型号的 GPIO 数量和分组不同(如 STM32F103C8T6 有 7 组共 112 个 GPIO)。
  • 内部结构
    每个 GPIO 引脚包含以下核心组件:
    • 输入缓冲器:读取外部信号,支持浮空输入、上拉输入、下拉输入模式。
    • 输出驱动器:输出高低电平,支持推挽输出、开漏输出模式。
    • 复用功能控制器:可将 GPIO 复用为其他外设功能(如 USART、SPI、I²C 等)。
    • 模拟通道:部分 GPIO 可配置为模拟输入,用于 ADC 采样或 DAC 输出。
    • 保护二极管:防止引脚电压超出 VDD 或 VSS 范围,增强抗干扰能力。
2. 主要特性
  • 工作电压
    • 标准 GPIO:通常支持 3.3V 电平,部分型号兼容 5V tolerant(如 STM32F1 系列部分引脚)。
    • 低功耗型号(如 STM32L0/L4):支持 1.8V~3.6V 宽电压范围。
  • 驱动能力
    • 标准输出电流:约 2~4mA(需外接上拉 / 下拉电阻增强驱动能力)。
    • 部分引脚支持更高驱动电流(如 8mA 或 16mA,具体参考芯片手册)。
  • 配置灵活性
    每个引脚可独立配置为不同模式,支持动态切换(运行时重配置)。

二、GPIO 工作模式

STM32 的 GPIO 支持 8 种工作模式,可分为四大类:

1. 输入模式
  • 浮空输入(Floating Input)
    引脚无内部上拉 / 下拉电阻,电平由外部信号决定,适用于外部已提供上拉 / 下拉的场景(如按键连接外部上拉电阻)。
  • 上拉输入(Pull-up Input)
    内部上拉电阻使引脚默认保持高电平,外部信号拉低时读取低电平(如按键接地时触发)。
  • 下拉输入(Pull-down Input)
    内部下拉电阻使引脚默认保持低电平,外部信号拉高时读取高电平。
  • 模拟输入(Analog Input)
    禁用数字输入缓冲器,引脚直接连接 ADC 采样电路,用于模拟信号采集(如温度传感器、电压检测)。
2. 输出模式
  • 推挽输出(Push-Pull Output)
    输出驱动器通过 PMOS 和 NMOS 管实现高低电平输出,可直接驱动小负载(如 LED),输出电流约 2~4mA。
  • 开漏输出(Open-Drain Output)
    仅 NMOS 管导通时输出低电平,高电平时输出呈高阻态,需外接上拉电阻才能输出高电平,适用于 I²C 总线、线与逻辑等场景。
3. 复用功能模式
  • 复用推挽输出(Alternate Function Push-Pull)
    引脚由片上外设(如 USART、SPI)控制输出,支持推挽特性(如 USART 的 TX 引脚)。
  • 复用开漏输出(Alternate Function Open-Drain)
    引脚由片上外设控制,支持开漏特性(如 I²C 的 SDA/SCL 引脚)。
4. 特殊模式
  • 模拟模式
    引脚既不连接输入缓冲器也不连接输出驱动器,用于低功耗或模拟电路设计(如 ADC 采样时减少数字干扰)。

三、GPIO 配置步骤(以 STM32Cube HAL 库为例)

1. 初始化 GPIO 时钟

每个 GPIO 端口组由独立的 APB 总线时钟控制,需先使能对应时钟:

c

运行

// 使能GPIOA时钟(以PA5为例)
__HAL_RCC_GPIOA_CLK_ENABLE();
2. 配置 GPIO 引脚模式

使用GPIO_InitTypeDef结构体配置引脚参数:

c

运行

GPIO_InitTypeDef GPIO_InitStruct = {0};// 配置PA5为推挽输出模式
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;     // 推挽输出
GPIO_InitStruct.Pull = GPIO_NOPULL;             // 无上下拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;    // 低速
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
3. 控制 GPIO 输出
  • 输出高 / 低电平:

    c

    运行

    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);   // 输出高电平
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // 输出低电平
    
  • 翻转电平(常用于生成方波):

    c

    运行

    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
    
4. 读取 GPIO 输入

c

运行

GPIO_PinState pinState = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
if (pinState == GPIO_PIN_SET) {// 引脚为高电平
} else {// 引脚为低电平
}

四、GPIO 的复用功能(AF)

GPIO 可通过复用功能控制器(AF)连接到片上外设(如 USART、SPI、TIM 等),需配置以下步骤:

  1. 使能外设时钟

    c

    运行

    __HAL_RCC_USART1_CLK_ENABLE();
    
  2. 配置 GPIO 为复用模式

    c

    运行

    GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10;  // USART1_TX/RX
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;          // 复用推挽输出
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF7_USART1;     // 指定复用功能(AF7对应USART1)
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
  3. 初始化外设

    c

    运行

    // 配置USART1参数(波特率、数据位等)
    USART_HandleTypeDef huart1;
    huart1.Instance = USART1;
    huart1.Init.BaudRate = 115200;
    // 其他参数配置...
    HAL_UART_Init(&huart1);
    

五、GPIO 的中断功能

GPIO 可配置为外部中断源,支持上升沿、下降沿或双边沿触发,步骤如下:

  1. 使能 SYSCFG 时钟(部分型号需要):

    c

    运行

    __HAL_RCC_SYSCFG_CLK_ENABLE();
    
  2. 配置 GPIO 为中断模式

    c

    运行

    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;     // 上升沿触发中断
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
  3. 配置 NVIC 中断优先级

    c

    运行

    HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);  // 设置中断优先级
    HAL_NVIC_EnableIRQ(EXTI0_IRQn);          // 使能中断
    
  4. 实现中断回调函数

    c

    运行

    void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {if (GPIO_Pin == GPIO_PIN_0) {// 处理中断事件}
    }
    

六、GPIO 应用场景

  1. 控制简单外设

    • 点亮 LED:配置为推挽输出,输出高低电平控制亮灭。
    • 驱动继电器:通过三极管放大 GPIO 输出电流,控制继电器通断。
  2. 读取数字传感器

    • 按键检测:配置为上拉 / 下拉输入,检测电平变化。
    • 霍尔传感器:检测磁场变化(高 / 低电平)。
  3. 通信接口

    • 模拟 I²C/SPI:通过 GPIO 模拟时序,实现与外设通信。
    • UART 调试:将 GPIO 复用为 USART 的 TX/RX 引脚。
  4. 中断触发

    • 外部事件响应:如按键按下触发中断,唤醒 MCU。
  5. PWM 输出

    • 将 GPIO 复用为定时器 PWM 输出,控制电机转速、LED 亮度等。

七、注意事项

  1. 引脚冲突

    • 同一引脚不能同时配置为普通 GPIO 和复用功能,需确保功能无冲突。
  2. 上拉 / 下拉电阻选择

    • 输入模式下,若外部无上下拉,建议启用内部上下拉电阻,避免引脚浮空导致误触发。
  3. 输出驱动能力

    • GPIO 直接驱动能力有限(通常≤4mA),驱动大负载(如蜂鸣器)需外接三极管或专用驱动芯片。
  4. 保护措施

    • 避免引脚输入电压超出 VDD 或 VSS 范围,可通过分压电路或钳位二极管保护。
  5. 功耗优化

    • 低功耗模式下,可将未使用的 GPIO 配置为模拟模式,减少漏电。

通过合理配置 GPIO 模式、复用功能和中断,STM32 可灵活连接各种外设,满足多样化的嵌入式系统需求。

题目汇总--链接:

【硬件-笔试面试题】硬件/电子工程师,笔试面试题汇总版,持续更新学习,加油!!!-CSDN博客

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

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

相关文章

小智服务器Java安装编译(xinnan-tech)版

github:https://github.com/xinnan-tech/xiaozhi-esp32-server 一、JDK 1、JDK21下载: https://www.oracle.com/cn/java/technologies/downloads/#jdk21-windows RPM安装: rpm -ivh jdk-21_linux-x64_bin.rpm 2、IDEA设置JDK File → P…

智能平台的感知进化:AI × 视频通感在群体终端协同中的应用探索

✳️ 引言:从单兵到集群,未来智能平台的协同演进 从传统的单兵执行任务到如今的“群体智能平台编组”,现代感知系统正经历一场由 AI、机器人与智能计算平台驱动的深度变革。过去,履带式无人平台在平坦地形中承担支援任务&#xf…

基于定制开发开源AI智能名片S2B2C商城小程序的B站私域流量引流策略研究

摘要:随着移动互联网进入存量竞争阶段,私域流量运营成为企业数字化转型的核心战略。B站作为中国最大的Z世代文化社区,其3.41亿月活跃用户中Z世代占比达58%,且25岁以上用户增速显著,用户日均使用时长超108分钟&#xff…

Spring+K8s+AI实战:3全栈开发指南

Spring、K8s、人工智能、Docker及Windows实例 以下是与Spring、K8s、人工智能、Docker及Windows实例相关的实用示例,涵盖开发、部署和集成场景: Spring Boot微服务开发 示例1:REST API构建 使用Spring Boot创建带Swagger文档的RESTful服务,集成JPA和Hibernate进行数据库…

C++ 生成动态库.dll 及 C++调用DLL,C++ 生成静态库.lib及 C++调用lib

文章目录1 C 动态库.dll生成 及 调用1.1 生成C 动态库dll1.1.1 创建项目MyDLL1.1.2 编写.h 和 .cpp文件1.1.3 设置 及 生成 DLL1.2 调用 C 动态库dll1.2.1 创建C 空项目DLLtest1.2.2 动态库配置 及代码调用测试2 C 静态库.lib 生成 及 调用3 C 生成静态库.lib及调用 &#xff0…

信创应用服务器TongWeb安装教程、前后端分离应用部署全流程

TongWeb 简介TongWeb 是东方通(TongTech)开发的国产Java应用服务器(中间件),类似于国外的 WebLogic、WebSphere 和开源的 Tomcat、Jetty,主要用于企业级Java应用(如J2EE)的部署和运行…

Rust 同步方式访问 REST API 的完整指南

Rust 同步方式访问 REST API 的完整指南 在 Rust 中不使用异步机制访问 REST API 是完全可行的,特别适合简单应用、脚本或不需要高并发的场景。以下是完整的同步实现方案: 📦 依赖选择 推荐库: [dependencies] reqwest { version…

32.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--财务服务--账本与预算

在我们的孢子记账应用中,账本是用于记录每一笔收支流水的核心模块。通过账本,我们可以清晰地追踪资金的流入与流出,进行数据统计和分析,为后续的报表生成和决策支持提供基础数据。预算模块则是用于设置和管理预算的功能&#xff0…

模型预估打分对运筹跟踪的影响

在uplift建模中,模型离线指标(QINI、AUUC)提升并不意味着在线A/B实验的收益,因为在线运筹还需要λ\lambdaλ约束。如果模型打分不满足单调增且roi边际递减,那么λ\lambdaλ运筹求解会非常不稳定,导致线上发券偏高,毛利…

音视频学习(四十六):声音的三要素

声音是人类感知世界的重要途径之一。在自然界中,声波本质上是介质中传播的机械振动,而人类对声音的主观感受主要通过三种属性来认知和描述,即音调(音高)、响度(强弱)、音色(音质&…

spring batch处理数据模板(Reader-Processor-Writer模式)

步骤监听器 Component public class StepListener implements StepExecutionListener {private StepExecution stepExecution;public StepExecution getStepExecution() {return this.stepExecution;}Overridepublic void beforeStep(StepExecution stepExecution) {this.stepE…

【华为OD机试】从小桶里取球

题目描述 某部门开展Family Day开放日活动,其中有个从桶里取球的游戏,游戏规则如下: 有N个容量一样的小桶等距排开,且每个小桶都默认装了数不等的小球, 每个小桶装的小球数量记录在数组bucketBallNums中, 游戏开始时,要求所有桶的小球总数不能超过SUM, 如果小球总…

std::unordered_map 和 std::map的区别【C++】

std::unordered_map 和 std::map 是 C 标准库中两种不同的关联容器,它们都用于存储键值对,但在实现方式、性能特点和使用场景上存在显著区别。以下是它们的主要区别: 1. 数据结构 std::map: 基于 红黑树(一种自平衡二叉…

云原生环境里的显示变革:Docker虚拟浏览器与cpolar穿透技术实战

文章目录前言【视频教程】1. 关于neko2. 本地部署neko3. neko简单使用4. 安装内网穿透5. 配置neko公网地址6. 配置固定公网地址前言 现代远程协作本该是无缝衔接的过程,却被这些障碍不断打断:多设备屏幕同步存在延迟、跨平台访问需要复杂配置、公网IP申…

LVGL + ESP-Brookesia 在Windows下的编译和运行

LVGL ESP-Brookesia 在Windows下的编译和运行 1. 项目介绍 本项目是基于 LVGL(轻量级多功能图形库)和 ESP-Brookesia 的嵌入式模拟桌面应用开发框架,专为嵌入式设备构建丰富的图形界面而设计。通过在Windows环境下模拟嵌入式设备的图形界面…

【ip】IP地址能否直接填写255?

IP地址数值限制​ 最近有朋友后台问我,IP地址里填255行不行?思索着有一阵子没有分享基础的知识,就在今天大致说一下,关于IP地址里填255行不行?答案当然是否定的。 IP地址由4个段组成,每个段的数值范围其实限…

力扣热题100----------141.环形链表

给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索…

【Java开发日记】我们来说说 LockSupport 的 park 和 unpark

目录 一、LockSupport 1.1、LockSupport函数列表 1.2、基本使用 先 park 再 unpark 先 unpark 再 park 1.3、特点 与 Object 的 wait & notify 相比 二、LockSupport park & unpark原理 2.1、情况一,先调用park,再调用unpark park 操作…

AGI|从“实验室”到“生产线”:企业级AI Agent 如何突围

在数字化转型的深水区,企业级 AI Agent 正从技术概念走向产业实践,成为驱动生产力变革的核心引擎。目录 一、风口已至:AI Agent 的崛起逻辑与市场刚需 二、企业级AI Agent:核心能力与独特价值定位 三、AI Agent 的未来目标 一、…

AtCoder Beginner Contest 417

文章目录A A SubstringB Search and DeleteC Distance IndicatorsD Takahashis ExpectationE A Path in A DictionaryF Random GatheringG Binary CatAtCoder Beginner Contest 417A A Substring You are given an N-character string S consisting of lowercase English lett…