GPIO模式詳解

?一、GPIO的八種模式

GPIO支持4種輸入模式(浮空輸入、上拉輸入、下拉輸入、模擬輸入)和4種輸出模式(開漏輸出、開漏復用輸出、推挽輸出、推挽復用輸出)。

GPIO_Mode_AIN模擬輸入
GPIO_Mode_IN_FLOATING浮空輸入
GPIO_Mode_IPD下拉輸入
GPIO_Mode_IPU上拉輸入
GPIO_Mode_Out_OD開漏輸出
GPIO_Mode_Out_PP推挽輸出
GPIO_Mode_AF_OD復用開漏輸出
GPIO_Mode_AF_PP復用推挽輸出

開漏輸出:mos管導通,輸出強低電平;mos管截止,此時mos管電阻無窮大,如果無外部上拉電路,輸出為高阻態,如果有外部上拉電路,輸出為弱高電平(驅動能力較弱)

推挽輸出:NMOS管導通,PMOS管截止,輸出強低電平;NMOS管截止,PMOS管導通,輸出強高電平

二、端口復用功能

????????由數據手冊可以得知,每一個IO口都有很多功能,比如PA4可以做SPI1的片選,也可以做SPI3的片選,這些都是IO端口的復用功能

使用硬件SPI時,此時的引腳需要使用復用功能,即配置為復用推挽輸出

void SPI1_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};__HAL_RCC_SPI1_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

使用硬件iic時,引腳配置為復用開漏輸出

void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};if(i2cHandle->Instance==I2C2){__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF4_I2C2;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);__HAL_RCC_I2C2_CLK_ENABLE();}
}

?使用軟件iic時,此時的SCL和SDA引腳完全由我們控制,所以不使能復用功能,直接配置為開漏輸出,然后SDA引腳讀數據時配置為上拉輸入模式,寫數據時配置為開漏輸出即可

void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};if(i2cHandle->Instance==I2C2){__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF4_I2C2;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);__HAL_RCC_I2C2_CLK_ENABLE();}
}

注意:SPI作為主機,MISO配置為浮空輸入或者復用推挽輸出都可以,原因在于,MISO引腳的功能就是讀取電平信號,所以配置為輸入模式沒有問題,當配置為復用推挽輸出時,我們會把MISO端口的使用權交給SPI,他會自己控制MISO的端口模式為輸入模式

三、GPIO速度

#define ?GPIO_SPEED_FREQ_LOW ? ? ? ? 0x00000000U ?/*!< IO works at 2 MHz, please refer to the product datasheet */
#define ?GPIO_SPEED_FREQ_MEDIUM ? ? ?0x00000001U ?/*!< range 12,5 MHz to 50 MHz, please refer to the product datasheet */
#define ?GPIO_SPEED_FREQ_HIGH ? ? ? ?0x00000002U ?/*!< range 25 MHz to 100 MHz, please refer to the product datasheet ?*/
#define ?GPIO_SPEED_FREQ_VERY_HIGH ? 0x00000003U ?/*!< range 50 MHz to 200 MHz, please refer to the product datasheet ?*/

配置高速:輸出頻率高,噪音大,功耗高,電磁干擾強;?

配置低速:輸出頻率低,噪音小,功耗低,電磁干擾弱;提高系統EMI(電磁干擾)性能;

我們知道GPIO速度有四種模式,低速,中速,高速和超高速,其中不同的速度對應不同的時鐘頻率。

  • 低速:USART(115.2kbps)、按鍵掃描。
  • 中速:I2C(400kbps)。
  • 高速:SPI(18Mbps)、PWM高頻信號。
  • 超高速:QSPI FLASH,FMC,以太網等高速。

注意事項:

1、如果你使用9600波特率UART通信,建議速度配置為低。所以,如果你想使產品更加完美,速度配置也是關鍵的一項。

2、比如SPI時鐘配置時,如果配置為30Mhz,那么GPIO引腳的速度最起碼配置為高速模式,不然信號可能會失真。

3、GPIO設為輸入模式時,輸出驅動電路斷開,速度配置無意義。此時應關注上拉/下拉電阻配置。

4、使用Cubemx生成代碼時,SPI選用軟件片選信號,此時注意GPIO口速度默認為低速模式,但是SPI一般配置高速模式,此時防止數據亂碼需要修改GPIO口速度

四、如何選擇I/O模式

  1. 浮空輸入_IN_FLOATING ——浮空輸入,可以做KEY識別,RX1
  2. 帶上拉輸入_IPU——IO內部上拉電阻輸入
  3. 帶下拉輸入_IPD—— IO內部下拉電阻輸入
  4. 模擬輸入_AIN ——應用ADC模擬輸入,或者低功耗下省電
  5. 開漏輸出_OUT_OD ——IO輸出0接GND,IO輸出1,懸空,需要外接上拉電阻,才能實現輸出高電平。當輸出為1時,IO口的狀態由上拉電阻拉高電平,但由于是開漏輸出模式,這樣IO口也就可以由外部電路改變為低電平或不變。可以讀IO輸入電平變化,實現C51的IO雙向功能
  6. 推挽輸出_OUT_PP ——IO輸出0-接GND, IO輸出1 -接VCC,讀輸入值是未知的
  7. 復用功能的開漏輸出_AF_OD ——片內外設功能(I2C的SCL、SDA)
  8. 復用功能的推挽輸出_AF_PP——片內外設功能(USART的TX和RX、SPI的MOSI、MISO.SCK)

