【STM32】GPIO的輸入輸出

GPIO是通用的輸入輸出接口,可配置8種輸入模式,輸出模式下可控制端口輸出高低電平,用于點亮LED、控制蜂鳴器、模擬通信協議等;輸入模式下可以讀取端口的高低電平或者電壓,用于讀取按鍵、外接模塊的電平信號、ADC的電壓采集等。

一、GPIO的輸出

當GPIO引腳被配置為輸出模式時,其核心目的是由MUC主動控制引腳的電平狀態(高電平VDD或低電平VSS/GND),從而驅動外部電路或者信號其他設備。

GPIO輸出模式的主要特點

????????1.可配置的輸出類型:

?推挽輸出:引腳內部包含一個 PMOS(上管)和一個 NMOS(下管)晶體管。當輸出高電平? 時,PMOS 導通,NMOS 截止,引腳連接到?VDD。當輸出低電平時,PMOS 截止,NMOS 導通,引腳連接到VSS。

  • 特點:有較強的驅動能力,不依賴外部電路,輸出的高低電平比較準確。

開漏輸出:引腳內部僅包含一個 NMOS(下管)晶體管。當輸出低電平時,NMOS 導通,引腳連接到VSS。當輸出高電平時,NMOS 截止,引腳處于高阻態(相當于斷開)。

  • 特點:依賴上拉,電平轉換,驅動能力較弱(高電平)。

????????2.可配置的輸出速度:

STM32允許為輸出引腳配置不同的壓擺率。這決定了引腳電平從低到高或從高到低切換的速度。

一般通常分為低速、中速、高速、超高速。

低速:最低功耗、最低噪聲。一般適用于不頻繁切換的引腳(如LED指示燈、控制使能信號)。

中速:平衡功耗、噪聲和速度。

高速:最快的切換速度。一般適用于需要高頻切換的引腳(如SPI、USART時鐘線、PWM輸出)。

超高速:在部分高性能型號上提供,速度最快。

? ? ? ? 3.輸出數據寄存器

ODR:直接控制引腳輸出電平。

  • 寫1到對應的ODR位:輸出高電平(在推完模式下)使輸出管截止(在開漏模式下,需外部上拉才能呈現高電平)。
  • 寫0到對應的ODR位:輸出低電平(在推挽和開漏模式下都使輸出管導通拉低)。

BSRR?位設置/復位寄存器。這是一個更高效、更常用的操作 ODR 的方式,特別適合原子操作(避免讀-修改-寫操作在多任務環境中的競爭條件)。

  • BSRR的低 16 位:寫1將對應的 ODR 位置1(輸出高/開漏截止)。

  • BSRR的高 16 位:寫1將對應的 ODR 位置0(輸出低/開漏導通)。

  • 寫0到BSRR的任何位無效果。這允許只改變需要改變的位而不影響其他位。

????????4.可選的內部上拉/下拉電阻

  • 即使在輸出模式下,也可以選擇啟用內部的上拉或下拉電阻。

主要用途:

在MCU剛啟動或者復位后、GPIO 配置完成前,內部上拉/下拉可以提供一個確定的初始電平,防止引腳懸空導致的不確定狀態。

二、如何配置 GPIO 為輸出模式

????????1.使能GPIO端口時鐘:

在RCC寄存器中使能對應GPIO端口(GPIOA,GPIOB)的時鐘。這是必要的!

? ? ? ? 2.配置引腳模式:

在GPIOx_MODER寄存器中寄存器中將對應引腳的模式位設置為01(輸出模式)。

? ? ? ? 3.配置輸出類型:

在 GPIOx_OTYPER 寄存器中設置對應引腳的輸出類型位:

  • 0 = 推挽輸出
  • 1 = 開漏輸出

? ? ? ?4.配置輸出速度:

在 GPIOx_OSPEEDR 寄存器中設置對應引腳的速度位(選擇低速、中速、高速或超高速)。

? ? ? ?5.(可選)配置上拉/下拉:

?在 GPIOx_PUPDR 寄存器中設置對應引腳的上拉/下拉位:

  • 00 = 無上拉下拉

  • 01?= 上拉

  • 10?= 下拉

  • 11?= 保留 (通常不用)

? ? ? ?6.設置初始輸出電平:

通過 GPIOx_ODR 或更推薦使用 GPIOx_BSRR 寄存器設置引腳初始輸出狀態(高或低)。

GPIO的輸出總結

STM32 的 GPIO 輸出功能強大且靈活。理解?推挽?和?開漏?兩種輸出類型的原理、特點和應用場景是核心。合理配置?輸出速度?和?上拉/下拉?電阻對于優化性能、降低功耗和噪聲至關重要。熟練掌握通過?ODR?和?BSRR?寄存器(或庫函數)控制引腳電平是實際編程的基礎。始終牢記引腳的?電氣特性限制(電壓、電流)是安全可靠設計的前提。

