1、GPIO 工作模式
(1)輸入模式(模擬、上拉、下拉、浮空)
輸入模式可以配置為模擬、上拉、下拉以及浮空模式。上拉和下拉輸入很好理解,默認的電平由上拉或者下拉決定。浮空輸入的電平是不確定的,完全由外部的輸入決定,一般接按鍵的時候可以使用這個模式。模擬輸入則用于 ADC 采集。
(2)輸出模式(推挽/開漏)
在輸出模式中,推挽模式時雙 MOS 管以推挽方式工作,輸出數據寄存器GPIOx_ODR 可控制 I/O 輸出高低電平。開漏模式時,只有 N-MOS 管工作,輸出數 據 寄 存 器 可 控 制 I/O 輸 出 高 阻 態 或 低 電 平 。
(3)復用功能(推挽/開漏)
復用功能模式中,輸出使能,輸出速度可配置,可工作在開漏及推挽模式,但是輸出信號源于其它外設,輸出數據寄存器 GPIOx_ODR 無效;輸入可用,通過輸入數據寄存器可獲取 I/O 實際狀態,但一般直接用外設的寄存器來獲取該數據信號。
(4)模擬輸入輸出(上下拉無影響)
模擬輸入輸出模式中,雙 MOS 管結構被關閉,施密特觸發器停用,上/下拉也被禁止。其它外設通過模擬通道進行輸入輸出。
2、GPIO驅動源碼
#include "stm32f10x.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定義結構體變量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//開啟時鐘
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; //選擇你要設置的IO口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //設置推挽輸出模式
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //設置傳輸速率
GPIO_Init(GPIOC,&GPIO_InitStructure); //初始化GPIO
GPIO_SetBits(GPIOC,GPIO_Pin_0); //將LED端口拉高,熄滅所有LED
}
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定義結構體變量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//開啟時鐘
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; //選擇你要設置的IO口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; //下拉輸入
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //設置傳輸速率
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
+關注
關注
98文章
6514瀏覽量
545054 -
模擬
+關注
關注
7文章
1426瀏覽量
83938 -
電平
+關注
關注
5文章
361瀏覽量
39939
發布評論請先 登錄
相關推薦
評論