STM32--GPIO

教程

視頻

博主教程

STM32系統結構圖

GPIO

GPIO(General Purpose Input/Output)是STM32內部的一種外設。

一個STM32芯片內存在多個GPIO外設,每個GPIO外設有16個引腳;

比如GPIOA:PA0~PA15;

GPIOB:PB0~PB15。

每個IO引腳都有輸入電路和輸出電路。

GPIO8種工作模式

鏈接

輸入模式

由上下拉電阻控制。

上拉模式如何保持高電平

工作原理

  1. 當配置為上拉模式時,GPIO內部會連接一個上拉電阻(通常約30-50kΩ)到VDD

  2. 當沒有外部信號驅動時,上拉電阻會將引腳電壓拉至高電平

VDD(正電源)

下拉模式如何保持低電平

工作原理

  1. 當配置為下拉模式時,GPIO內部會連接一個下拉電阻(通常約30-50kΩ)到GND

  2. 當沒有外部信號驅動時,下拉電阻會將引腳電壓拉至低電平

VSS(負電源/地)

輸出模式

由正負半導體控制 。

MOS

MOS(金屬氧化物半導體)。

PMOS中的"P"

  • P代表Positive(正)

  • 當輸出高電平時導通

NMOS中的"N"

  • N代表Negative(負)

  • 當輸出低電平時導通

推挽輸出

1上高,0下低;

開漏輸出

PMOS斷開,無效,只有NMOS在工作。

通用和復用輸出

復用輸出模式,與通用輸出模式很是類似。只是輸出的高低電平的來源,不是寫程序讓CPU直接寫輸出數據到寄存器,取而代之利用片上(stm32芯片上的)外設模塊來輸出電平信號。

注意:通用模式和復用模式接線不同。

GPIO編程控制步驟

1,使用RCC開啟GPIO的時鐘;

2,使用GPIO_Init()函數初始化GPIO;

3,使用輸出/輸出函數控制GPIO口。

GPIO的庫函數

設置GPIO引腳電平

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

功能:設置指定GPIO端口的單個或多個引腳為高電平(置1)

參數

  • GPIOx:GPIO端口(如GPIOA、GPIOB等)

  • GPIO_Pin:要設置的引腳(可使用|組合多個引腳)

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

功能:設置指定GPIO端口的單個或多個引腳為低電平(置0)

參數

  • GPIOx:GPIO端口

  • GPIO_Pin:要清除的引腳(可使用|組合多個引腳)

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);

功能:設置指定GPIO端口的單個引腳狀態

