【GD32】 GPIO 超詳細總結 (江科大風格課件版)

GD32 GPIO 超詳細總結 (江科大風格課件版)


第一部分:GPIO 是什么?
  • 名稱:GPIO = General Purpose Input/Output (通用輸入輸出口)
  • 作用MCU與外部世界交互的橋梁。通過程序控制引腳輸出高、低電平,或者讀取引腳的電平狀態。
  • 功能
    • 輸出功能:驅動LED、蜂鳴器、繼電器,模擬通信時序(如I2C, SPI, 單總線)等。
    • 輸入功能:讀取按鍵、傳感器等外部數字信號的狀態。

第二部分:GPIO 的八種工作模式 (核心重點!)

GD32的每個GPIO引腳都可以獨立配置為以下8種模式中的一種。理解每種模式的電路結構應用場景是關鍵。

模式簡稱 (庫函數中常見)電路原理 (形象理解)應用場景
1. 模擬輸入GPIO_MODE_AIN引腳直接連到內部ADC,完全斷開數字電路部分ADC采集,測量電壓值。
2. 浮空輸入GPIO_MODE_IN_FLOATING引腳懸空,電平狀態完全由外部信號決定連接外部驅動源,如串口RX引腳、I2C等。
3. 上拉輸入GPIO_MODE_IPU內部有一個約40kΩ的電阻連接到VDD(高電平)。默認狀態下引腳為高電平按鍵檢測(按鍵另一端接地),按下為低,松開為高。
4. 下拉輸入GPIO_MODE_IPD內部有一個約40kΩ的電阻連接到GND(低電平)。默認狀態下引腳為低電平按鍵檢測(按鍵另一端接VCC),按下為高,松開為低。
5. 推挽輸出GPIO_MODE_OUT_PP最常用輸出模式。像一對推挽工作的開關,可以強輸出高電平(接近VDD)或強輸出低電平(接近0V),驅動能力強。驅動LED、蜂鳴器、舵機等,以及USART_TX、SPI等外設輸出。
6. 開漏輸出GPIO_MODE_OUT_OD只能強輸出低電平高阻態(相當于斷開)。要輸出高電平,必須依賴外部上拉電阻I2C總線(支持“線與”)、5V電平轉換、通信總線。
7. 復用推挽輸出GPIO_MODE_AF_PP模式同推挽輸出,但輸出信號源不是CPU,而是由片內外設(如SPI、TIM)自動控制將引腳作為外設的輸出腳,如SPI_SCK, TIM_PWM。
8. 復用開漏輸出GPIO_MODE_AF_OD模式同開漏輸出,輸出信號源由片內外設自動控制將引腳作為外設的輸出腳,如I2C_SDA。

江科大經典總結

  • 輸入:測電壓。浮空是“你說了算”,上/下拉是“有個默認值”。
  • 輸出:供電流。推挽是“能高能低真漢子”,開漏是“只能拉低,想高得找人(上拉電阻)幫忙”。
  • 復用:CPU不管了,交給外設大哥來控制。

第三部分:GPIO 基本結構 (了解)

在這里插入圖片描述

一個GPIO口內部主要包含:

  1. 保護二極管:防止引腳電壓過高或過低。
  2. 上拉/下拉電阻:約40kΩ,可通過寄存器開關。
  3. 施密特觸發器:將模擬電壓整形為數字信號0或1。
  4. 輸出驅動器:推挽或開漏結構,由P-MOS和N-MOS管組成。

第四部分:GPIO 操作流程 (代碼實踐)

“萬事開頭先開時鐘!”

  1. 開啟GPIO端口時鐘

    rcu_periph_clock_enable(RCU_GPIOA); // 使能GPIOA的時鐘
    // 如果是復用功能或重映射,可能還需要開啟AFIO時鐘
    // rcu_periph_clock_enable(RCU_AF);
    
  2. 初始化GPIO(配置模式與速度)

    • 方法一 (面向系列:F10x, F30x, F20x, E10x等):使用 gpio_init 函數。
      // 配置PA0為上拉輸入
      gpio_init(GPIOA, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_0);// 配置PA1為推挽輸出,速度50MHz
      gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
      
    • 方法二 (面向系列:F1x0, F3x0, F4xx, E23x等):使用 gpio_mode_setgpio_output_options_set
      // 配置PA1為推挽輸出,無上下拉,速度50MHz
      gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_1);
      gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
      
  3. 操作GPIO

    // 輸出操作
    gpio_bit_set(GPIOA, GPIO_PIN_1);    // PA1輸出高電平
    gpio_bit_reset(GPIOA, GPIO_PIN_1);  // PA1輸出低電平
    gpio_bit_write(GPIOA, GPIO_PIN_1, SET); // 等同于set
    gpio_bit_write(GPIOA, GPIO_PIN_1, RESET); // 等同于reset// 輸入操作
    if (gpio_input_bit_get(GPIOA, GPIO_PIN_0) == SET) {// 如果PA0檢測到高電平
    } else {// 如果PA0檢測到低電平
    }
    

