【硬件-筆試面試題】硬件/電子工程師,筆試面試題-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、I2C 等)。
    • 模擬通道:部分 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 管導通時輸出低電平,高電平時輸出呈高阻態,需外接上拉電阻才能輸出高電平,適用于 I2C 總線、線與邏輯等場景。
3. 復用功能模式
  • 復用推挽輸出(Alternate Function Push-Pull)
    引腳由片上外設(如 USART、SPI)控制輸出,支持推挽特性(如 USART 的 TX 引腳)。
  • 復用開漏輸出(Alternate Function Open-Drain)
    引腳由片上外設控制,支持開漏特性(如 I2C 的 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. 通信接口

    • 模擬 I2C/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
英文地址,請注明出處:http://en.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…