五、JTAG引腳作為GPIO使用要注意

例如PA15引腳,它默認時JTDI引腳,但是可以復用為SPI的NSS片選信號。在初始化時,需要先開啟AFIO時鐘,再關閉JTAG功能,否則GPIO功能仍然不起作用。初始化代碼如下:

stm32f103

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);      /*使能SWD 禁用JTAG*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);/* CS: PA15 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);

兆易創新gd32F103?

void micromotor_alarm_gpio_config(void)
{//1.GPIO引腳時鐘使能rcu_periph_clock_enable(RCU_GPIOA);		//2.復用功能時鐘使能																															rcu_periph_clock_enable(RCU_AF);																		 	//3.GPIO配置為推完輸出模式gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_15);				//4.重映射配置:JTAG-DP禁用和SW-DP使能	gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP,ENABLE);						//5.引腳配置為低電平gpio_bit_reset(GPIOA,GPIO_PIN_15);																				
}

常見的調試接口:

SW調試接口: PA13、PA14共兩個引腳

JTAG調試接口: PA13、PA14、PA15、PB3、PB4共五個引腳

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

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

相關文章

django rest_framework 自定義403 Forbidden錯誤頁面

django本來有是可以很方便自定義HTTP錯誤頁面的&#xff0c;網上資料一大把。核心是在項目的urls代碼中增加handler403的定義&#xff0c;比如&#xff1a; handler403 "app.views.your_custom_view" 404&#xff0c;500都是一樣的&#xff0c;重新定義handler404…

Kafka Streams架構深度解析:從并行處理到容錯機制的全鏈路實踐

在流處理技術領域&#xff0c;Kafka Streams以其輕量級架構與Kafka生態的深度整合能力脫穎而出。作為構建在Kafka生產者/消費者庫之上的流處理框架&#xff0c;它通過利用Kafka原生的分區、副本與協調機制&#xff0c;實現了數據并行處理、分布式協調與容錯能力的無縫集成。本文…

【嵌入式硬件實例】-555定時器控制舵機/伺服電機

555定時器控制舵機/伺服電機 文章目錄 555定時器控制舵機/伺服電機1、555定時器介紹2、舵機/伺服電機介紹3、硬件準備與接線使用 555 定時器 IC 的伺服電機控制器和測試儀電路是一個簡單的電路,可用于生成操作伺服電機所需的控制信號。該電路允許我們通過按下按鈕手動驅動/控制…

國產麒麟 安裝可視化數據庫軟件DBeaver(圖解)

目錄 ????????編輯DBeaver介紹 官網 通過強制使用 Ubuntu 模板來修復 add-apt-repository 重新添加 PPA 撤銷更改&#xff08;可選&#xff09; 官網直接下載 DBeaver CE 下載好后安裝軟件 啟動方式一 啟動方式二 啟動成功 在左側右擊新建連接 安裝驅動 測…

線程池 JMM 內存模型

線程池 & JMM 內存模型 文章目錄 線程池 & JMM 內存模型線程池線程池的創建ThreadPoolExecutor 七大參數飽和策略ExecutorService 提交線程任務對象執行的方法&#xff1a;ExecutorService 關閉線程池的方法&#xff1a;線程池最大線程數如何確定&#xff1f; volatile…

[論文閱讀] 軟件工程 + 教學 | 軟件工程項目管理課程改革:從傳統教學到以學生為中心的混合式學習實踐

軟件工程項目管理課程改革&#xff1a;從傳統教學到以學生為中心的混合式學習實踐 論文信息 arXiv:2506.14369 Agile and Student-Centred Teaching of Agile/Scrum Concepts Maria Spichkova Comments: Preprint. Accepted to the 29th International Conference on Knowledg…

Windows系統提示“mfc140u.dll丟失”?詳細修復指南,一鍵恢復程序運行!

當你興致勃勃地打開某個游戲或專業軟件時&#xff0c;突然彈出一條錯誤提示——“MFC140u.dll丟失”&#xff0c;程序直接閃退&#xff0c;讓人無比沮喪。別擔心&#xff01;這個問題并不復雜&#xff0c;通常只需重新安裝運行庫或修復系統文件即可解決。本文將為你提供詳細的修…

云XR(AR/VR)算力底座關鍵特征與技術路徑

云XR&#xff08;AR/VR&#xff09;算力底座是支撐擴展現實技術規模化落地的核心基礎設施&#xff0c;當前發展呈現以下關鍵特征與技術路徑&#xff1a; 一、算力架構&#xff1a;云邊端協同異構融合 分布式部署模式? 云端?&#xff1a;承擔高復雜度渲染與大數據處理&#x…

Android開發常用adb合集

Android開發常用adb合集 Android開發常用adb合集crash日志導出 Android開發常用adb合集 crash日志導出 bugreport: adb bugreportdropbox: adb shell dumpsys dropbox --print > desktop/full_dropbox_logs.txt

LTspice仿真4——exp指數函數波形

參數設置 Vinitial&#xff1a;初始電壓值 Vpulsed&#xff1a;脈沖達到值 Rise Delay&#xff1a;上升延遲時間 Rise Tau&#xff1a;上升指數系數tau Fall Delay&#xff1a;下降延遲時間 Fall Tau&#xff1a;下降指數系數tau tau決定指數波形下降或者上升快慢&#x…

[Java 基礎]集合框架

在 Java 中&#xff0c;我們經常需要存儲和操作一組數據&#xff0c;而集合框架就是為此而生。它提供了一套統一的接口和類&#xff0c;幫助我們高效地管理各種數據集合。 常用的集合框架中的類只有 ArrayList、LinkedList、HashSet、HashMap 這 4 個&#xff0c;這些類的繼承…

SQL關鍵字三分鐘入門:WITH —— 公用表表達式讓復雜查詢更清晰

在實際的數據庫開發和分析中&#xff0c;我們常常會遇到復雜的多層嵌套查詢&#xff0c;這樣的 SQL 語句不僅難以閱讀&#xff0c;也容易出錯。 這時候就需要使用一個非常實用又優雅的關鍵字 —— WITH&#xff01; 它可以幫助我們將復雜的子查詢提取出來并命名&#xff0c;從…

要在 Linux 不聯網服務器 上部署并運行 Gitee 上的 vue-vben-admin 項目,并且該項目使用的是 pnpm 管理依賴

目錄 ? 目標&#xff1a;在不聯網服務器中成功運行 vue-vben-admin &#x1f449; 你需要的最終環境&#xff1a; ? 場景&#xff1a;完全離線部署并運行開發/構建環境 &#x1f9f1; 步驟總覽&#xff1a; &#x1f6e0; 詳細操作流程 ? 第 1 步&#xff1a;聯網機器準…

中國風國潮通用PPT模版

中國風答辯總結匯報類通用PPT模版&#xff0c;古風PPT通用模版&#xff0c;國學精品PPT模版&#xff0c;中國風韻PPT模版 中國風國潮通用PPT模版&#xff1a;https://pan.quark.cn/s/59cea717fe8d

【nvidia-H100-ib排障實戰2】:服務器 InfiniBand 網絡性能問題深度分析

目錄 InfiniBand 網絡性能日志: 實際生產服務器 InfiniBand 網絡性能問題深度分析 一、核心問題定位:mlx5_1 設備性能異常 二、問題詳細分析 1. mlx5_1 設備異常原因推測 (1)硬件連接故障 (2)驅動或固件問題 (3)資源爭用或配置錯誤 2. CPU 頻率不一致問題 三…

Postgresql中不同數據類型的長度限制

目錄 一、字符類型&#xff08;Character Types&#xff09; 二、二進制類型&#xff08;Binary Types&#xff09; 三、數值類型&#xff08;Numeric Types&#xff09; 四、其他類型 五、全局限制&#xff1a;單行數據總大小 示例對比表 注意事項 驗證命令 在 Postgr…

Unity Hub 新建項目,啟動 Unity 閃退的解決辦法

問題&#xff1a; Win11: Unity 閃退&#xff0c;提示 Could not connect project 原因 這是 Firewall & network protection 在作怪&#xff0c;真的我感覺 Windows Defender 就從來沒干過好事&#xff0c;那個遍地是病毒的年代微軟你不搞個殺毒軟件&#xff0c;現在…

學習打卡---回溯

回溯&#xff0c;所有回溯都可以轉換成樹形結構進行解決 我們將樹形結構分為縱向和橫向兩個方面 遞歸是縱向循環&#xff0c;也就是縱向方面&#xff0c;到了葉子節點就收網回溯 循環是橫向循環&#xff0c;也就是橫向方面&#xff0c;到了數組末尾就結束 回溯屬于是將二叉樹的…

阿里云獲取DASHSCOPE_API_KEY教程,以及配置DASHSCOPE_API_KEY環境變量

要獲取阿里云的 DASHSCOPE_API_KEY&#xff08;通義千問API密鑰&#xff09;&#xff0c;需要在阿里云平臺上完成開通服務和創建密鑰的流程。以下是具體步驟&#xff1a; 1. 開通通義千問API服務 登錄阿里云賬號 訪問 阿里云官網&#xff0c;使用賬號密碼或RAM用戶登錄。 進入…

《去哪兒網Redis高并發實戰:從問題定位到架構升級》

去哪兒網Redis高并發實戰&#xff1a;從問題定位到架構升級 在互聯網行業競爭日益激烈的當下&#xff0c;高并發場景下的系統性能優化一直是技術團隊面臨的重要挑戰。對于去哪兒網這類在線旅游平臺來說&#xff0c;節假日期間的流量高峰更是對系統架構的嚴峻考驗。本文將深入剖…