三、GPIO的輸入

當 GPIO 引腳被配置為輸入模式時,其核心目的是由 MCU 讀取引腳上來自外部電路的電平狀態(高電平VDD或低電平VSS/GND)。MCU 不會主動驅動該引腳的電平,而是檢測外部施加在引腳上的電壓。

GPIO 輸入模式的主要特點

????????1.高輸入阻抗:

  • 配置為輸入模式的 GPIO 引腳呈現非常高的輸入阻抗(通常在兆歐姆級別)。這意味著從外部電路汲取的電流非常微小(通常在微安級別)。
  • 優點:?不會顯著加載(影響)外部信號源,適合讀取傳感器信號、按鍵狀態等微弱或高阻抗信號。

? ? ? ? 2.可配置的輸入特性:

STM32 為輸入引腳提供了三種主要的配置選項,用于確定引腳在無外部驅動信號時的默認狀態抗干擾能力

浮空輸入:內部既不上拉也不下拉。引腳完全“懸空”。

上拉輸入:在引腳和VDD之間內部連接一個電阻(典型值 30KΩ - 50KΩ)。

下拉輸入:在引腳和VSS之間內部連接一個電阻(典型值 30KΩ - 50KΩ)。

? ? ? ? 3.施密特觸發器:

所有 STM32 GPIO 輸入引腳都包含施密特觸發器

作用:?對輸入信號進行整形

? ? ? ? 4.輸入數據寄存器

IDR:?輸入數據寄存器。這是讀取引腳當前電平狀態的地方。

讀取IDR寄存器中對應引腳的位:

  • 0?= 檢測到低電平 (引腳電壓 <?V_IL)

  • 1?= 檢測到高電平 (引腳電壓 > V_IH)

四、如何配置GPIO為輸入模式

  1. 使能 GPIO 端口時鐘:?在 RCC 寄存器中使能對應 GPIO 端口(如 GPIOA, GPIOB)的時鐘。必須步驟!

  2. 配置引腳模式:?在 GPIOx_MODER 寄存器中將對應引腳的模式位設置為?00?(輸入模式)。

  3. 配置上拉/下拉:?在 GPIOx_PUPDR 寄存器中設置對應引腳的上拉/下拉位:

  • 00?= 浮空輸入 (無上拉下拉 -?慎用)

  • 01?= 上拉輸入

  • 10?= 下拉輸入

  • 11?= 保留 (通常不用)

(可選) 配置模擬模式:?如果該引腳將用作 ADC、DAC 或 Comparator 的輸入,除了將 MODER 設置為模擬模式 (11),通常也要求 PUPDR 配置為無上拉下拉 (00)。模擬模式會禁用施密特觸發器和數字輸入路徑。

//直接讀取 IDR 寄存器
if (GPIOA->IDR & GPIO_IDR_ID0) {  // 檢查 PA0 對應位 (IDR bit0) 是否為 1// PA0 為高電平 (按鍵松開)
} else {// PA0 為低電平 (按鍵按下)
}

一般適用場景:

按鍵/開關檢測:上拉輸入 + 按鍵接地:松開=高電平,按下=低電平。下拉輸入 + 按鍵接?VDD:松開=低電平,按下=高電平。

數字傳感器讀取:讀取數字傳感器(如數字溫度傳感器 DS18B20 - 需單總線協議、PIR 運動傳感器、霍爾開關)的輸出信號。

接收數字信號:

  • 通信接口:UART RX, SPI MISO, I2C SDA (作為從機接收時), CAN RX 等。這些復用功能通常會自動或要求配置相應的輸入模式(浮空或上拉取決于協議)。

  • 外部中斷源:配置為輸入是使用外部中斷/事件控制器 (EXTI) 的前提條件。

  • 數字狀態監控:讀取外部設備的狀態信號(如就緒READY、忙BUSY、錯誤ERROR等)。

模擬信號采集 (ADC/DAC/COMP):當引腳配置為模擬輸入模式時,它本質上是輸入模式的一個特例(MODER=11, PUPDR=00),信號直接連接到 ADC 轉換器、比較器或其他模擬外設,繞過施密特觸發器和數字輸入路徑。

電平檢測/監控:?監控電源狀態、外部邏輯電平等。

注意事項

1、避免浮空輸入:?這是導致不穩定、誤觸發、額外功耗的最常見原因之一。除非外部電路保證提供確定驅動(如推挽輸出信號)或用于模擬輸入,否則務必啟用內部上拉或下拉電阻!

