GPIO簡介
GPIO的英文名稱是General Purpose Input Output,顧名思意,就是通用輸入輸出口,可以用來輸入輸出高低電平進(jìn)而控制各種連接在GPIO上的模塊等等。STM32的GPIO就是51單片機(jī)的P11、P12等等引腳,不過STM32的GPIO更加強(qiáng)大,具有多種模式,為了控制功耗,每一個(gè)GPIO都有單獨(dú)的時(shí)鐘開關(guān),每使用到一個(gè)GPIO都要對(duì)其時(shí)鐘使能,而且STM32的GPIO的輸入輸出必須單獨(dú)配置。
GPIO的模式與各種外設(shè)GPIO模式的設(shè)置
GPIO有八種輸入輸出模式,對(duì)于輸出模式還能設(shè)置輸出的速度,每一個(gè)外設(shè)對(duì)應(yīng)GPIO口的模式都不全相同,例如使用I2C_SCL的時(shí)候GPIO口要設(shè)置成 開漏復(fù)用輸出,SPI_SCK主模式GPIO口要設(shè)置成 推挽復(fù)用輸出等等,記住是不可能的,不過官方的參考手冊(cè)就已經(jīng)給出了每一個(gè)外設(shè)的GPIO的配置情況,我們需要用到某個(gè)外設(shè)GPIO口的時(shí)候不知道怎么配置模式可以到《STM32中文參考手冊(cè)》8.1.11小節(jié)查看
GPIO的常用寄存器
首先對(duì)于每一個(gè)寄存器必須以字(32位)的方式操作這些外設(shè)寄存器
端口配置低寄存器(GPIOx_CRL) (x=A…E)
配置GPIO 0~7位的模式端口配置高寄存器(GPIOx_CRH) (x=A…E)
配置GPIO 8~16位的模式端口輸入數(shù)據(jù)寄存器(GPIOx_IDR) (x=A…E)
有16個(gè)位 只讀并只能以字(16位)的形式讀出
對(duì)于每個(gè)GPIO16個(gè)引腳的狀態(tài),是高電平就是1,低電平就是0端口輸出數(shù)據(jù)寄存器(GPIOx_ODR) (x=A…E)
配置GPIO輸出的電平端口位設(shè)置/清除寄存器(GPIOx_BSRR) (x=A…E)
前16位寫1就會(huì)對(duì)對(duì)應(yīng)的ODR寄存器的位寫1
后16位寫1就會(huì)對(duì)對(duì)應(yīng)的ODR寄存器的位寫0
一般只用BSRR寄存器來寫1,也就是只用前16位,后面16位一般不用端口位清除寄存器(GPIOx_BRR) (x=A…E)
前16位有效,后16位無效,對(duì)一個(gè)位寫1,就會(huì)清楚對(duì)應(yīng)的ODR位為0
功能上于BSRR的后16位一樣,因此一般不用BSRR的后16位
固件庫中的GPIO類型結(jié)構(gòu)體,里面包含了各種寄存器,而且都是有序排布,每兩個(gè)寄存器的地址相隔是4:
typedef struct
{
__IO uint32_t CRL;
__IO uint32_t CRH;
__IO uint32_t IDR;
__IO uint32_t ODR;
__IO uint32_t BSRR;
__IO uint32_t BRR;
__IO uint32_t LCKR; //不常用
} GPIO_TypeDef;
GPIO的初始化
對(duì)于任何一種外設(shè)的初始化,其實(shí)都遵循差不多的配置流程
無非就是定義一個(gè)結(jié)構(gòu)體變量,里面放了外設(shè)相關(guān)的寄存器,開始對(duì)于的外設(shè)的時(shí)鐘(有的外設(shè)和GPIO共用引腳(復(fù)用),這時(shí)候需要把兩個(gè)時(shí)鐘都打開),配置結(jié)構(gòu)體變量中的參數(shù)(即外設(shè)的各種配置參數(shù),例如GPIO的模式,輸出速度等等),最后調(diào)用一個(gè)初始化函數(shù)一般叫XXX_Init(),入口參數(shù)一般是塞入結(jié)構(gòu)體(注意要加上&取地址號(hào)),外設(shè)的名稱,如果有特殊需要,比如需要開啟中斷,那就還需要使用一個(gè)中斷開啟函數(shù)什么什么的。
例:初始化GPIOE_5為復(fù)用推挽輸出
void GPIO_Config()
{
GPIO_InitTypeDef GPIO_InitStructure; //定義初始化結(jié)構(gòu)體
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE); //初始化GPIO的時(shí)鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //引腳位
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//輸出速度
GPIO_Init(GPIOE,&GPIO_InitStructure);//調(diào)用庫函數(shù)的GPIO初始化函數(shù)
}
GPIO的常用庫函數(shù)
初始化函數(shù)
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);引腳置1函數(shù)
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);引腳置0函數(shù)
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
用GPIO點(diǎn)亮LED
LED連接的引腳為PE5,低電平點(diǎn)亮
#include "stm32f10x.h"
#include "bsp_systick.h" //systick 用于寫延時(shí)函數(shù)
void GPIO_Config()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStructure);
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
int main(void)
{
GPIO_Config();
GPIO_SetBits(GPIOE,GPIO_Pin_5); //設(shè)置GPIOE的電平為高,即滅掉LED
while(1)
{
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
delay_ms(300);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
delay_ms(300);
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
delay_ms(300);
GPIO_SetBits(GPIOB,GPIO_Pin_5);
delay_ms(300);
}
}
上一篇:STM32單片機(jī)基礎(chǔ)03——使用GPIO點(diǎn)亮一個(gè)LED
下一篇:STM32——GPIO設(shè)置:快速點(diǎn)亮第一個(gè)LED燈
推薦閱讀
史海拾趣
隨著公司業(yè)務(wù)的不斷發(fā)展,Elcoma意識(shí)到要進(jìn)一步拓展市場,必須與國際同行建立合作關(guān)系。他們積極尋求與全球知名電子企業(yè)的合作機(jī)會(huì),通過技術(shù)交流和合作研發(fā),不斷提升自身的技術(shù)水平和市場競爭力。同時(shí),Elcoma還積極參與國際電子展會(huì)和論壇,展示公司的最新技術(shù)和產(chǎn)品,吸引了眾多國際客戶的關(guān)注。這些國際合作不僅為Elcoma帶來了更多的商業(yè)機(jī)會(huì),也進(jìn)一步提升了公司的國際影響力。
隨著ETIC的產(chǎn)品在市場上逐漸獲得認(rèn)可,公司面臨著市場拓展的挑戰(zhàn)。為了擴(kuò)大市場份額,ETIC決定進(jìn)入國際市場。他們首先選擇了亞洲市場作為突破口,通過深入了解當(dāng)?shù)厥袌鲂枨蠛透偁幁h(huán)境,制定了一系列有針對(duì)性的營銷策略。經(jīng)過幾年的努力,ETIC成功地在亞洲市場建立了穩(wěn)定的客戶基礎(chǔ),并逐漸將業(yè)務(wù)拓展到了歐洲和北美市場。
隨著業(yè)務(wù)的不斷擴(kuò)展,City Technology于1990年在英國南海岸的普茨茅斯建立了生產(chǎn)基地,并將辦公樓從倫敦中心區(qū)遷至該地。這一舉措不僅提高了公司的生產(chǎn)效率,也為其進(jìn)一步拓展國際市場提供了有力支持。此后,公司開始在全球范圍內(nèi)設(shè)立銷售中心,包括波恩(德國)、蘇黎世(瑞士)、上海及芝加哥等地,逐步實(shí)現(xiàn)了業(yè)務(wù)的國際化。
90年代初期,“General Microcircuits”敏銳地捕捉到市場對(duì)定制化半導(dǎo)體解決方案的需求增長。公司迅速調(diào)整戰(zhàn)略,成立專門的定制化服務(wù)部門,為客戶提供從需求分析、設(shè)計(jì)開發(fā)到生產(chǎn)測(cè)試的全流程定制化服務(wù)。這種以客戶為中心的服務(wù)模式贏得了眾多客戶的青睞,尤其是在通信、汽車電子等高端應(yīng)用領(lǐng)域,公司憑借定制化的高性能芯片解決方案占據(jù)了重要的市場份額。
在COVID-19全球大流行期間,CUI Devices展現(xiàn)出了高度的社會(huì)責(zé)任感。公司決定向那些致力于設(shè)計(jì)和制造抗擊疫情關(guān)鍵醫(yī)療設(shè)備的OEM、制造商、志愿者和組織提供免費(fèi)的產(chǎn)品樣本。這些樣本涵蓋了呼吸器、呼吸機(jī)、血液分析儀、測(cè)試設(shè)備、患者監(jiān)護(hù)儀、成像系統(tǒng)和家庭醫(yī)用器材等多個(gè)領(lǐng)域。此外,公司還與全球的制造設(shè)施和分銷合作伙伴緊密合作,以確保其多樣化的產(chǎn)品組合能夠隨時(shí)滿足市場需求。
[引]avrADC轉(zhuǎn)換實(shí)驗(yàn)-ADC噪聲抑制模式 /* ******************************************************** * 文件: adc.c * 功能: ADC轉(zhuǎn)換實(shí)驗(yàn)-ADC噪聲抑制模式 * 工具: WinAVR20050214(AVR-GCC) * mcu : Atmega8 * 時(shí)鐘: 外部晶體8MHz * 日期: 2005年10月25 ...… 查看全部問答∨ |
如何開始DSP編程 這本書,從安裝CCS 軟件開始,一步一步教你如何開始DSP編程, 并給出了相應(yīng)操作的圖示,是一本難得的好書 對(duì)初學(xué)者來說,可以以最快的速度入門。 … 查看全部問答∨ |
工程師出身的還是銷售、市場出身的員工更容易做到公司上層? 歡迎加入討論!! 工程師出身的還是銷售、市場出身的員工更容易做到公司上層? 歡迎加入討論!! 1.工程師會(huì)有更大的上升空間,因?yàn)閺淖钕聦拥墓こ處熥錾蟻淼膯T工對(duì)公司的產(chǎn)品線會(huì)有更加深刻的認(rèn)識(shí),技術(shù)上的優(yōu)勢(shì) 使他們更能了解更深層次的市場動(dòng)向,從而對(duì) ...… 查看全部問答∨ |
用最新庫玩轉(zhuǎn)智林STM32開發(fā)板(之四)------點(diǎn)亮真彩屏 驅(qū)動(dòng)智林STM32開發(fā)板,真彩屏首先設(shè)定PINC為輸出 所有子函數(shù)都在TFT018.c中 編譯運(yùn)行,則在屏幕顯示如下: STM32F EVAL BOARD Version 1.0 ZERO Research www.the0.net 整個(gè)工程 ...… 查看全部問答∨ |
本帖最后由 paulhyde 于 2014-9-15 09:02 編輯 往屆題目:懸掛運(yùn)動(dòng)控制系統(tǒng),包括完整的硬件電路,程序代碼以及報(bào)告~~希望能給你幫助~~ … 查看全部問答∨ |
|
如何降低在Xilinx 編譯時(shí)的Peak Memory Usage? Peak Memory Usage好象是編譯VHDL時(shí)使用到的內(nèi)存.我剛用Xilinx 的,編了個(gè)簡單的只是對(duì)幾個(gè)信號(hào)進(jìn)行初始化,就用了120,GATE COUNT才48.而有個(gè)資料里的GATE COUNT是414,573.Peak Memory Usage才86 MB .不知道需要如何設(shè)置什么參數(shù)? &nb ...… 查看全部問答∨ |
|
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 迅為IMX6開發(fā)板Android應(yīng)用-AndroidStudio-calculator測(cè)試
- 玩轉(zhuǎn) ESP32 + Arduino (二十) SIM800L上傳數(shù)據(jù)到OneNet(新版Mqtts)
- 玩轉(zhuǎn) ESP32 + Arduino (二十一) SPIFFS文件系統(tǒng) (已棄用)
- 玩轉(zhuǎn) ESP32 + Arduino (二十二) SIM800L上傳數(shù)據(jù)到阿里IOT(溫濕度和LBS)(NTP對(duì)時(shí))
- 玩轉(zhuǎn) ESP32 + Arduino (二十三) 多文件系統(tǒng)及全局變量
- 玩轉(zhuǎn) ESP32 + Arduino (二十四) SD卡讀寫
- 玩轉(zhuǎn) ESP32 + Arduino (二十五) SSD1306庫驅(qū)動(dòng)OLED
- 玩轉(zhuǎn) ESP32 + Arduino(二十六) 按鍵控制庫 OneButton
- 玩轉(zhuǎn) ESP32 + Arduino(二十七) ESP對(duì)象
- 從實(shí)驗(yàn)室到工業(yè)場景:優(yōu)艾智合密集發(fā)布7款人形機(jī)器人
- 地表最酷人形機(jī)器人,拿下新一輪2億元融資
- 自動(dòng)駕駛警示:沒有企業(yè)能完全避免自動(dòng)駕駛在復(fù)雜環(huán)境中的失誤
- 高階就高級(jí)嗎?我們到底該如何使用智能駕駛輔助?
- 即將迎來第三代?嵐圖固態(tài)電池研發(fā)進(jìn)展曝光
- 一文了解2025年3月的固態(tài)電池大事件!
- 傳統(tǒng)鋰電、半固態(tài)、固態(tài)電池終極對(duì)決:誰將主宰新能源未來?
- 國產(chǎn)智駕迎戰(zhàn)特斯拉FSD,背后AI含量差幾何?
- 左手AI,右手機(jī)器人,半導(dǎo)體巨頭英飛凌的新故事
- 激光雷達(dá)的復(fù)仇
- 一些機(jī)器人領(lǐng)頭羊廠商的多款協(xié)作機(jī)器人比較說明
- 機(jī)器人成戰(zhàn)場的“大殺器”,人工智能、無人機(jī)等多種技術(shù)在其中
- 詳談如何有效精確測(cè)量電源紋波
- 采用示波器設(shè)計(jì)Z軸調(diào)制電路
- 示波器無源探頭的重要性
- 京東方或?qū)で蟪蔀閕Phone13面板供應(yīng)商:蘋果全系要用OLED
- 從CES 2021看智能家居未來的5個(gè)走向
- 用戶反映谷歌Pixel 2等手機(jī)存嚴(yán)重相機(jī)問題
- 華為“南泥灣”計(jì)劃浮出水面,下一步計(jì)劃是要養(yǎng)豬?
- 解鎖自拍新姿勢(shì) OPPO新專利曝光:前置鏡頭可以橫向滑動(dòng)