所有的玩單片機的都離不開IO口操作,而是STM32的IO口就是GPIO。剛拿到使STM32例程時感覺是什麼都看不懂,爲什麼點亮一個LED燈代碼也一大片。經過不斷地學習和總結,發現GPIO的操作不管你是點燈、蜂鳴器還是按鍵都是一個套路。總結一下幾步:
創建結構體:GPIO_InitTypeDe
使能GPIO端口時鐘:調用函數RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE)
結構體成員賦值,設置相關參數:
GPIO_InitStructure.GPIO_Pin 設置GPIO第幾個管腳,GPIO_Pin_1表示第一個管腳
GPIO_InitStructure.GPIO_Mode GPIO有8種輸入輸出方式分別如下:
宏定義模式名 值 輸入輸出方式
GPIO_Mode_AIN = 0x0, 模擬輸入
GPIO_Mode_IN_FLOATING = 0x04, 輸入浮空
GPIO_Mode_IPD = 0x28, 輸入下拉
GPIO_Mode_IPU = 0x48, 輸入下拉
GPIO_Mode_Out_OD = 0x14, 開漏輸出
GPIO_Mode_Out_PP = 0x10, 推輓輸出
GPIO_Mode_AF_OD = 0x1C, 開漏複用功能
GPIO_Mode_AF_PP = 0x18 推輓複用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
調用函數GPIO_Init初始化GPIO
原型:void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
參數:第一個參數是用來指定 GPIO,取值範圍爲 GPIOA~GPIOG。第二個參數爲初始化參數結構體指針, 結構體類型爲 GPIO_InitTypeDef
GPIO讀寫操作
GPIO輸出高電平 GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO輸出高電平 GPIO_ResetBits(GPIOB,GPIO_Pin_5);
讀取GPIO的值 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4);
GPIO初始化函數
void GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //創建結構體
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能GPIO時鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //設置GPIO_pin_5,說明IO口5個引腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //設置輸入輸出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //設置頻率
GPIO_Init(GPIOB, &GPIO_InitStructure); //調用GPIO_Init函數配置GPIO
}
GPIO讀寫函數
//GPIO寫函數,包括GPIO的拉高和拉低
GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5拉高,輸出高電平
GPIO_ResetBits(GPIOB,GPIO_Pin_5); //PB.5拉低,輸出低電平
//GPIO讀函數
GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4); //讀取PE.4的電平