2、輸入阻抗與信號源驅動能力:?雖然輸入阻抗很高,但如果信號源阻抗也很大(如長線、高阻抗傳感器),信號上升/下降時間會變慢,可能影響高速信號識別或增加噪聲敏感性。必要時可考慮緩沖器(如跟隨器)。

3、復用功能:?當引腳用作通信接口 (UART, SPI, I2C, CAN 等) 的輸入或外部中斷 (EXTI) 時,輸入模式(浮空、上拉)的配置需遵循外設或中斷的要求。參考參考手冊和外設章節。

GPIO的輸入總結

STM32 的 GPIO 輸入模式是感知外部數字世界的關鍵。核心在于理解浮空、上拉、下拉三種配置的區別與應用場景(上拉下拉是穩定性的保障),掌握施密特觸發器的抗噪作用,以及嚴格遵守電壓限制(特別是 5V Tolerant)。通過讀取?IDR?寄存器可以獲取引腳狀態。按鍵檢測可以很好的理解輸入模式原理和實踐。一定要避免浮空輸入注意電壓兼容性是設計可靠系統的關鍵原則。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/92370.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/92370.shtml
英文地址,請注明出處:http://en.pswp.cn/web/92370.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

5分鐘了解OpenCV

在數字化時代&#xff0c;圖像和視頻已經成為信息傳遞的核心載體。從手機拍照的美顏功能到自動駕駛的路況識別&#xff0c;從醫學影像分析到安防監控系統&#xff0c;視覺技術正深刻改變著我們的生活。而在這背后&#xff0c;OpenCV 作為一款強大的開源計算機視覺庫&#xff0c…

Oracle 關閉 impdp任務

Oracle 關閉 impdp任務 執行 impdp system/123456 attachSYS_EXPORT_TABLE_01 執行 stop_jobimmediate

數據結構——鏈表2

1.2 實現單鏈表 在上一篇文章中&#xff0c;單鏈表的實現只有一少部分&#xff0c;這一篇接著來了解單鏈表剩下的接口實現。 SList.h#pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h>//定義單鏈表就是定義節點&#xff0c;因為單鏈表…

Windows和Linux應急響應以及IP封堵

目錄 1、Windows入侵排查思路 1.1 檢查系統賬號安全 1.2 檢查異常端口、進程 1.3 檢查啟動項、計劃任務、服務 1.4 檢查系統相關信息 1.5 自動化查殺 1.6 日志分析 系統日志分析 Web 訪問日志 2、Linux 入侵排查思路 2.1 賬號安全 2.1.1、基本使用 2.1.2、入侵排查…

MIT成果登上Nature!液態神經網絡YYDS

2025深度學習發論文&模型漲點之——液態神經網絡液態神經網絡&#xff08;Liquid Neural Networks&#xff0c;LNN&#xff09;是一種受生物神經系統啟發的連續時間遞歸神經網絡&#xff08;RNN&#xff09;&#xff0c;其核心創新在于將靜態神經網絡轉化為由微分方程驅動的…

AI 對話高效輸入指令攻略(四):AI+Apache ECharts:生成各種專業圖表

- **AI與數據可視化的革命性結合**:介紹AI如何降低數據可視化門檻,提升效率。 - **Apache ECharts:專業可視化的利器**:使用表格對比展示ECharts的特點、優勢和適用場景。 - **四步實現AI驅動圖表生成**:通過分步指南講解從環境準備到圖表優化的全流程,包含多個代碼示例及…

vue2 基礎學習 day04 (結構/樣式/邏輯、組件通信、進階語法)下

一、非父子通信-event bus 事件總線1.作用非父子組件之間&#xff0c;進行簡易消息傳遞。(復雜場景→ Vuex)2.步驟創建一個都能訪問的事件總線 &#xff08;空Vue實例&#xff09;import Vue from vue const Bus new Vue() export default BusA組件&#xff08;接受方&#xf…

ubuntu 20.04 C和C++的標準頭文件都放在哪個目錄?

在 Ubuntu 20.04 中&#xff0c;C 和 C 標準頭文件的存放目錄主要由編譯器&#xff08;如 GCC&#xff09;的安裝路徑決定&#xff0c;通常分為以下兩類&#xff1a;?1. C 標準頭文件?C 語言的標準頭文件&#xff08;如 <stdio.h>、<stdlib.h> 等&#xff09;默認…

change和watch

是的&#xff0c;你理解得很對&#xff01; change 與 v-model 的結合&#xff1a;change 事件通常用于監聽 表單元素的變化&#xff0c;但它并不一定意味著值發生了變化。它主要是當 用戶與輸入框交互時&#xff08;如點擊選項、選擇文本框內容、提交表單等&#xff09;觸發的…

