GPIO端口配置 | ||
---|---|---|
32bit配置寄存器 | GPIOx_CRL | GPIOx_CRH |
32bit數據寄存器 | GPIOx_IDR | GPIOx_ODR |
32bit置位/復位寄存器 | GPIOx_BSRR | |
16bit復位寄存器 | GPIOx_BRR | |
32bit鎖定寄存器 | GPIOx_LCKR |
GPIO可以被配置成多種模式
輸入方式 | 代碼宏定義 |
---|---|
浮空輸入 | GPIO_Mode_IN_FLOATING |
上拉輸入 | GPIO_Mode_IPU |
下拉輸入 | GPIO_Mode_IPD |
模擬輸入 | GPIO_Mode_AIN |
開漏輸出 | GPIO_Mode_Out_OD |
推挽輸出 | GPIO_Mode_Out_PP |
復用推挽輸出 | GPIO_Mode_AF_PP |
復用開漏功能 | GPIO_Mode_AF_OD |
GPIO整理后可分為三類:
1. 輸入模式(模擬/浮空/上拉/下拉):在輸入模式時,施密特觸發器打開,輸出被禁止,可通過輸入數據寄存器 GPIOx_IDR讀取 I/O 狀態。其中輸入模式,可設置為上拉、下拉、浮空和模擬輸入四種。上拉和下拉輸入很好理解,默認的電平由上拉或者下拉決定。浮空輸入的電平是不確定的,完全由外部的輸入決定,一般接按鍵的時候用的是浮空輸入。模擬輸入則用于 ADC 采集。
2. 輸出模式(推挽/開漏):在輸出模式中,推挽模式時雙 MOS 管以輪流方式工作,輸出數據寄存器GPIOx_ODR可控制 I/O 輸出高低電平。開漏模式時,只有 N-MOS 管工作,輸出數據寄存器可控制I/O輸出高阻態或低電平。輸出速度可配置,有 2MHz10MHz50MHz 的選項。此處的輸出速度即 I/O 支持的高低電平狀態最高切換頻率,支持的頻率越高,功耗越大,如果功耗要求不嚴格,把速度設置成最大即可。
在輸出模式時施密特觸發器是打開的,即輸入可用,通過輸入數據寄存器 GPIOx_IDR可讀取 I/O 的實際狀態。
3.復用功能(推挽/開漏):復用功能模式中,輸出使能,輸出速度可配置,可工作在開漏及推挽模式,但是輸出信號源于其它外設,輸出數據寄存器 GPIOx_ODR 無效;輸入可用,通過輸入數據寄存器可獲取 I/O 實際狀態,但一般直接用外設的寄存器來獲取該數據信號。
GPIO結構框圖
1. 保護二極管的工作方式:當引腳電壓高于VDD時,上方的二極管導通,當引腳電壓低于VSS 時,下方的二極管導通,防止不正常電壓引入芯片導致芯片燒毀。所以引腳的兩個保護二極管可以防止引腳外部過高或過低的電壓輸入。
2. P-MOS管和 N-MOS管:(1)輸出。當輸入的是高電平時,經過反向后,上方的 P-MOS 導通,下方的 N-MOS 關閉,對外輸出高電平;而當該結構中輸入低電平時,經過反向后,N-MOS 管導通,P-MOS 關閉,對外輸出低電平。當引腳高低電平切換時,兩個管子輪流導通,P 管負責灌電流,N 管負責拉電流,使其負載能力和開關速度都比普通的方式有很大的提高。這種工作方式就是所謂的推挽輸出模式
(2)當工作在開漏輸出模式時,上方的P-MOS 管完全不工作。當IO口輸入低電平(0)時,經過反向,N-MOS 管導通,使輸出接地;若當IO口輸入1(無法直接輸出為高電平)時,則 P-MOS 管和 N-MOS 管都關閉,所以引腳既不輸出高電平,也不輸出低電平,為高阻態。為正常使用時必須外部接上拉電阻。
推挽輸出模式一般應用在輸出電平為 0 和 3.3 伏而且需要高速切換開關狀態的場合。在 STM32 的應用中,除了必須用開漏模式的場合,我們都習慣使用推挽輸出模式。
開漏輸出模式一般應用在 I2C、SMBUS 通訊等需要“線與”功能的總線電路中。除此之外,還用在電平不匹配的場合,如需要輸出 5 伏的高電平,就可以在外部接一個上拉電阻,上拉電源為 5 伏,并且把 GPIO 設置為開漏模式,當輸出高阻態時,由上拉電阻和電源向外輸出 5 伏的電平。
3. 輸出數據寄存器:前面提到的雙 MOS 管結構電路的輸入信號,是由GPIO“輸出數據寄存器GPIOx_ODR”提供的,因此我們通過修改輸出數據寄存器的值就可以修改GPIO引腳的輸出電平。而“置位/復位寄存器GPIOx_BSRR”可以通過修改輸出數據寄存器的值從而影響電路的輸出。
4.復用功能輸出:“復用”是指 STM32 的其它片上外設對 GPIO 引腳進行控制,此時 GPIO 引腳用作該外設功能的一部分,算是第二用途。從其它外設引出來的“復用功能輸出信號”與 GPIO 本身的數據據寄存器都連接到雙 MOS 管結構的輸入中,通過圖中的梯形結構作為開關切換選擇。
例如我們使用 USART 串口通訊時,需要用到某個 GPIO引腳作為通訊發送引腳,這個時候就可以把該 GPIO 引腳配置成 USART 串口復用功能,由串口外設控制該引腳,發送數據。
1 // GPIOB 16 個 IO 全部輸出 0XFF
2 GPIOB->ODR = 0XFF;
5. 輸入數據寄存器:看GPIO結構框圖的上半部分,GPIO引腳經過內部的上、下拉電阻,可以配置成上/下拉輸入,然后再連接到施密特觸發器,信號經過觸發器后,模擬信號轉化為0、1的數字信號,然后存儲在“輸入數據寄存器GPIOx_IDR”中,通過讀取該寄存器就可以了解GPIO引腳的電平狀態。
1 // 讀取 GPIOB 端口的 16 位數據值
2 uint16_t temp;
3 temp = GPIOB->IDR;
6. 復用功能輸入:與“復用功能輸出”模式類似,在“復用功能輸入模式”時,GPIO 引腳的信號傳輸到STM32其它片上外設,由該外設讀取引腳狀態。同樣,如我們使用 USART 串口通訊時,需要用到某個GPIO引腳作為通訊接收引腳,這個時候就可以把該 GPIO 引腳配置成 USART串口復用功能,使 USART 可以通過該通訊引腳的接收遠端數據。
7.模擬輸入輸出:當 GPIO 引腳用于 ADC 采集電壓的輸入通道時,用作“模擬輸入”功能,此時信號是不經過施密特觸發器的,因為經過施密特觸發器后信號只有 0、1 兩種狀態,所以 ADC 外設要采集到原始的模擬信號,信號源輸入必須在施密特觸發器之前。類似地,當 GPIO 引腳用于 DAC 作為模擬電壓輸出通道時,此時作為“模擬輸出”功能,DAC 的模擬信號輸出就不經過雙 MOS 管結構,模擬信號直接輸出到引腳。
**寄存器版本**
#include "stm32f10x.h"
int main(void)
{
//開啟GPIOB端口時鐘
RCC_APB2ENR |= (1<<3);
//清空控制PB0的端口位
GPIOB_CRL &= ~( 0x0F<< (4*0));
//配置PB0為通用推挽輸出,速度為10M
GPIOB_CRL |= (1<<4*0);
//PB0輸出低電平
GPIOB_ODR &= ~(1<<0);
while(1);
}
//函數為空,目的是為了騙過編譯器不報錯
void SystemInit(void)
{
}
(1)startup_stm32f10x_hd.s中的SystemInit 需要由我們自己實現,即我們要編寫一個具有該名稱的函數,用來初始化STM32 芯片的時鐘,一般包括初始化 AHB、APB 等各總線的時鐘,需要經過一系列的配置 STM32才能達到穩定運行的狀態。其實這個函數在固件庫里面有提供,官方已經為我們寫好。但這個函數講的是寄存器所以需要自己定義一個void SystemInit(void),目的就是消除這個error。當然也可以直接注釋掉啟動文件中調用SystemInit的代碼
(2)因為燈是通過PB0控制的,因為需要配置成CPIOB_CRL是4個寄存器位控制一個引腳,所以[3:0]為0001,采用&=、|=等方法是為了不影響其他位的操作。
(3)直接操縱端口輸出寄存器GPIOB_ODR的最低位輸出0。
(4)開啟外設時鐘:所有的 GPIO都掛載到 APB2 總線上,具體的時鐘由 APB2外設時鐘使能寄存器(RCC_APB2ENR)來控制。
上一篇:STM32總結之GPIO編程過程
下一篇:關于STM32中的GPIO位設置的相關紀要與總結
推薦閱讀
史海拾趣
面對數字化浪潮的沖擊,ECLIPTEK公司積極擁抱數字化轉型和智能制造。公司引入大數據、云計算和人工智能等先進技術,推動生產過程的智能化和自動化。通過數字化轉型和智能制造,ECLIPTEK不僅提高了生產效率和質量,還降低了生產成本和能源消耗。這一轉型為公司未來的發展奠定了堅實的基礎。
在電子行業的早期,Emerson Embedded Power就開始注重技術創新。該公司不斷投入研發資源,開發高效、可靠的電源解決方案,以滿足不斷增長的市場需求。其創新的電源管理技術不僅提高了設備的性能,還降低了能源消耗,贏得了客戶的廣泛認可。
近年來,全球經濟形勢復雜多變,Beckhoff也面臨著諸多挑戰。然而,公司始終堅持創新驅動的發展戰略,不斷研發新產品、新技術,以應對市場的不斷變化。同時,公司也積極調整業務結構,優化供應鏈管理,降低運營成本,以應對經濟下行的壓力。在這樣的背景下,Beckhoff依然保持著穩健的發展態勢,為電子行業的持續進步做出了重要貢獻。
這五個故事從不同角度展示了Beckhoff Automation GmbH公司在電子行業中的發展歷程和成就。從創始與早期發展,到基于PC控制技術的創新,再到全球業務拓展和中國市場的發展,以及應對經濟挑戰與持續創新,Beckhoff始終保持著對技術創新的追求和對市場變化的敏銳洞察。這些故事不僅展現了公司的實力和成就,也體現了其在電子行業中的重要地位和影響。
面對日益激烈的市場競爭和不斷變化的市場需求,Fairchild Imaging制定了面向未來的戰略布局。公司將繼續加大在成像技術領域的研發投入,推動技術創新和產品升級。同時,Fairchild Imaging還將積極拓展國際市場,加強與全球客戶的合作與交流。此外,公司還將注重人才培養和團隊建設,為公司的長期發展提供有力保障。
CEI的發展歷程中,技術創新一直是其核心競爭力。公司不斷投入研發資源,探索新的電子技術和應用領域。在某一時期,CEI成功研發出了一款具有革命性的電子產品,該產品在性能、穩定性和成本方面均達到了行業領先水平。這一產品的推出,不僅為CEI帶來了可觀的經濟效益,更重要的是,它為公司樹立了技術創新和產品質量的標桿,進一步鞏固了CEI在電子行業中的地位。
隨著業務的不斷擴展,GradConn意識到全球化布局的重要性。公司不僅在臺灣設立總部,還在英國和美國建立了生產設施,并通過遍布160個國家的銷售和分銷網絡,為客戶提供全方位的支持。這種全球化布局不僅提升了GradConn的市場競爭力,還使其能夠更好地服務全球客戶,確保產品能夠及時、準確地送達世界各地。
北大雙碩士因試用期過后未被錄用跳樓 深圳一名剛從北大畢業的雙碩士基金研究員,因試用期末位淘汰被解聘,而跳樓自殺。日前,涉事的大成基金回應媒體稱:該公司在職員工均正常 ...… 查看全部問答∨ |
|
本帖最后由 paulhyde 于 2014-9-15 09:14 編輯 偶然看到這帖子,不知道說什么好,大家直接看吧..... 1.許多人死在第一天上午,卻毫無知覺. 第一天上午是一個選題的日子.一般每個組都有一個能力比較強的擔任組長.往往由于缺乏經驗,在方案選定 ...… 查看全部問答∨ |
|
AMD公司的高級主管說,AMD公司面世的四核處理器Barcelona在設計時就聽取了客戶的聲音。 “長期以來,AMD公司都是圍繞著客戶進行創新。AMD公司的產品設計是為了解決了客戶在日常操作中遇到的各種問題,”AMD公司的南亞技術總監Tan See Ghee在上周的 ...… 查看全部問答∨ |
請將“#define K1_ON PORTB &= ~(1<<PB0)”分解解釋一下! 請將“#define K1_ON PORTB &= ~(1<<PB0)”分解解釋一下! 謝謝!!… 查看全部問答∨ |
團購一塊MSP-EXP430FR5739開發板做RF(射頻)開發,大部分RF芯片都1.8~3.6V,而手上只有一個Launchpad,不好進行測試。所以需要再一塊MSP-EXP430FR5739開發板, … 查看全部問答∨ |
射頻工程師 薪酬18W-25W左右 崗位職責: 1、負責射頻相關設計方案的可行性分析和實施; 2、負責射頻電路原理圖、PCB板設計,撰寫射頻調試方案、射頻概要設計以及射頻詳細設計方案,射頻電路調試,配合整機調試以及解決整機調試中遇到的射頻相關 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 顛覆iToF技術,安森美如何突破30米深度感知極限?
- 利用驗證框架 JAIST揭示開源自動駕駛系統的安全漏洞
- 現代汽車集團擬采用VR模擬器替代道路測試 提升未來車型的競爭力
- 研究人員開發光驅動致動器 可用于驅動水下機器人
- 吉利將發射“千里浩瀚”衛星,實現輔助駕駛系統與衛星功能深度融合
- 以鴻道工業操作系統為核心 打造工業智能機器人新生態
- UNIST研發出新表面處理技術 延長下一代鋰金屬電池的壽命
- 車載SerDes芯片行業的"DeepSeek"時刻——瑞發科HSMT SerDes閃耀2025上海車展
- 豐田顛覆傳統,固態電池明年就能量產,最受傷的將是中國?
- 基于恩智浦與onsemi的駕駛員監控系統方案