1. 每個(gè)GPIO均有以下寄存器:
4個(gè)32位配置寄存器:GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR和GPIOx_PUPDR
GPIOx_MODER :配置IO端口方向?yàn)檩斎?輸出/AF/模擬
GPIOx_OTYPER :選擇輸出類型:推挽/開漏
GPIOx_OSPEEDR :選擇IO速度(與IO端口方向無關(guān))
GPIOx_PUPDR :選擇上拉/下拉電阻(與IO端口方向無關(guān))
2個(gè)32位數(shù)據(jù)寄存器:GPIOx_IDR、GPIOx_ODR
1個(gè)32位置位/復(fù)位寄存器:GPIOx_BSRR(使用該寄存器讀寫寄存器可以避免在讀寫期間被IRQ中斷,該讀寫操作屬于一個(gè)原子操作)
該寄存器允許置位/復(fù)位GPIOx_ODR上指定的一位,GPIOx_ODR上每位關(guān)聯(lián)到兩個(gè)控制位:GPIOx_BSRR:BSRR(i) [Bits 15:0]和 GPIOx_BSRR:BSRR(i+SIZE)[Bits31:16];往GPIOx_BSRR:BSRR(i) [Bits 15:0]寫1 可以置位對(duì)應(yīng)的ODR;往GPIOx_BSRR:BSRR(i) [Bits 31:16]寫1 可以置位對(duì)應(yīng)的ODR;往該寄存器寫0不會(huì)產(chǎn)生任何影響
1個(gè)32位鎖定寄存器:GPIOx_LCKR
必需通過通過一個(gè)特殊的讀寫時(shí)序才能寫入該寄存器,但時(shí)序正確時(shí),bit16會(huì)置位(lock key active),bits[15:0]顯示哪些IO端口被鎖定了,端口被鎖定之后直到下一個(gè)復(fù)位才能解鎖,鎖定之后以下寄存器將被凍結(jié):GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR、GPIOx_AFRH、GPIOx_AFRL
2個(gè)復(fù)用功能寄存器:GPIOx_AFRH、GPIOx_AFRL
2. 每個(gè)GPIO端口均可單獨(dú)設(shè)置為以下模式:
輸入+懸空
輸入+上拉
輸入+下拉
模擬(用作ADC、DAC輸出或者捕獲輸入情況下)
輸出+開漏+上拉/下拉(輸出模式下GPIO的輸出速度是可配置的)
輸出+推挽+上拉/下拉
復(fù)用功能+推挽+上拉/下拉
復(fù)用功能+開漏+上拉/下拉
下圖為GPIO的架構(gòu)圖:
3. GPIO一般用途
默認(rèn)情況或者剛復(fù)位后,所有IO端口被設(shè)置為輸入+懸空模式,除了調(diào)試接口默認(rèn)設(shè)置為了復(fù)用功能+上拉/下拉
當(dāng)端口被設(shè)置為輸出的時(shí)候,修改GPIOx_ODR對(duì)應(yīng)可改變輸出高低電平(一般會(huì)使用推挽或者開漏輸出(輸出低電平時(shí),只有N-MOS是接通的))
當(dāng)端口被設(shè)置為輸入的時(shí)候,每個(gè)AHB總線時(shí)鐘均會(huì)捕獲端口上高低電平,并存放在GPIOx_IDR寄存器
所有的GPIO端口均可通過配置寄存器使能或不使能內(nèi)部弱上拉/弱下拉
4 .I/O端口多路復(fù)用及映射
IO端口通過一個(gè)內(nèi)部的多路選擇器以允許在同一時(shí)刻只使用一種復(fù)用功能,這樣使得多個(gè)外圍電路共享同樣的IO端口
每個(gè)IO端口可以通過配置GPIOx_AFRL和GPIOx_AFRH設(shè)置所使能的復(fù)用功能(AF0~AF15)
復(fù)位之后,所有的IO連接到復(fù)用功能0(AF0)
外圍電路的復(fù)用功能映射到AF1~AF14
Cortex-M3 EVENTOUT映射到AF15
以下說明如何使用復(fù)用功能:
System Function:配置IO端口使能的復(fù)用功能(JTAG/SWD,在復(fù)位之后對(duì)應(yīng)端口會(huì)被調(diào)試器設(shè)置為調(diào)試功能下且不受GPIO寄存器的控制;RTC_50HZ,對(duì)應(yīng)端口需要設(shè)置為輸入+懸空;MCO,該端口必需配置在復(fù)用模式下)
GPIO:根據(jù)需要配置GPIOx_MODER設(shè)置IO端口工作模式(輸入、輸入/模擬)
Perpheral‘s Alternate Function:對(duì)于ADC/DAC,配置IO為模擬;對(duì)于其他外圍功能,配置GPIOx_MODER、GPIOx_OTYPE、GPIOx_PUPDR、GPIOx_OSPEEDER
EVENTOUT:配置IO端口復(fù)用功能AF15,用于輸出Cortex-M3 EVENTOUT信號(hào)
5. 外部中斷/喚醒
所有的IO端口均有外部中斷功能,使用外部中斷功能時(shí),IO端口必需設(shè)置為輸入模式
6. 輸入模式配置
當(dāng)IO端口配置為輸入模式時(shí):
輸出模式被禁用
施密特觸發(fā)器被激活
根據(jù)GPIOx_PUPDR寄存器使能上拉/下拉電阻
每個(gè)AHB時(shí)鐘均會(huì)采樣IO端口上的值存放到輸入數(shù)據(jù)寄存器中
通過讀取輸入數(shù)據(jù)寄存器可以檢測(cè)IO狀態(tài)
7. 輸出模式配置
當(dāng)IO端口配置為輸出模式時(shí):
輸出模式使能
施密特出發(fā)器被激活
-- 開漏模式時(shí):輸出0時(shí),N-MOS導(dǎo)通(P-MOS任何情況下不會(huì)導(dǎo)通)
-- 推挽模式時(shí):輸出0時(shí),N-MOS導(dǎo)通;輸出1時(shí),P-MOS導(dǎo)通
根據(jù)GPIOx_PUPDR寄存器使能弱上拉/下拉
每個(gè)AHB時(shí)鐘均會(huì)采樣IO端口上的值存放到輸入數(shù)據(jù)寄存器中
通過讀取輸入數(shù)據(jù)寄存器可以檢測(cè)IO狀態(tài)
通過讀取輸出數(shù)據(jù)寄存器可以得到最后寫入的值
8. 復(fù)用功能配置
當(dāng)IO端口配置為復(fù)用功能時(shí):
輸出模式下可配置為開漏或推挽
復(fù)用功能的輸出信號(hào)將驅(qū)動(dòng)輸出緩沖區(qū)
輸入端的施密特觸發(fā)器被激活
根據(jù)GPIOx_PUPDR寄存器使能弱上拉/下拉
每個(gè)AHB時(shí)鐘均會(huì)采樣IO端口上的值存放到輸入數(shù)據(jù)寄存器中
通過讀取輸入數(shù)據(jù)寄存器可以檢測(cè)IO狀態(tài)
9. 模擬模式配置
當(dāng)IO端口配置為模擬模式時(shí):
輸出模式被禁用
輸入模式下的施密特觸發(fā)器被激活(為每個(gè)IO口的模擬值提供零功耗,施密特觸發(fā)器的輸出端被強(qiáng)制輸出為0)
弱上拉/下拉被禁用
讀取輸入寄存器獲取到0
10. 外部時(shí)鐘/外部晶振端口復(fù)用
沒有使用LSE時(shí),OSC32_IN和OSC32_OUT 可配置為一般用途的IO端口
沒有使用HSE時(shí),OSC_IN和OSC_OUT 可配置為一般用途的IO端口
11. 選擇RTC_AF1復(fù)用功能
STM32L152XX擁有以下特性
兩個(gè)GPIO端口可配置為喚醒源WKUP1和WKUP3
一個(gè)GPIO端口可配置為喚醒源WKUP2,可用于檢測(cè)篡改、時(shí)間戳事件,輸出RTC AFO_ALARM、AFO_CALIB
RTC_AF1端口(PC13)可配置為以下功能:
喚醒源(WKUP2):配置PWR_CSR寄存器中的EWUP2位
RTC AFO_ALARM輸出:根據(jù)RTC_CR寄存器中的OSEL[1:0]輸出可配置為:RTC Alarm A、 RTC Alarm B、RTC Wakeup
RTC AFO_CALIB輸出:配置RTC_CR寄存器中的COE[23]位
RTC AFI_TAMPER1 : 篡改事件檢測(cè)
時(shí)間戳事件檢測(cè)
12. 初始化GPIO端口例子
void Init_GPIOS(void){
GPIO_InitTypeDef GPIO_InitStructure; //定義初始化結(jié)構(gòu)體
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE); //使能對(duì)應(yīng)AHB總線時(shí)鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; //根據(jù)需求配置GPIO工作模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIO端口
}
上一篇:STM32的GPIO—快速IO的使用與講解
下一篇:STM32的GPIO口能夠承受多大電壓? 哪些IO口能容忍5V?
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 基于AVR EVK1105的移動(dòng)遠(yuǎn)程桌面多媒體設(shè)備
- 基于AVR EVK1105平臺(tái)的兒童伴睡寶方案設(shè)計(jì)
- 基于AVR的太陽(yáng)能高速公路智能電子顯示屏設(shè)計(jì)
- 基于MIPS32設(shè)計(jì)的智能電網(wǎng)家庭用電監(jiān)控系統(tǒng)
- 基于Cerebot MX4開發(fā)板的家用智能監(jiān)控系統(tǒng)整體方案設(shè)計(jì)
- 確定運(yùn)算放大器輸出驅(qū)動(dòng)能力的方法分析
- 寵物狗無線感知交互系統(tǒng)軟硬件設(shè)計(jì)
- stm32晶振不起振的原因 stm32單片機(jī)的基本工作原理
- 從三個(gè)層次來介紹用于機(jī)器人主控板的設(shè)計(jì)思想
- 人工智能在汽車行業(yè)中的應(yīng)用
- 麥格納集成式艙內(nèi)感知系統(tǒng) 引領(lǐng)車輛安全創(chuàng)新
- 2025世界人工智能大會(huì)上的各種機(jī)器人
- 際上導(dǎo)航:高精度組合定位感知技術(shù)在智能輔助駕駛中的應(yīng)用
- 量產(chǎn)元年的人形機(jī)器人,要破局C端?
- 上半年賺304億元的寧德時(shí)代,給出固態(tài)電池量產(chǎn)時(shí)間表
- 新泗威車載后排航空座椅控制顯示器 | 申報(bào)2025第七屆金輯獎(jiǎng)最佳技術(shù)實(shí)踐應(yīng)用獎(jiǎng)
- L3 智駕,需要?dú)⑹旨?jí)座艙
- 2025動(dòng)力電池中場(chǎng)戰(zhàn)局,正力新能“三化策略”應(yīng)戰(zhàn)
- 智能手機(jī)共存解決方案協(xié)同合作使用共用天線
- 跟帖留言贏好禮:60年回眸——聊一聊示波器的前世今生!
- 任選下載有禮|《新概念模擬電路》全五冊(cè)合集/《ADI 參考電路合集》
- 下載有禮|精華課件匯編:泰克半導(dǎo)體器件的表征及可靠性研究交流會(huì)暨吉時(shí)利測(cè)試測(cè)量年度研討會(huì)
- 【 有獎(jiǎng)直播】 掌握潮流~TI DLP®技術(shù)在汽車上的創(chuàng)新及全新應(yīng)用
- 看專題答題贏好禮!PI 穩(wěn)定可靠的TOPSwitch-JX開關(guān)電源IC
- 有獎(jiǎng)直播:基于TI Jacinto™ 的深度學(xué)習(xí)平臺(tái)介紹
- 2020-2021年安森美和安富利物聯(lián)網(wǎng)創(chuàng)新設(shè)計(jì)大賽
- 2025 英飛凌消費(fèi)、計(jì)算與通訊創(chuàng)新大會(huì)(北京站)重磅來襲!
- EEWORLD月度問答榜(第3期)
- 下載《Altera SoC深度體驗(yàn)》,打分評(píng)論贏好禮
- 博世專為奧迪開發(fā)的第二代液晶儀表拆解
- 汽車制造商為超跑制造3D打印結(jié)構(gòu)部件,百公里提速1.9s
- 新型無鈷高壓尖晶石正極材料問世 具有高面積容量
- 中國(guó)汽車產(chǎn)業(yè)現(xiàn)狀及未來發(fā)展趨勢(shì)分析
- 互聯(lián)網(wǎng)公司為何能率先布局無人駕駛汽車產(chǎn)業(yè)?
- Mini-LED規(guī)模量產(chǎn)前夕,高中端產(chǎn)品分層或有助化解成本困境
- 晶盛機(jī)電:在手尚未完成加工設(shè)備合同合計(jì)59億元
- 群智咨詢:11月份智能手機(jī)面板價(jià)格仍是分化趨勢(shì)
- 賽微電子:瑞典MEMS晶圓廠產(chǎn)能提升超30%
- 贛鋒鋰業(yè)擬向上海贛鋒增資2億元 后者或增資鋰黏土項(xiàng)目公司
- 晶振注意事項(xiàng)
- 一種應(yīng)用于NVR/DVR系統(tǒng)的備電方案
- 0
- 請(qǐng)問,終端或者協(xié)調(diào)器使用多次串口打印后容易掛掉,這是怎么回事?
- XMOS采用ARM授權(quán)設(shè)計(jì)工業(yè)mcu可行嗎?
- 在tornado下包含tcl.h的問題
- 我的CAMERA圖象在LCD上怎么只能顯示半屏?要不上半屏,要不下半屏。老是全屏顯示不了,初始化參數(shù)我都是按全屏來設(shè)置的。
- 【藏書閣】鎖相環(huán)電路設(shè)計(jì)和調(diào)試心得
- 求壓力測(cè)控系統(tǒng)主程序流程圖?。∪f(wàn)分感謝??!
- 奇怪的12864液晶