第五部分:重要注意事項 (避坑指南)
  1. 先開時鐘,再操作:不開啟外設時鐘,所有操作無效!
  2. 電平兼容性
    • 非FT(5V耐受)引腳,輸入電壓絕對不能超過VDD + 0.3V
    • 即使FT引腳,也主要在輸入模式下耐受5V。
  3. JTAG/SWD調試引腳PA13, PA14, PA15, PB3, PB4 默認用于調試,想當普通GPIO用,必須先禁用JTAG(通常保留SWD即可)。
    gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE); // 常用:關閉JTAG,使能SWD
    
  4. 未使用的引腳:最好設置為模擬輸入模式,懸空容易引入干擾。
  5. 輸出速度:高速(50MHz)適合通信,低速(2MHz)適合驅動簡單外設,更省電抗干擾。

第六部分:總結與實戰選擇
  • LED、蜂鳴器推挽輸出
  • 按鍵上拉輸入(按鍵接地)或下拉輸入(按鍵接VCC)。
  • 串口RX浮空輸入
  • 串口TX推挽輸出
  • I2C復用開漏輸出必須外加上拉電阻,如4.7K)。
  • ADC采集模擬輸入
  • PWM輸出復用推挽輸出

記住江科大口訣:

輸出用推挽,輸入看默認;
開漏要上拉,復用給大哥;
模擬給ADC,調試引腳要配置!

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

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

相關文章

《嵌入式硬件(八):基于IMX6ULL的點燈操作》

一、IMX6ULL啟動代碼.global _start_start:ldr pc, _reset_handlerldr pc, _undefine_handlerldr pc, _svc_handlerldr pc, _prefetch_abort_handlerldr pc, _data_abort_handlerldr pc, _reserved_handlerldr pc, _irq_handlerldr pc, _fiq_handler_undefine_handler:ldr pc, …

Spring Boot 調度任務在分布式環境下的坑:任務重復執行與一致性保證

前言在實際業務開發中,調度任務(Scheduled Task) 扮演著重要角色,例如:定時同步第三方數據;定時清理過期緩存或日志;定時發送消息或報告。Spring Boot 提供了非常方便的 Scheduled 注解&#xf…

剖析ReAct:當大模型學會“邊想邊做”,智能體的進化之路

你是否曾驚嘆于大語言模型(LLM)強大的推理能力,卻又對其“紙上談兵”、無法真正與世界交互而感到遺憾?你是否好奇,如何讓AI不僅能“說”,更能“做”,并且在做的過程中不斷思考和調整&#xff1f…

小型無人機傳感器仿真模型MATLAB實現方案

一、系統架構設計 無人機傳感器仿真模型需集成多物理場建模與數據融合模塊,典型架構包含: 動力學模型:六自由度剛體運動方程傳感器模型:IMU/GNSS/視覺/氣壓計數學建模數據融合層:卡爾曼濾波/EKF算法實現環境交互模塊&a…

hadoop集群

ssh-keygen -t rsassh-copyid 用戶名遠程服務器地址start-dfs.sh chown [選項] 新所有者[:新所屬組] 目標文件/目錄常用選項:-R:遞歸修改目錄下所有文件和子目錄的所有者(處理目錄時常用)-v:顯示修改過程的詳細信息-c&…

大模型入門實踐指南

大模型入門教程:從概念到實踐 大模型(Large Language Model, LLM)是當前人工智能領域的核心技術,其本質是通過大規模數據訓練、具備復雜語言理解與生成能力的深度學習模型。本教程將從基礎概念出發,帶你理解大模型的核心邏輯,并通過可直接跑通的代碼示例,快速上手大模型…

貓頭虎開源AI分享:一款CSV to Chat AI工具,上傳CSV文件提問,它可以即時返回統計結果和可視化圖表

貓頭虎開源AI分享:一款CSV to Chat AI工具,上傳CSV文件提問,它可以即時返回統計結果和可視化圖表 摘要 本文將詳細介紹一款開源工具——CSV to Chat AI,它允許用戶上傳CSV文件并通過自然語言提問,系統會即時返回統計…

洛谷P9468 [EGOI 2023] Candy / 糖果題解

