1、GPIO 工作模式
(1)輸入模式(模擬、上拉、下拉、浮空)
輸入模式可以配置為模擬、上拉、下拉以及浮空模式。上拉和下拉輸入很好理解,默認(rèn)的電平由上拉或者下拉決定。浮空輸入的電平是不確定的,完全由外部的輸入決定,一般接按鍵的時(shí)候可以使用這個(gè)模式。模擬輸入則用于 ADC 采集。
(2)輸出模式(推挽/開(kāi)漏)
在輸出模式中,推挽模式時(shí)雙 MOS 管以推挽方式工作,輸出數(shù)據(jù)寄存器GPIOx_ODR 可控制 I/O 輸出高低電平。開(kāi)漏模式時(shí),只有 N-MOS 管工作,輸出數(shù) 據(jù) 寄 存 器 可 控 制 I/O 輸 出 高 阻 態(tài) 或 低 電 平 。
(3)復(fù)用功能(推挽/開(kāi)漏)
復(fù)用功能模式中,輸出使能,輸出速度可配置,可工作在開(kāi)漏及推挽模式,但是輸出信號(hào)源于其它外設(shè),輸出數(shù)據(jù)寄存器 GPIOx_ODR 無(wú)效;輸入可用,通過(guò)輸入數(shù)據(jù)寄存器可獲取 I/O 實(shí)際狀態(tài),但一般直接用外設(shè)的寄存器來(lái)獲取該數(shù)據(jù)信號(hào)。
(4)模擬輸入輸出(上下拉無(wú)影響)
模擬輸入輸出模式中,雙 MOS 管結(jié)構(gòu)被關(guān)閉,施密特觸發(fā)器停用,上/下拉也被禁止。其它外設(shè)通過(guò)模擬通道進(jìn)行輸入輸出。
2、GPIO驅(qū)動(dòng)源碼
#include "stm32f10x.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定義結(jié)構(gòu)體變量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//開(kāi)啟時(shí)鐘
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);//開(kāi)啟時(shí)鐘
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)
{
//如果按鍵按下(不進(jìn)行消抖,因?yàn)橹皇菧y(cè)試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)注
98文章
6406瀏覽量
543855 -
模擬
+關(guān)注
關(guān)注
7文章
1420瀏覽量
83877 -
電平
+關(guān)注
關(guān)注
5文章
357瀏覽量
39816
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論