為什么要新增這個所謂番外呢?
是因為今天在做嘗試做庫的情況下又重新復習了一遍標準外設的配置操作,發現身為非科班的我確實在基礎方面的不牢固,所以為了增加我的學習效率,特開此STM32番外篇來分門別類根據STM32標準庫AI手冊來講解不同外設的配置和操作。
好了不水了,今天來講一下stm32的GPIO的操作與配置。首先先看一下GPIO的寄存器結構
至于什么是AFIO,本著實事求是的精神先忽略一下這個,我們只知道它涉及到IO復用部分,所以可以暫且擱置,畢竟目前我們不缺IO用/(ㄒoㄒ)/~~
至于寄存器操作IO的部分,我會在接下來的幾天里接觸寄存器操作所以這里僅僅當作展示。
首先介紹一下
GPIO_DeInit();GPIO_AFIODeInit ();GPIO_StructInit() ;
這三個函數分別會將缺省值配置為IO進行基本配置,我們理解為默認模式。
GPIO_Init();用于初始化GPIO寄存器包含四個隊GPIO的基本設置值分別為
GPIO_Pin,GPIO_Mode,GPIO_Speed,
其中GPIO_Pin是設置相應的管腳,
Mode為設置相應的管腳工作狀態:
G PIO_Mode_AIN 模擬輸入
GPIO_Mode_IN_FLOATING 浮空輸入
GPIO_Mode_IPD 下拉輸入
GPIO_Mode_IPU 上拉輸入
GPIO_Mode_Out_OD 開漏輸出
GPIO_Mode_Out_PP 推挽輸出
GPIO_Mode_AF_OD 復用開漏輸出
GPIO_Mode_AF_PP 復用推挽輸出
Speed是設置選中國管腳的速率,分別有三個選項:
GPIO_Speed_10MHz 最高輸出速率 10MHz
GPIO_Speed_2MHz 最高輸出速率 2MHz
GPIO_Speed_50MHz 最高輸出速率 50MHz
對GPIO的基本操作要通過一個結構體GPIO_InitTypeDef完成操作
完整的管腳定義為:
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
這里就定義了A10管腳為浮空輸入,掃描速率為10Mhz
特別要注意的是在實際操作中除了對管腳的聲明配置外還要設置管腳的時鐘,沒有時鐘設置的管腳是不能正常工作的,這里要特別注意!!!
函數 GPIO_ReadOutputDataBit
GPIO_ReadOutputData
GPIO_ReadInputDataBit
GPIO_ReadInputDat
這四個函數為讀輸入/輸出的GPIO數據。因為這個單片機中管腳通常為數字管腳,所以一個管腳的值通常為0/1.讀bit就是讀一位GPIO的Pin值而Data為讀若干個GPIO的輸出輸入數據,要便于區分讀Date和讀DataBit的區別。
實例:
u16 ReadValue;
ReadValue = GPIO_ReadInputData(GPIOC);