[EGOI 2023] Candy / 糖果 思路 NNN 這么小基本就是瞎打的 DP 了。 設 dpi,jdp_{i,j}dpi,j? 為操作 jjj 次后前 iii 項的和最大是多少。 考慮轉移,我們可以枚舉 iii 并考慮將其移動到 ppp 位置,總共操作 kkk 次,那么就有 dpp,kmin?(dpp,…

AI智能體(Agent)大模型入門【3】--基于Chailit客服端實現頁面AI對話

目錄 前言 安裝chailint 創建中文語言環境 創建chailint頁面客戶端 前言 本篇章將會基chailit框架實現頁面進行AI對話。 若沒有自己的本地模型對話,需要查看專欄內的文章,或者點擊鏈接進行學習部署 AI智能體(Agent)大模型入…

【高并發內存池——項目】定長內存池——開胃小菜

提示:高并發內存池完整項目代碼,在主頁專欄項目中 文章目錄 提示:高并發內存池完整項目代碼,在主頁專欄項目中 先設計一個定長的內存池 一、為什么需要定長內存池? 🏢 傳統內存分配的痛點 🏭 內…

6-獲取磁盤分區信息

觀察文件 獲取server端電腦里面存在哪些盤符 int MakeDriveInfo() { //1>A 2>B &#xff08;原本屬于軟盤的 &#xff09;3>C ... 26>Zstd::string result;for (int i 1; i < 26; i) { //讓其循環if (_chdrive(i) 0) //改變當前的驅動,_chdrive函數(c和c中)應…

每天認識一個電子器件之LED燈

LED選型核心參數一覽表參數類別關鍵參數說明 & 為什么重要基本電氣參數正向電壓 (Vf)LED正常發光時兩端的電壓降。必須匹配您的電路電壓。紅/黃光約1.8-2.2V&#xff0c;藍/綠/白光約2.8-3.6V。正向電流 (If)LED正常發光時所需的電流。決定了LED的亮度&#xff0c;必須用電…

Spring Boot 集成 Flowable 7.1.0 完整教程

一、引言 在企業級應用開發中&#xff0c;工作流管理是不可或缺的一部分。從簡單的請假審批到復雜的業務流程&#xff0c;工作流引擎能夠顯著提升系統的靈活性和可維護性。??Flowable?? 作為一個輕量級、基于 Java 的開源工作流引擎&#xff0c;完美支持 ??BPMN 2.0??…

uniapp離線打包安卓apk詳細教程,從HbuilderX新建項目到Android Studio詳細配置(一)

目錄 一、基礎離線打包&#xff0c;無引入模塊&#xff0c;無原生插件 1. HbuilderX新建項目&#xff0c;開發者后臺申請證書和離線key 2.HbuilderX生成本地包 二、Android Studio配置 1.下載離線SDK&#xff0c;解壓&#xff0c;SDK版本需要和HbuilderX 版本一致&#xf…

藍牙鼠標頻繁卡頓?一招解決 Win10/11 的 USB 省電機制干擾問題

藍牙鼠標頻繁卡頓&#xff1f;一招解決 Win10/11 的 USB 省電機制干擾問題 問題背景 在使用藍牙鼠標時&#xff0c;很多用戶會遇到以下問題&#xff1a; 鼠標移動卡頓、延遲明顯偶爾斷連&#xff0c;需重新配對尤其在筆記本合蓋或待機后恢復時更明顯 這些問題在 Windows 10/11 …

領碼方案|Spring Boot 異步請求深度剖析:從原理到 AI 驅動的吞吐量優化

摘要 本文以“領碼方案”為核心&#xff0c;深入剖析 Spring Boot 異步請求的底層原理、線程模型、三種常用實現方式&#xff08;Callable、WebAsyncTask、DeferredResult&#xff09;的運行機制與性能特征&#xff0c;并結合 AI 驅動的自適應線程池調優、云原生架構下的彈性伸…

C++基礎(13)——list類的模擬實現

目錄 一、接口函數和類總覽 二、節點結構體的實現 構造函數 三、迭代器結構體的實現 迭代器模版參數 構造函數 重載運算符 重載--運算符 重載運算符 重載*運算符 重載->運算符 四、list的模擬實現 默認成員函數 構造函數 拷貝構造函數 賦值運算符重載函數 …

從 APP 界面設計到用戶體驗優化:如何讓你的應用脫穎而出?

作為一個經驗豐富的設計師&#xff0c;在產品優化方面我踩過不少坑&#xff0c;也見過很多團隊在界面設計和用戶體驗上的誤區。APP 的外觀決定了用戶的第一印象&#xff0c;但能不能留住用戶、讓他們愿意持續使用&#xff0c;最終還是看體驗。今天就結合自己的經驗&#xff0c;…

Kafka如何配置生產者攔截器和消費者攔截器

Kafka 的生產者攔截器和消費者攔截器允許你在消息發送前后以及消息消費前后嵌入自定義邏輯&#xff0c;用于實現監控、審計、消息修改等功能。本文我們就用一個最常見的傳遞TraceId的案例來說明下這兩類攔截器如何來使用。 生產者發送攔截器 生產者攔截器需要實現 org.apache.k…

vue表單彈窗最大化無法渲染復雜組件內容

背景&#xff1a;最大化后選然后復雜組件內容丟失&#xff0c;如下拉框、圖片上傳組件修復方案&#xff1a;使用深拷貝核心代碼this.maximizeDialog {visible: true,title: 患者申請 - 最大化查看,formModel: JSON.parse(JSON.stringify(this.formModel || [])),formLogic: JS…