1、GPIO 工作模式
(1)輸入模式(模擬、上拉、下拉、浮空)
輸入模式可以配置為模擬、上拉、下拉以及浮空模式。上拉和下拉輸入很好理解,默認的電平由上拉或者下拉決定。浮空輸入的電平是不確定的,完全由外部的輸入決定,一般接按鍵的時候可以使用這個模式。模擬輸入則用于 ADC 采集。
(2)輸出模式(推挽/開漏)
在輸出模式中,推挽模式時雙 MOS 管以推挽方式工作,輸出數(shù)據(jù)寄存器GPIOx_ODR 可控制 I/O 輸出高低電平。開漏模式時,只有 N-MOS 管工作,輸出數(shù) 據(jù) 寄 存 器 可 控 制 I/O 輸 出 高 阻 態(tài) 或 低 電 平 。
(3)復(fù)用功能(推挽/開漏)
復(fù)用功能模式中,輸出使能,輸出速度可配置,可工作在開漏及推挽模式,但是輸出信號源于其它外設(shè),輸出數(shù)據(jù)寄存器 GPIOx_ODR 無效;輸入可用,通過輸入數(shù)據(jù)寄存器可獲取 I/O 實際狀態(tài),但一般直接用外設(shè)的寄存器來獲取該數(shù)據(jù)信號。
(4)模擬輸入輸出(上下拉無影響)
模擬輸入輸出模式中,雙 MOS 管結(jié)構(gòu)被關(guān)閉,施密特觸發(fā)器停用,上/下拉也被禁止。其它外設(shè)通過模擬通道進行輸入輸出。
![pYYBAGPl5uqAPSqXAAXlSC3EjnE337.png](https://file.elecfans.com/web2/M00/90/4D/pYYBAGPl5uqAPSqXAAXlSC3EjnE337.png)
2、GPIO驅(qū)動源碼
#include "stm32f10x.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定義結(jié)構(gòu)體變量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//開啟時鐘
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; //選擇你要設(shè)置的IO口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //設(shè)置推挽輸出模式
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //設(shè)置傳輸速率
GPIO_Init(GPIOC,&GPIO_InitStructure); //初始化GPIO
GPIO_SetBits(GPIOC,GPIO_Pin_0); //將LED端口拉高,熄滅所有LED
}
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定義結(jié)構(gòu)體變量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//開啟時鐘
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; //選擇你要設(shè)置的IO口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; //下拉輸入
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //設(shè)置傳輸速率
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化GPIO
}
int main( void )
{
LED_Init();
KEY_Init();
while(1)
{
//如果按鍵按下(不進行消抖,因為只是測試GPIOA_0是否拉低)
if( GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) )
{
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
}
else
{
GPIO_SetBits(GPIOC,GPIO_Pin_0);
}
}
}
--END--
-
adc
+關(guān)注
關(guān)注
99文章
6538瀏覽量
545951 -
模擬
+關(guān)注
關(guān)注
7文章
1430瀏覽量
83995 -
電平
+關(guān)注
關(guān)注
5文章
361瀏覽量
40037
發(fā)布評論請先 登錄
相關(guān)推薦
淺談GPIO的操作
GPIO的操作步驟
STM32 GPIO使用操作步驟
基于STM32的GPIO操作
嵌入式linux驅(qū)動對gpio的基本操作
GPIO操作方式
STM32基本GPIO操作步驟
英創(chuàng)信息技術(shù)工控主板快速GPIO操作介紹
![英創(chuàng)信息技術(shù)工控主板快速<b class='flag-5'>GPIO</b><b class='flag-5'>操作</b>介紹](https://file.elecfans.com/web1/M00/B3/BA/pIYBAF4hFCKAJsLZAADK6AOSizc632.png)
Linux內(nèi)核GPIO操作函數(shù)的詳解分析
嵌入式Linux驅(qū)動 GPIO操作 包括驅(qū)動和應(yīng)用層程序?qū)︱?qū)動進行測試
![嵌入式Linux驅(qū)動 <b class='flag-5'>GPIO</b><b class='flag-5'>操作</b> 包括驅(qū)動和應(yīng)用層程序?qū)︱?qū)動進行測試](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
stm32單片機基于hal庫對對GPIO的操作
![stm32單片機基于hal庫對對<b class='flag-5'>GPIO</b>的<b class='flag-5'>操作</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32基本GPIO操作:按鍵輸入(掃描+外部中斷)
![STM32基本<b class='flag-5'>GPIO</b><b class='flag-5'>操作</b>:按鍵輸入(掃描+外部中斷)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論