分布式微服務--GateWay(1)

一、什么是微服務網關&#xff08;API Gateway&#xff09; 定義&#xff1a;微服務網關是整個系統請求的統一入口&#xff0c;負責請求轉發、過濾處理、安全校驗等。 作用&#xff1a; 請求路由 日志記錄 權限控制 參數校驗 解決跨域問題 黑白名單控制 限流、熔斷、降級…

大文件斷點續傳(vue+springboot+mysql)

斷點續傳vue前端代碼后端代碼controller 層service層持久層主表&#xff0c;初始化單次上傳文件表&#xff0c;單次上傳所有的文件記錄文件分塊表科普信息參考其他博主 流程圖 vue前端代碼 這里是只做了demo示例&#xff0c;主線測試沒什么問題&#xff0c;前端同學可參考修…

Nodejs》》MySql

Node.js 操作MySQL數據庫 文檔 # 項目要先安裝mysql包npm i mysqlxx // 安裝指定版本npm i mysql // 默認安裝最新版本 # 連接 mysq// 使用連接池連接const mysql require(mysql)# 建立連接const db mysql.createPool({host:, // 數據庫的IP地址user:ro…

金倉數據庫常見問題(持續更新)

目錄 1.查看大小是否敏感寫參數&#xff0c;提示&#xff1a;未認可的配置參數 "case_sensitive" 2.sys_backup.sh init時提示can not connect the primary node 3.設置邏輯備份運行腳本時提示錯誤are not allowed to use this program (crontab) 4.修改表字段類…

Docker Buildx最佳實踐:多架構鏡像構建指南

文章目錄為什么需要 Docker Buildx安裝與啟用 Docker Buildx創建多架構構建器實例構建多架構鏡像優化構建性能調試多架構構建實戰案例&#xff1a;構建 Go 應用多架構鏡像總結Docker Buildx 是 Docker 官方推出的擴展工具&#xff0c;用于支持多平臺鏡像構建&#xff0c;簡化跨…

你用的是什么鍵盤?

在電競行業飛速發展的當下&#xff0c;游戲鍵盤作為玩家操作的核心載體&#xff0c;其性能表現直接影響著游戲體驗與競技結果。而賽卓電子推出的磁軸鍵盤專用芯片 SC4823&#xff0c;憑借一系列突破性的技術特性&#xff0c;正成為游戲鍵盤領域的性能革新者。?對于游戲玩家而言…

Activiti 中各種 startProcessInstance 接口之間的區別

前言在用 RuntimeService 接口啟動流程實例時&#xff0c;總是分不清楚不同 startProcessInstanceXXX 接口之間的區別&#xff0c;這篇文章基于 Activiti 7.0.0.GA 版本&#xff0c;對這一類接口進行一個梳理和歸類。詳解接口列表RuntimeService 接口中以 startProcessInstance…

新手BUG:函數中 static 變量的賦值語句只會執行一次

在 C 函數中使用 static 變量時&#xff0c;很多新手會陷入一個認知誤區&#xff1a;認為變量的初始化語句會在每次函數調用時執行。比如在bool funcA() { // Q&#xff1a;多次調用funcA&#xff0c;funcB會被執行幾次&#xff1f;// A&#xff1a;1次static bool value func…

Python 基礎詳解:數據類型(Data Types)—— 程序的“數據基石”

一、引言&#xff1a;為什么數據類型如此重要&#xff1f;在 Python 編程中&#xff0c;數據類型決定了&#xff1a;數據的存儲方式可以對數據執行的操作數據的取值范圍不同類型之間的運算規則理解數據類型是編寫正確、高效程序的基礎。Python 是動態類型語言&#xff0c;雖然你…

WindowsLinux系統 安裝 CUDA 和 cuDNN

Windows安裝前的準備工作 檢查硬件兼容性&#xff1a;確認電腦顯卡為 NVIDIA GPU。通過快捷鍵 Win R 喚出“運行”&#xff0c;輸入“control /name Microsoft.DeviceManager”喚出“設備管理器”&#xff0c;點擊“顯示適配器”查看是否有 NVIDIA 字樣。 驗證 CUDA 支持性&a…

工業數采引擎-通信鏈路SOCKET

通信庫&#xff1a;DotNetty 封裝實現&#xff1a;TcpServer、TcpClient、Udp TCP協議特性&#xff1a;面向連接協議&#xff1b;每個新連接都會創建獨立的ChannelHandler實例&#xff1b;TcpHandler構造函數在每次客戶端連接時觸發 UDP協議特性&#xff1a;無連接協議&#…