參數

  • GPIOx:GPIO端口

  • GPIO_Pin:要設置的引腳(只能單個引腳)

  • BitVal:引腳狀態(Bit_SETBit_RESET

// 設置GPIOC的Pin4為高電平
GPIO_WriteBit(GPIOC, GPIO_Pin_4, Bit_SET);// 設置GPIOC的Pin4為低電平
GPIO_WriteBit(GPIOC, GPIO_Pin_4, Bit_RESET);

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

功能:一次性設置整個GPIO端口的輸出狀態

參數

  • GPIOx:GPIO端口

  • PortVal:16位值,表示所有引腳的狀態(每個bit對應一個引腳)

// 設置GPIOA所有引腳狀態:Pin0=1, Pin1=0, Pin2=1, 其他=0
GPIO_Write(GPIOA, 0x0005);  // 二進制 0000 0000 0000 0101

獲取引腳輸入/輸出電平

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

什么時候使用input,什么時候使用output?

函數類別讀取的數據來源典型應用場景
Input系列函數讀取GPIO引腳當前輸入電平檢測外部信號(按鍵、傳感器等)
Output系列函數讀取GPIO輸出寄存器的值驗證軟件配置的輸出狀態

(1) 何時使用Input函數

當GPIO配置為輸入模式或需要讀取實際引腳電平時:

檢測外部信號:

// 讀取PA0引腳電平(配置為輸入模式)
if(GPIO_ReadInputDataBit(GPIOA, GPIO_PIN_0) == Bit_SET) {// 高電平處理(如按鍵按下)
}

讀取多個輸入引腳

uint16_t port_val = GPIO_ReadInputData(GPIOB); // 讀取PB0-PB15所有引腳
(2) 何時使用Output函數

當需要確認輸出寄存器的狀態(而非實際引腳電平)時:

驗證輸出配置

// 檢查PC13輸出寄存器是否設置為高電平
if(GPIO_ReadOutputDataBit(GPIOC, GPIO_PIN_13) == Bit_SET) {// 軟件設置過輸出高電平
}

批量讀取輸出狀態

uint16_t output_states = GPIO_ReadOutputData(GPIOD); // 讀取PD端口輸出寄存器

關鍵注意

  • 輸出函數讀取的是輸出數據寄存器(ODR)的值,不一定等于實際引腳電平

  • 若外部電路拉低/拉高引腳(如短路),實際電平可能與ODR值不同。

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

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

相關文章

QUIC協議優化:HTTP_3環境下的超高速異步抓取方案

摘要 隨著 QUIC 和 HTTP/3 的普及,基于 UDP 的連接復用與內置加密帶來了遠超 HTTP/2 的性能提升,可顯著降低連接握手與擁塞恢復的開銷。本文以爬取知乎熱榜數據為目標,提出一種基于 HTTPX aioquic 的異步抓取方案,并結合代理 IP設…

[論文閱讀]MCP Guardian: A Security-First Layer for Safeguarding MCP-Based AI System

MCP Guardian: A Security-First Layer for Safeguarding MCP-Based AI System http://arxiv.org/abs/2504.12757 推出了 MCP Guardian,這是一個框架,通過身份驗證、速率限制、日志記錄、跟蹤和 Web 應用程序防火墻 (WAF) 掃描來…

Redis客戶端緩存的4種實現方式

Redis作為當今最流行的內存數據庫和緩存系統,被廣泛應用于各類應用場景。然而,即使Redis本身性能卓越,在高并發場景下,應用與Redis服務器之間的網絡通信仍可能成為性能瓶頸。 這時,客戶端緩存技術便顯得尤為重要。 客…

eNSP中路由器OSPF協議配置完整實驗和命令解釋

本實驗使用三臺華為路由器(R1、R2和R3)相連,配置OSPF協議實現網絡互通。拓撲結構如下: 實驗IP規劃 R1: GE0/0/0: 192.168.12.1/24 (Area 0)Loopback0: 1.1.1.1/32 (Area 0) R2: GE0/0/0: 192.168.12.2/24 (Area 0)GE0/0/1: 192.…

內網滲透——紅日靶場三

目錄 一、前期準備 二、外網探測 1.使用nmap進行掃描 2.網站信息收集 3.漏洞復現(CVE-2021-23132) 4.disable_function繞過 5.反彈shell(也,并不是) 6.SSH登錄 7.權限提升(臟牛漏洞) 8.信息收集 9.上線msf 三…

解決Win11下MySQL服務無法開機自啟動問題

問題描述 在win11系統中,明明將MySQL服務設置成了自動啟動,但在重啟電腦后MySQL服務還是無法自動啟動,每次都要重新到計算機管理的服務中找到服務再手動啟動。 解決方式 首先確保mysql服務的啟動類型為自動。 設置方法:找到此電…

后端項目進度匯報

項目概述 本項目致力于構建一個先進的智能任務自動化平臺。其核心技術是一套由大型語言模型(LLM)驅動的后端系統。該系統能夠模擬一個多角色協作的團隊,通過一系列精心設計或動態生成的處理階段,來高效完成各種復雜任務&#xff…

深度學習中學習率調整:提升食物圖像分類模型性能的關鍵實踐

深度學習中學習率調整:提升食物圖像分類模型性能的關鍵實踐 接上篇保存最優模型,在深度學習模型訓練過程中,學習率作為核心超參數,其設置直接影響模型的收斂速度與最終性能。本文將結合食物圖像分類項目,深入探討學習…

Vue 3零基礎入門:從環境搭建到第一個組件

Vue 3零基礎入門:從環境搭建到第一個組件 一、Vue 3簡介 Vue.js是一款漸進式JavaScript框架,用于構建用戶界面。Vue 3是Vue的最新主要版本,于2020年9月發布,帶來了許多改進和新特性: 更快的渲染速度更小的包體積Com…

為了結合后端而學習前端的學習日志(1)——純CSS靜態卡片案例

前端設計專欄 使用純CSS創建簡潔名片卡片的學習實踐 在這篇技術博客中,我將分享我的前端學習過程,如何使用純HTML和CSS創建一個簡潔美觀的名片式卡片,就像我博客首頁展示的那樣。這種卡片設計非常適合作為個人簡介、產品展示或團隊成員介紹…

k8s監控方案實踐(一):部署Prometheus與Node Exporter

k8s監控方案實踐(一):部署Prometheus與Node Exporter 文章目錄 k8s監控方案實踐(一):部署Prometheus與Node Exporter一、Prometheus簡介二、PrometheusNode Exporter實戰部署1. 創建Namespace(p…

谷歌最新推出的Gemini 2.5 Flash人工智能模型因其安全性能相較前代產品出現下滑

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

【Python】PDF文件處理(PyPDF2、borb、fitz)

Python提供了多種方法和庫用于處理PDF文件,這些工具可以幫助開發者實現諸如讀取、寫入、合并、拆分以及壓縮等功能。以下是幾個常用的Python PDF操作庫及其基本用法(PyPDF2、borb、fitz)。 1. PyPDF2 PyPDF2 是一個功能強大的庫&#xff0…

websocketd 10秒教程

websocketd 參考地址:joewalnes/websocketd 官網地址:websocketd websocketd簡述 websocketd是一個簡單的websocket服務Server,運行在命令行方式下,可以通過websocketd和已經有程序進行交互。 現在,可以非常容易地構…

Spring Boot 基于 Cookie 實現單點登錄:原理、實踐與優化詳解

前言 在多系統交互的應用場景中,單點登錄(SSO)能夠顯著提升用戶體驗,減少重復登錄的繁瑣操作。基于 Cookie 的單點登錄方案,憑借其簡單直觀、瀏覽器原生支持的特性,成為快速實現單點登錄的有效方式。本文將…

ModBus協議詳解:從基礎概念到C#實現RTU與TCP通訊

ModBus協議是莫迪康公司為了讓PLC之間進行數據通信而設計出來的協議。它是一種總線協議,是一種一對多,上下級的關系。 它的應用廣泛,具有免費開源,操作簡單的有點,并且可以兼容串口和網絡通訊,兼容也不錯。…

PHP數組排序深度解析:sort()、rsort()、asort()、arsort()、ksort()、krsort() 的適用場景與性能對比

在PHP開發中,數組排序是日常操作的核心技能之一。無論是處理用戶數據、產品列表,還是分析日志信息,合理的排序方法能顯著提升代碼的效率和可維護性。PHP提供了多種數組排序函數(如 sort()、rsort()、asort() 等)&#…

RabittMQ-高級特性2-應用問題

文章目錄 前言延遲隊列介紹ttl死信隊列存在問題延遲隊列插件安裝延遲插件使用事務消息分發概念介紹限流非公平分發(負載均衡) 限流負載均衡RabbitMQ應用問題-冪等性保障順序性保障介紹1順序性保障介紹2消息積壓總結 前言 延遲隊列介紹 延遲隊列(Delaye…

HOW - 在 Mac 上的 Chrome 瀏覽器中調試 Windows 場景下的前端頁面

文章目錄 為什么需要模擬 Windows 環境?一、修改 User-Agent 模擬 Windows 瀏覽器方法 1:通過 Chrome 開發者工具修改 UA方法 2:使用瀏覽器插件 二、模擬 Windows 的字體和滾動條樣式1. 模擬 Windows 字體2. 強制顯示滾動條(模擬 …

如何刪除豆包本地大模型

由于無法選擇大模型的安裝位置,因此會占用C盤大量空間,然后又找到不卸載的地方,經排查豆包大模型安裝位為:C:\Users\[當前電腦用戶]\AppData\Local\Doubao\User Data,只能進行手動卸載。